Table of Contents

Class ToolAnnotations

Namespace
ModelContextProtocol.Protocol
Assembly
ModelContextProtocol.Core.dll

Represents additional properties describing a Tool to clients.

public sealed class ToolAnnotations
Inheritance
ToolAnnotations
Inherited Members

Remarks

All properties in ToolAnnotations 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 ToolAnnotations received from untrusted servers.

Properties

DestructiveHint

Gets or sets a value that indicates whether the tool can perform destructive updates to its environment.

[JsonPropertyName("destructiveHint")]
public bool? DestructiveHint { get; set; }

Property Value

bool?

The default is true.

Remarks

If true, the tool can perform destructive updates to its environment. If false, the tool performs only additive updates. This property is most relevant when the tool modifies its environment (ReadOnly = false).

IdempotentHint

Gets or sets a value that indicates whether calling the tool repeatedly with the same arguments has no additional effect on its environment.

[JsonPropertyName("idempotentHint")]
public bool? IdempotentHint { get; set; }

Property Value

bool?

true if calling the tool repeatedly with the same arguments has no additional effect on the environment; false if it does. The default is false.

Remarks

This property is most relevant when the tool modifies its environment (ReadOnly = false).

OpenWorldHint

Gets or sets a value that indicates whether this tool can interact with an "open world" of external entities.

[JsonPropertyName("openWorldHint")]
public bool? OpenWorldHint { get; set; }

Property Value

bool?

true if the tool can interact with an unpredictable or dynamic set of entities (like web search). false if the tool's domain of interaction is closed and well-defined (like memory access). The default is true.

ReadOnlyHint

Gets or sets a value that indicates whether this tool modifies its environment.

[JsonPropertyName("readOnlyHint")]
public bool? ReadOnlyHint { get; set; }

Property Value

bool?

true if the tool only performs read operations without changing state. false if the tool can make modifications to its environment. The default is false.

Remarks

Read-only tools do not have side effects beyond computational resource usage. They don't create, update, or delete data in any system.

Title

Gets or sets a human-readable title for the tool that can be displayed to users.

[JsonPropertyName("title")]
public string? Title { get; set; }

Property Value

string

Remarks

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.