rust_mcp_server_syncable_cli/
lib.rs1mod handler;
62mod tools;
63
64use handler::MyServerHandler;
65use rust_mcp_sdk::{
66 error::SdkResult,
67 mcp_server::{hyper_server, server_runtime, HyperServerOptions, ServerRuntime},
68 schema::{
69 Implementation, InitializeResult, ServerCapabilities, ServerCapabilitiesTools,
70 LATEST_PROTOCOL_VERSION,
71 },
72 McpServer, StdioTransport, TransportOptions,
73};
74use tools::ServerTools;
75use tracing_subscriber::{fmt, prelude::*, EnvFilter};
76
77pub async fn start_stdio() -> SdkResult<()> {
97 env_logger::init();
99
100 let server_details = InitializeResult {
102 server_info: Implementation {
103 name: "Syncable-MCP-Server".to_string(),
104 version: env!("CARGO_PKG_VERSION").to_string(),
105 },
106 capabilities: ServerCapabilities {
107 tools: Some(ServerCapabilitiesTools { list_changed: None }),
108 ..Default::default()
109 },
110 protocol_version: LATEST_PROTOCOL_VERSION.to_string(),
111 instructions: Some(
112 "Welcome to the Syncable-MCP-Server. Use list_tools to see available functionalities."
113 .into(),
114 ),
115 meta: None,
116 };
117
118 let available_tools = ServerTools::tools();
120 eprintln!("π Starting Syncable-MCP-Server (stdio mode)...");
121 eprintln!("π Available tools ({}):", available_tools.len());
122 for (i, tool) in available_tools.iter().enumerate() {
123 eprintln!(
124 " {}. {} - {}",
125 i + 1,
126 tool.name,
127 tool.description.as_deref().unwrap_or("No description")
128 );
129 }
130 eprintln!();
131 eprintln!("β
Server initialized successfully. Listening for MCP requests...");
132
133 let transport = StdioTransport::new(TransportOptions::default())?;
135 let handler = MyServerHandler {};
136 let server: ServerRuntime = server_runtime::create_server(server_details, transport, handler);
137
138 server.start().await?;
140 Ok(())
141}
142
143pub async fn start_sse() -> SdkResult<()> {
163 tracing_subscriber::registry()
165 .with(fmt::layer())
166 .with(EnvFilter::try_from_default_env().unwrap_or_else(|_| "info".into()))
167 .init();
168
169 tracing::info!("Logger initialized. Defining server details...");
170
171 let server_details = InitializeResult {
173 server_info: Implementation {
174 name: "Rust MCP Server (SSE)".to_string(),
175 version: env!("CARGO_PKG_VERSION").to_string(),
176 },
177 capabilities: ServerCapabilities {
178 tools: Some(ServerCapabilitiesTools { list_changed: None }),
179 ..Default::default()
180 },
181 protocol_version: LATEST_PROTOCOL_VERSION.to_string(),
182 instructions: Some(
183 "Welcome to the Rust MCP Server (SSE). Connect via a web client.".into(),
184 ),
185 meta: None,
186 };
187
188 let available_tools = ServerTools::tools();
190 tracing::info!("π Starting Rust MCP Server (SSE)...");
191 tracing::info!("π Available tools ({}):", available_tools.len());
192 for (i, tool) in available_tools.iter().enumerate() {
193 tracing::info!(
194 " {}. {} - {}",
195 i + 1,
196 tool.name,
197 tool.description.as_deref().unwrap_or("No description")
198 );
199 }
200
201 let handler = MyServerHandler {};
203 let options = HyperServerOptions {
204 host: "0.0.0.0".to_string(),
205 port: 8000,
206 ..Default::default()
207 };
208
209 tracing::info!("Creating the MCP SSE server...");
210 let server = hyper_server::create_server(server_details, handler, options);
211
212 tracing::info!("β
SSE server listening on http://0.0.0.0:8000");
213 server.start().await?;
215 Ok(())
216}