cpex_core/extensions/
mcp.rs1use std::collections::HashMap;
10
11use serde::{Deserialize, Serialize};
12
13#[derive(Debug, Clone, Default, Serialize, Deserialize)]
15pub struct ToolMetadata {
16 pub name: String,
18
19 #[serde(default, skip_serializing_if = "Option::is_none")]
21 pub title: Option<String>,
22
23 #[serde(default, skip_serializing_if = "Option::is_none")]
25 pub description: Option<String>,
26
27 #[serde(default, skip_serializing_if = "Option::is_none")]
29 pub input_schema: Option<serde_json::Value>,
30
31 #[serde(default, skip_serializing_if = "Option::is_none")]
33 pub output_schema: Option<serde_json::Value>,
34
35 #[serde(default, skip_serializing_if = "Option::is_none")]
37 pub server_id: Option<String>,
38
39 #[serde(default, skip_serializing_if = "Option::is_none")]
41 pub namespace: Option<String>,
42
43 #[serde(default)]
45 pub annotations: HashMap<String, serde_json::Value>,
46}
47
48#[derive(Debug, Clone, Default, Serialize, Deserialize)]
50pub struct ResourceMetadata {
51 pub uri: String,
53
54 #[serde(default, skip_serializing_if = "Option::is_none")]
56 pub name: Option<String>,
57
58 #[serde(default, skip_serializing_if = "Option::is_none")]
60 pub description: Option<String>,
61
62 #[serde(default, skip_serializing_if = "Option::is_none")]
64 pub mime_type: Option<String>,
65
66 #[serde(default, skip_serializing_if = "Option::is_none")]
68 pub server_id: Option<String>,
69
70 #[serde(default)]
72 pub annotations: HashMap<String, serde_json::Value>,
73}
74
75#[derive(Debug, Clone, Default, Serialize, Deserialize)]
77pub struct PromptMetadata {
78 pub name: String,
80
81 #[serde(default, skip_serializing_if = "Option::is_none")]
83 pub description: Option<String>,
84
85 #[serde(default, skip_serializing_if = "Option::is_none")]
87 pub arguments: Option<Vec<serde_json::Value>>,
88
89 #[serde(default, skip_serializing_if = "Option::is_none")]
91 pub server_id: Option<String>,
92
93 #[serde(default)]
95 pub annotations: HashMap<String, serde_json::Value>,
96}
97
98#[derive(Debug, Clone, Default, Serialize, Deserialize)]
103pub struct MCPExtension {
104 #[serde(default, skip_serializing_if = "Option::is_none")]
106 pub tool: Option<ToolMetadata>,
107
108 #[serde(default, skip_serializing_if = "Option::is_none")]
110 pub resource: Option<ResourceMetadata>,
111
112 #[serde(default, skip_serializing_if = "Option::is_none")]
114 pub prompt: Option<PromptMetadata>,
115}