using System.Text.Json.Serialization; namespace ModelContextProtocol.Protocol; /// /// Represents the capabilities that a server may support. /// /// /// /// Server capabilities define the features and functionality available when clients connect. /// These capabilities are advertised to clients during the initialize handshake. /// /// /// See the schema for details. /// /// public class ServerCapabilities { /// /// Gets or sets experimental, non-standard capabilities that the server supports. /// /// /// /// The dictionary allows servers 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. Clients should not assume the presence of any experimental capability /// without checking for it first. /// /// [JsonPropertyName("experimental")] public Dictionary? Experimental { get; set; } /// /// Gets or sets a server's logging capability, supporting sending log messages to the client. /// [JsonPropertyName("logging")] public LoggingCapability? Logging { get; set; } /// /// Gets or sets a server's prompts capability for serving predefined prompt templates that clients can discover and use. /// [JsonPropertyName("prompts")] public PromptsCapability? Prompts { get; set; } /// /// Gets or sets a server's resources capability for serving predefined resources that clients can discover and use. /// [JsonPropertyName("resources")] public ResourcesCapability? Resources { get; set; } /// /// Gets or sets a server's tools capability for listing tools that a client is able to invoke. /// [JsonPropertyName("tools")] public ToolsCapability? Tools { get; set; } /// /// Gets or sets a server's completions capability for supporting argument auto-completion suggestions. /// [JsonPropertyName("completions")] public CompletionsCapability? Completions { get; set; } /// Gets or sets notification handlers to register with the server. /// /// /// When constructed, the server will enumerate these handlers once, which may contain multiple handlers per notification method key. /// The server will not re-enumerate the sequence after initialization. /// /// /// Notification handlers allow the server to respond to client-sent notifications for specific methods. /// Each key in the collection is a notification method name, and each value is a callback that will be invoked /// when a notification with that method is received. /// /// /// Handlers provided via will be registered with the server for the lifetime of the server. /// For transient handlers, may be used to register a handler that can /// then be unregistered by disposing of the returned from the method. /// /// [JsonIgnore] public IEnumerable>>? NotificationHandlers { get; set; } }