using System.Text.Json.Serialization; namespace ModelContextProtocol.Protocol; /// /// Represents additional properties describing a to clients. /// /// /// All properties in are hints. /// They are not guaranteed to provide a faithful description of tool behavior (including descriptive properties like `title`). /// Clients should never make tool use decisions based on received from untrusted servers. /// public sealed class ToolAnnotations { /// /// Gets or sets a human-readable title for the tool that can be displayed to users. /// /// /// /// The title provides a more descriptive, user-friendly name for the tool than the tool's /// programmatic name. It is intended for display purposes and to help users understand /// the tool's purpose at a glance. /// /// /// Unlike the tool name (which follows programmatic naming conventions), the title can /// include spaces, special characters, and be phrased in a more natural language style. /// /// [JsonPropertyName("title")] public string? Title { get; set; } /// /// Gets or sets a value that indicates whether the tool can perform destructive updates to its environment. /// /// /// if the tool can perform destructive updates to its environment; /// if the tool performs only additive updates; /// if unspecified, in which case clients should assume . /// /// /// This property is most relevant when the tool modifies its environment (ReadOnly = false). /// [JsonPropertyName("destructiveHint")] public bool? DestructiveHint { get; set; } /// /// Gets or sets a value that indicates whether calling the tool repeatedly with the same arguments /// has no additional effect on its environment. /// /// /// if calling the tool repeatedly with the same arguments /// has no additional effect on the environment; if it does; /// if unspecified, in which case clients should assume . /// /// /// This property is most relevant when the tool modifies its environment (ReadOnly = false). /// [JsonPropertyName("idempotentHint")] public bool? IdempotentHint { get; set; } /// /// Gets or sets a value that indicates whether this tool can interact with an "open world" of external entities. /// /// /// if the tool can interact with an unpredictable or dynamic set of entities (like web search); /// if the tool's domain of interaction is closed and well-defined (like memory access); /// if unspecified, in which case clients should assume . /// [JsonPropertyName("openWorldHint")] public bool? OpenWorldHint { get; set; } /// /// Gets or sets a value that indicates whether this tool modifies its environment. /// /// /// if the tool only performs read operations without changing state; /// if the tool can make modifications to its environment; /// if unspecified, in which case clients should assume . /// /// /// /// Read-only tools do not have side effects beyond computational resource usage. /// They don't create, update, or delete data in any system. /// /// [JsonPropertyName("readOnlyHint")] public bool? ReadOnlyHint { get; set; } }