pub struct Tool {
pub annotations: Option<ToolAnnotations>,
pub description: Option<String>,
pub execution: Option<ToolExecution>,
pub icons: Vec<Icon>,
pub input_schema: ToolInputSchema,
pub meta: Option<Map<String, Value>>,
pub name: String,
pub output_schema: Option<ToolOutputSchema>,
pub title: Option<String>,
}Expand description
Definition for a tool the client can call.
JSON schema
{
"description": "Definition for a tool the client can call.",
"type": "object",
"required": [
"inputSchema",
"name"
],
"properties": {
"_meta": {
"description": "See [General fields: _meta](https://modelcontextprotocol.io/specification/2025-11-25/basic/index#meta) for notes on _meta usage.",
"type": "object",
"additionalProperties": {}
},
"annotations": {
"description": "Optional additional tool information.\n\nDisplay name precedence order is: title, annotations.title, then name.",
"$ref": "#/$defs/ToolAnnotations"
},
"description": {
"description": "A human-readable description of the tool.\n\nThis can be used by clients to improve the LLM's understanding of available tools. It can be thought of like a \"hint\" to the model.",
"type": "string"
},
"execution": {
"description": "Execution-related properties for this tool.",
"$ref": "#/$defs/ToolExecution"
},
"icons": {
"description": "Optional set of sized icons that the client can display in a user interface.\n\nClients that support rendering icons MUST support at least the following MIME types:\n- image/png - PNG images (safe, universal compatibility)\n- image/jpeg (and image/jpg) - JPEG images (safe, universal compatibility)\n\nClients that support rendering icons SHOULD also support:\n- image/svg+xml - SVG images (scalable but requires security precautions)\n- image/webp - WebP images (modern, efficient format)",
"type": "array",
"items": {
"$ref": "#/$defs/Icon"
}
},
"inputSchema": {
"description": "A JSON Schema object defining the expected parameters for the tool.",
"type": "object",
"required": [
"type"
],
"properties": {
"$schema": {
"type": "string"
},
"properties": {
"type": "object",
"additionalProperties": {
"type": "object",
"additionalProperties": true
}
},
"required": {
"type": "array",
"items": {
"type": "string"
}
},
"type": {
"type": "string",
"const": "object"
}
}
},
"name": {
"description": "Intended for programmatic or logical use, but used as a display name in past specs or fallback (if title isn't present).",
"type": "string"
},
"outputSchema": {
"description": "An optional JSON Schema object defining the structure of the tool's output returned in\nthe structuredContent field of a CallToolResult.\n\nDefaults to JSON Schema 2020-12 when no explicit $schema is provided.\nCurrently restricted to type: \"object\" at the root level.",
"type": "object",
"required": [
"type"
],
"properties": {
"$schema": {
"type": "string"
},
"properties": {
"type": "object",
"additionalProperties": {
"type": "object",
"additionalProperties": true
}
},
"required": {
"type": "array",
"items": {
"type": "string"
}
},
"type": {
"type": "string",
"const": "object"
}
}
},
"title": {
"description": "Intended for UI and end-user contexts — optimized to be human-readable and easily understood,\neven by those unfamiliar with domain-specific terminology.\n\nIf not provided, the name should be used for display (except for Tool,\nwhere annotations.title should be given precedence over using name,\nif present).",
"type": "string"
}
}
}Fields§
§annotations: Option<ToolAnnotations>Optional additional tool information. Display name precedence order is: title, annotations.title, then name.
description: Option<String>A human-readable description of the tool. This can be used by clients to improve the LLM’s understanding of available tools. It can be thought of like a “hint” to the model.
execution: Option<ToolExecution>Execution-related properties for this tool.
icons: Vec<Icon>Optional set of sized icons that the client can display in a user interface. Clients that support rendering icons MUST support at least the following MIME types: - image/png - PNG images (safe, universal compatibility) - image/jpeg (and image/jpg) - JPEG images (safe, universal compatibility) Clients that support rendering icons SHOULD also support: - image/svg+xml - SVG images (scalable but requires security precautions) - image/webp - WebP images (modern, efficient format)
input_schema: ToolInputSchema§meta: Option<Map<String, Value>>See General fields: _meta for notes on _meta usage.
name: StringIntended for programmatic or logical use, but used as a display name in past specs or fallback (if title isn’t present).
output_schema: Option<ToolOutputSchema>§title: Option<String>Intended for UI and end-user contexts — optimized to be human-readable and easily understood, even by those unfamiliar with domain-specific terminology. If not provided, the name should be used for display (except for Tool, where annotations.title should be given precedence over using name, if present).