mcp_protocol/types/
tool.rs1use serde::{Deserialize, Serialize};
3use std::collections::HashMap;
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
7pub struct Tool {
8 pub name: String,
9
10 #[serde(skip_serializing_if = "Option::is_none")]
11 pub description: Option<String>,
12
13 #[cfg_attr(feature = "camel_case", serde(rename = "inputSchema"))]
14 pub input_schema: serde_json::Value,
15
16 #[serde(skip_serializing_if = "Option::is_none")]
17 pub annotations: Option<HashMap<String, serde_json::Value>>,
18}
19
20#[derive(Debug, Clone, Serialize, Deserialize)]
22pub struct ToolCallParams {
23 pub name: String,
24
25 #[serde(skip_serializing_if = "Option::is_none")]
26 pub arguments: Option<serde_json::Value>,
27}
28
29#[derive(Debug, Clone, Serialize, Deserialize)]
31#[serde(tag = "type")]
32pub enum ToolContent {
33 #[serde(rename = "text")]
34 Text { text: String },
35
36 #[serde(rename = "image")]
37 Image {
38 data: String,
39 #[serde(rename = "mimeType")]
40 mime_type: String,
41 },
42
43 #[serde(rename = "audio")]
44 Audio {
45 data: String,
46 #[serde(rename = "mimeType")]
47 mime_type: String,
48 },
49
50 #[serde(rename = "resource")]
51 Resource { resource: serde_json::Value },
52}
53
54#[derive(Debug, Clone, Serialize, Deserialize)]
56pub struct ToolCallResult {
57 pub content: Vec<ToolContent>,
58
59 #[serde(rename = "isError")]
60 #[serde(skip_serializing_if = "Option::is_none")]
61 pub is_error: Option<bool>,
62}
63
64#[derive(Debug, Clone, Serialize, Deserialize)]
66pub struct ToolsListParams {
67 #[serde(skip_serializing_if = "Option::is_none")]
68 pub cursor: Option<String>,
69}
70
71#[derive(Debug, Clone, Serialize, Deserialize)]
73pub struct ToolsListResult {
74 pub tools: Vec<Tool>,
75
76 #[serde(rename = "nextCursor")]
77 #[serde(skip_serializing_if = "Option::is_none")]
78 pub next_cursor: Option<String>,
79}