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