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 #[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 { data: String, #[serde(rename = "mimeType")] mime_type: String },
37
38 #[serde(rename = "audio")]
39 Audio { data: String, #[serde(rename = "mimeType")] mime_type: String },
40
41 #[serde(rename = "resource")]
42 Resource { resource: serde_json::Value },
43}
44
45#[derive(Debug, Clone, Serialize, Deserialize)]
47pub struct ToolCallResult {
48 pub content: Vec<ToolContent>,
49
50 #[serde(rename = "isError")]
51 #[serde(skip_serializing_if = "Option::is_none")]
52 pub is_error: Option<bool>,
53}
54
55#[derive(Debug, Clone, Serialize, Deserialize)]
57pub struct ToolsListParams {
58 #[serde(skip_serializing_if = "Option::is_none")]
59 pub cursor: Option<String>,
60}
61
62#[derive(Debug, Clone, Serialize, Deserialize)]
64pub struct ToolsListResult {
65 pub tools: Vec<Tool>,
66
67 #[serde(rename = "nextCursor")]
68 #[serde(skip_serializing_if = "Option::is_none")]
69 pub next_cursor: Option<String>,
70}