using ModelContextProtocol.Protocol; using System.Diagnostics.CodeAnalysis; namespace ModelContextProtocol.Client; /// /// Provides configuration options for creating instances. /// /// /// These options are typically passed to when creating a client. /// They define client capabilities, protocol version, and other client-specific settings. /// public sealed class McpClientOptions { /// /// Gets or sets information about this client implementation, including its name and version. /// /// /// /// This information is sent to the server during initialization to identify the client. /// It's often displayed in server logs and can be used for debugging and compatibility checks. /// /// /// When not specified, information sourced from the current process is used. /// /// public Implementation? ClientInfo { get; set; } /// /// Gets or sets the client capabilities to advertise to the server. /// public ClientCapabilities? Capabilities { get; set; } /// /// Gets or sets the protocol version to request from the server, using a date-based versioning scheme. /// /// /// /// The protocol version is a key part of the initialization handshake. The client and server must /// agree on a compatible protocol version to communicate successfully. /// /// /// If non-, this version will be sent to the server, and the handshake /// will fail if the version in the server's response does not match this version. /// If , the client will request the latest version supported by the server /// but will allow any supported version that the server advertizes in its response. /// /// public string? ProtocolVersion { get; set; } /// /// Gets or sets a timeout for the client-server initialization handshake sequence. /// /// /// The timeout for the client-server initialization handshake sequence. The default value is 60 seconds. /// /// /// /// This timeout determines how long the client will wait for the server to respond during /// the initialization protocol handshake. If the server doesn't respond within this timeframe, /// an exception is thrown. /// /// /// Setting an appropriate timeout prevents the client from hanging indefinitely when /// connecting to unresponsive servers. /// /// public TimeSpan InitializationTimeout { get; set; } = TimeSpan.FromSeconds(60); /// /// Gets or sets the container of handlers used by the client for processing protocol messages. /// public McpClientHandlers Handlers { get => field ??= new(); set { Throw.IfNull(value); field = value; } } /// /// Gets or sets the task store for managing client-side tasks. /// /// /// /// When a task store is configured, the client will support task-augmented requests from the server. /// This allows the server to request sampling or elicitation as tasks, which the client executes /// asynchronously and allows the server to poll for status and results. /// /// /// If not set, task-augmented requests will not be supported, and the client will not advertise /// task capabilities to the server. /// /// [Experimental(Experimentals.Tasks_DiagnosticId, UrlFormat = Experimentals.Tasks_Url)] public IMcpTaskStore? TaskStore { get; set; } /// /// Gets or sets a value indicating whether the client should send task status notifications to the server. /// /// /// to send task status notifications; otherwise. /// The default is . /// /// /// When enabled and a is configured, the client will send optional /// notifications/tasks/status notifications to inform the server of task state changes. /// Servers MUST NOT rely on receiving these notifications and should continue polling via tasks/get. /// [Experimental(Experimentals.Tasks_DiagnosticId, UrlFormat = Experimentals.Tasks_Url)] public bool SendTaskStatusNotifications { get; set; } = true; }