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 pub arguments: serde_json::Value,
26}
27
28#[derive(Debug, Clone, Serialize, Deserialize)]
30#[serde(tag = "type")]
31pub enum ToolContent {
32 #[serde(rename = "text")]
33 Text { text: String },
34
35 #[serde(rename = "image")]
36 Image {
37 data: String,
38 #[serde(rename = "mimeType")]
39 mime_type: String,
40 },
41
42 #[serde(rename = "audio")]
43 Audio {
44 data: String,
45 #[serde(rename = "mimeType")]
46 mime_type: String,
47 },
48
49 #[serde(rename = "resource")]
50 Resource { resource: serde_json::Value },
51}
52
53#[derive(Debug, Clone, Serialize, Deserialize)]
55pub struct ToolCallResult {
56 pub content: Vec<ToolContent>,
57
58 #[serde(rename = "isError")]
59 #[serde(skip_serializing_if = "Option::is_none")]
60 pub is_error: Option<bool>,
61}
62
63#[derive(Debug, Clone, Serialize, Deserialize)]
65pub struct ToolsListParams {
66 #[serde(skip_serializing_if = "Option::is_none")]
67 pub cursor: Option<String>,
68}
69
70#[derive(Debug, Clone, Serialize, Deserialize)]
72pub struct ToolsListResult {
73 pub tools: Vec<Tool>,
74
75 #[serde(rename = "nextCursor")]
76 #[serde(skip_serializing_if = "Option::is_none")]
77 pub next_cursor: Option<String>,
78}