agentic_evolve_mcp/types/
capabilities.rs1use serde::{Deserialize, Serialize};
4use std::collections::HashMap;
5
6pub const MCP_VERSION: &str = "2024-11-05";
8
9pub const SERVER_NAME: &str = "agentic-evolve-mcp";
11
12pub const SERVER_VERSION: &str = env!("CARGO_PKG_VERSION");
14
15#[derive(Debug, Clone, Serialize, Deserialize)]
17pub struct Implementation {
18 pub name: String,
20 pub version: String,
22}
23
24#[derive(Debug, Clone, Default, Serialize, Deserialize)]
26pub struct ClientCapabilities {
27 #[serde(default, skip_serializing_if = "Option::is_none")]
29 pub experimental: Option<HashMap<String, serde_json::Value>>,
30 #[serde(default, skip_serializing_if = "Option::is_none")]
32 pub sampling: Option<SamplingCapability>,
33 #[serde(default, skip_serializing_if = "Option::is_none")]
35 pub roots: Option<RootsCapability>,
36}
37
38#[derive(Debug, Clone, Default, Serialize, Deserialize)]
40pub struct ServerCapabilities {
41 #[serde(default, skip_serializing_if = "Option::is_none")]
43 pub experimental: Option<HashMap<String, serde_json::Value>>,
44 #[serde(default, skip_serializing_if = "Option::is_none")]
46 pub logging: Option<LoggingCapability>,
47 #[serde(default, skip_serializing_if = "Option::is_none")]
49 pub prompts: Option<PromptsCapability>,
50 #[serde(default, skip_serializing_if = "Option::is_none")]
52 pub resources: Option<ResourcesCapability>,
53 #[serde(default, skip_serializing_if = "Option::is_none")]
55 pub tools: Option<ToolsCapability>,
56}
57
58#[derive(Debug, Clone, Default, Serialize, Deserialize)]
60pub struct SamplingCapability {}
61
62#[derive(Debug, Clone, Default, Serialize, Deserialize)]
64pub struct RootsCapability {
65 #[serde(default)]
67 pub list_changed: bool,
68}
69
70#[derive(Debug, Clone, Default, Serialize, Deserialize)]
72pub struct LoggingCapability {}
73
74#[derive(Debug, Clone, Default, Serialize, Deserialize)]
76pub struct PromptsCapability {
77 #[serde(default)]
79 pub list_changed: bool,
80}
81
82#[derive(Debug, Clone, Default, Serialize, Deserialize)]
84pub struct ResourcesCapability {
85 #[serde(default)]
87 pub subscribe: bool,
88 #[serde(default)]
90 pub list_changed: bool,
91}
92
93#[derive(Debug, Clone, Default, Serialize, Deserialize)]
95pub struct ToolsCapability {
96 #[serde(default)]
98 pub list_changed: bool,
99}
100
101#[derive(Debug, Clone, Serialize, Deserialize)]
103#[serde(rename_all = "camelCase")]
104pub struct InitializeParams {
105 pub protocol_version: String,
107 pub capabilities: ClientCapabilities,
109 pub client_info: Implementation,
111}
112
113#[derive(Debug, Clone, Serialize, Deserialize)]
115#[serde(rename_all = "camelCase")]
116pub struct InitializeResult {
117 pub protocol_version: String,
119 pub capabilities: ServerCapabilities,
121 pub server_info: Implementation,
123 #[serde(default, skip_serializing_if = "Option::is_none")]
125 pub instructions: Option<String>,
126}
127
128impl ServerCapabilities {
129 pub fn default_capabilities() -> Self {
131 Self {
132 experimental: None,
133 logging: Some(LoggingCapability {}),
134 prompts: None,
135 resources: None,
136 tools: Some(ToolsCapability {
137 list_changed: false,
138 }),
139 }
140 }
141}
142
143impl InitializeResult {
144 pub fn default_result() -> Self {
146 Self {
147 protocol_version: MCP_VERSION.to_string(),
148 capabilities: ServerCapabilities::default_capabilities(),
149 server_info: Implementation {
150 name: SERVER_NAME.to_string(),
151 version: SERVER_VERSION.to_string(),
152 },
153 instructions: Some(
154 "You have access to AgenticEvolve, a pattern library engine. \
155 Use evolve_pattern_store to save new code patterns, \
156 evolve_match_signature to find matching patterns for function signatures, \
157 and evolve_crystallize to crystallize successful code into reusable patterns."
158 .to_string(),
159 ),
160 }
161 }
162}