agentic_evolve_mcp/types/
response.rs1use serde::{Deserialize, Serialize};
4use serde_json::Value;
5
6#[derive(Debug, Clone, Serialize, Deserialize)]
8#[serde(tag = "type")]
9pub enum ToolContent {
10 #[serde(rename = "text")]
12 Text {
13 text: String,
15 },
16 #[serde(rename = "image")]
18 Image {
19 data: String,
21 #[serde(rename = "mimeType")]
23 mime_type: String,
24 },
25 #[serde(rename = "resource")]
27 Resource {
28 resource: ResourceContent,
30 },
31}
32
33#[derive(Debug, Clone, Serialize, Deserialize)]
35pub struct ToolCallResult {
36 pub content: Vec<ToolContent>,
38 #[serde(default, rename = "isError", skip_serializing_if = "Option::is_none")]
40 pub is_error: Option<bool>,
41}
42
43impl ToolCallResult {
44 pub fn text(text: String) -> Self {
46 Self {
47 content: vec![ToolContent::Text { text }],
48 is_error: None,
49 }
50 }
51
52 pub fn json(value: &impl Serialize) -> Self {
54 let text = serde_json::to_string_pretty(value).unwrap_or_else(|e| e.to_string());
55 Self::text(text)
56 }
57
58 pub fn error(message: String) -> Self {
60 Self {
61 content: vec![ToolContent::Text { text: message }],
62 is_error: Some(true),
63 }
64 }
65}
66
67#[derive(Debug, Clone, Serialize, Deserialize)]
69pub struct ToolDefinition {
70 pub name: String,
72 #[serde(default, skip_serializing_if = "Option::is_none")]
74 pub description: Option<String>,
75 #[serde(rename = "inputSchema")]
77 pub input_schema: Value,
78}
79
80#[derive(Debug, Clone, Serialize, Deserialize)]
82pub struct ToolListResult {
83 pub tools: Vec<ToolDefinition>,
85 #[serde(
87 default,
88 rename = "nextCursor",
89 skip_serializing_if = "Option::is_none"
90 )]
91 pub next_cursor: Option<String>,
92}
93
94#[derive(Debug, Clone, Serialize, Deserialize)]
96pub struct McpResponseMetrics {
97 pub layer: String,
99 pub tokens_used: u64,
101 pub tokens_saved: u64,
103 pub cache_hit: bool,
105}
106
107#[derive(Debug, Clone, Serialize, Deserialize)]
109pub struct ResourceContent {
110 pub uri: String,
112 #[serde(default, rename = "mimeType", skip_serializing_if = "Option::is_none")]
114 pub mime_type: Option<String>,
115 #[serde(default, skip_serializing_if = "Option::is_none")]
117 pub text: Option<String>,
118 #[serde(default, skip_serializing_if = "Option::is_none")]
120 pub blob: Option<String>,
121}
122
123#[derive(Debug, Clone, Serialize, Deserialize)]
125pub struct ResourceDefinition {
126 pub uri: String,
128 pub name: String,
130 #[serde(default, skip_serializing_if = "Option::is_none")]
132 pub description: Option<String>,
133 #[serde(default, rename = "mimeType", skip_serializing_if = "Option::is_none")]
135 pub mime_type: Option<String>,
136}
137
138#[derive(Debug, Clone, Serialize, Deserialize)]
140pub struct ResourceListResult {
141 pub resources: Vec<ResourceDefinition>,
143 #[serde(
145 default,
146 rename = "nextCursor",
147 skip_serializing_if = "Option::is_none"
148 )]
149 pub next_cursor: Option<String>,
150}
151
152#[derive(Debug, Clone, Serialize, Deserialize)]
154pub struct PromptArgument {
155 pub name: String,
157 #[serde(default, skip_serializing_if = "Option::is_none")]
159 pub description: Option<String>,
160 #[serde(default)]
162 pub required: bool,
163}
164
165#[derive(Debug, Clone, Serialize, Deserialize)]
167pub struct PromptDefinition {
168 pub name: String,
170 #[serde(default, skip_serializing_if = "Option::is_none")]
172 pub description: Option<String>,
173 #[serde(default, skip_serializing_if = "Option::is_none")]
175 pub arguments: Option<Vec<PromptArgument>>,
176}
177
178#[derive(Debug, Clone, Serialize, Deserialize)]
180pub struct PromptListResult {
181 pub prompts: Vec<PromptDefinition>,
183 #[serde(
185 default,
186 rename = "nextCursor",
187 skip_serializing_if = "Option::is_none"
188 )]
189 pub next_cursor: Option<String>,
190}
191
192#[derive(Debug, Clone, Serialize, Deserialize)]
194pub struct PromptMessage {
195 pub role: String,
197 pub content: ToolContent,
199}
200
201#[derive(Debug, Clone, Serialize, Deserialize)]
203pub struct PromptGetResult {
204 #[serde(default, skip_serializing_if = "Option::is_none")]
206 pub description: Option<String>,
207 pub messages: Vec<PromptMessage>,
209}