pub mod common;
use crate::common::{initialize_tracing, ExampleServerHandler};
use rust_mcp_schema::ServerCapabilitiesResources;
use rust_mcp_sdk::schema::{
Implementation, InitializeResult, ProtocolVersion, ServerCapabilities, ServerCapabilitiesTools,
};
use rust_mcp_sdk::{
error::SdkResult,
event_store::InMemoryEventStore,
mcp_icon,
mcp_server::{hyper_server, HyperServerOptions, ServerHandler, ToMcpServerHandler},
task_store::InMemoryTaskStore,
};
use serde_json::Map;
use std::sync::Arc;
pub struct AppState<H: ServerHandler> {
pub server_details: InitializeResult,
pub handler: H,
}
#[tokio::main]
async fn main() -> SdkResult<()> {
initialize_tracing();
let server_details = InitializeResult {
server_info: Implementation {
name: "Hello World MCP Server Streamable Http/SSE".into(),
version: "0.1.0".into(),
title: Some("Hello World MCP Streamable Http/SSE".into()),
description: Some("test server, by Rust MCP SDK".into()),
icons: vec![mcp_icon!(
src = "https://raw.githubusercontent.com/rust-mcp-stack/rust-mcp-sdk/main/assets/rust-mcp-icon.png",
mime_type = "image/png",
sizes = ["128x128"],
theme = "dark"
)],
website_url: Some("https://github.com/rust-mcp-stack/rust-mcp-sdk".into()),
},
capabilities: ServerCapabilities {
tools: Some(ServerCapabilitiesTools { list_changed: None }),
resources: Some(ServerCapabilitiesResources{ list_changed: None, subscribe: None }),
completions:Some(Map::new()),
..Default::default() },
meta: None,
instructions: Some("server instructions...".into()),
protocol_version: ProtocolVersion::V2025_11_25.into(),
};
let handler = ExampleServerHandler {};
let server = hyper_server::create_server(
server_details,
handler.to_mcp_server_handler(),
HyperServerOptions {
host: "127.0.0.1".into(),
event_store: Some(Arc::new(InMemoryEventStore::default())), task_store: Some(Arc::new(InMemoryTaskStore::new(None))),
client_task_store: Some(Arc::new(InMemoryTaskStore::new(None))),
..Default::default()
},
);
server.start().await?;
Ok(())
}