rust_mcp_server_syncable_cli/
lib.rs1mod handler;
2mod tools;
3
4use handler::MyServerHandler;
5use rust_mcp_sdk::{
6 error::SdkResult,
7 mcp_server::{hyper_server, server_runtime, HyperServerOptions, ServerRuntime},
8 schema::{
9 Implementation, InitializeResult, ServerCapabilities, ServerCapabilitiesTools,
10 LATEST_PROTOCOL_VERSION,
11 },
12 McpServer, StdioTransport, TransportOptions,
13};
14use tools::ServerTools;
15use tracing_subscriber::{fmt, prelude::*, EnvFilter};
16
17pub async fn start_stdio() -> SdkResult<()> {
18 env_logger::init();
20
21 let server_details = InitializeResult {
23 server_info: Implementation {
24 name: "Syncable-MCP-Server".to_string(),
25 version: env!("CARGO_PKG_VERSION").to_string(),
26 },
27 capabilities: ServerCapabilities {
28 tools: Some(ServerCapabilitiesTools { list_changed: None }),
29 ..Default::default()
30 },
31 protocol_version: LATEST_PROTOCOL_VERSION.to_string(),
32 instructions: Some(
33 "Welcome to the Syncable-MCP-Server. Use list_tools to see available functionalities."
34 .into(),
35 ),
36 meta: None,
37 };
38
39 let available_tools = ServerTools::tools();
41 eprintln!("🚀 Starting Syncable-MCP-Server (stdio mode)...");
42 eprintln!("📋 Available tools ({}):", available_tools.len());
43 for (i, tool) in available_tools.iter().enumerate() {
44 eprintln!(
45 " {}. {} - {}",
46 i + 1,
47 tool.name,
48 tool.description.as_deref().unwrap_or("No description")
49 );
50 }
51 eprintln!();
52 eprintln!("✅ Server initialized successfully. Listening for MCP requests...");
53
54 let transport = StdioTransport::new(TransportOptions::default())?;
56 let handler = MyServerHandler {};
57 let server: ServerRuntime = server_runtime::create_server(server_details, transport, handler);
58
59 server.start().await?;
61 Ok(())
62}
63
64pub async fn start_sse() -> SdkResult<()> {
65 tracing_subscriber::registry()
67 .with(fmt::layer())
68 .with(EnvFilter::try_from_default_env().unwrap_or_else(|_| "info".into()))
69 .init();
70
71 tracing::info!("Logger initialized. Defining server details...");
72
73 let server_details = InitializeResult {
75 server_info: Implementation {
76 name: "Rust MCP Server (SSE)".to_string(),
77 version: env!("CARGO_PKG_VERSION").to_string(),
78 },
79 capabilities: ServerCapabilities {
80 tools: Some(ServerCapabilitiesTools { list_changed: None }),
81 ..Default::default()
82 },
83 protocol_version: LATEST_PROTOCOL_VERSION.to_string(),
84 instructions: Some(
85 "Welcome to the Rust MCP Server (SSE). Connect via a web client.".into(),
86 ),
87 meta: None,
88 };
89
90 let available_tools = ServerTools::tools();
92 tracing::info!("🚀 Starting Rust MCP Server (SSE)...");
93 tracing::info!("📋 Available tools ({}):", available_tools.len());
94 for (i, tool) in available_tools.iter().enumerate() {
95 tracing::info!(
96 " {}. {} - {}",
97 i + 1,
98 tool.name,
99 tool.description.as_deref().unwrap_or("No description")
100 );
101 }
102
103 let handler = MyServerHandler {};
105 let options = HyperServerOptions {
106 host: "0.0.0.0".to_string(),
107 port: 8000,
108 ..Default::default()
109 };
110
111 tracing::info!("Creating the MCP SSE server...");
112 let server = hyper_server::create_server(server_details, handler, options);
113
114 tracing::info!("✅ SSE server listening on http://0.0.0.0:8000");
115 server.start().await?;
117 Ok(())
118}