pub struct Tool {
    pub annotations: Option<ToolAnnotations>,
    pub description: Option<String>,
    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](/specification/2025-06-18/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": "#/definitions/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"
   },
   "inputSchema": {
     "description": "A JSON Schema object defining the expected parameters for the tool.",
     "type": "object",
     "required": [
       "type"
     ],
     "properties": {
       "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.",
     "type": "object",
     "required": [
       "type"
     ],
     "properties": {
       "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.
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).