The model context package manager
at main 57 lines 1.7 kB view raw
1use rmcp::{ 2 ErrorData, RoleServer, ServerHandler, ServiceExt, 3 model::{ 4 GetPromptRequestParam, GetPromptResult, Implementation, ListPromptsResult, 5 PaginatedRequestParam, Prompt, PromptMessage, PromptMessageRole, ServerCapabilities, 6 ServerInfo, 7 }, 8 service::RequestContext, 9 transport::stdio, 10}; 11 12pub(crate) async fn run() { 13 let server = Server {}; 14 let service = server 15 .serve(stdio()) 16 .await 17 .expect("Unable to serve MCP via stdio transport"); 18 service.waiting().await.expect("MCP server failed"); 19} 20 21struct Server {} 22 23impl ServerHandler for Server { 24 fn get_info(&self) -> ServerInfo { 25 ServerInfo { 26 server_info: Implementation { 27 name: "mcpkg".to_string(), 28 version: "dev".to_string(), 29 }, 30 capabilities: ServerCapabilities::builder().enable_prompts().build(), 31 ..Default::default() 32 } 33 } 34 35 async fn list_prompts( 36 &self, 37 _request: Option<PaginatedRequestParam>, 38 _context: RequestContext<RoleServer>, 39 ) -> Result<ListPromptsResult, ErrorData> { 40 let prompt = Prompt::new("hello", Some("Says hello world"), None); 41 Ok(ListPromptsResult::with_all_items(vec![prompt])) 42 } 43 44 async fn get_prompt( 45 &self, 46 _request: GetPromptRequestParam, 47 _context: RequestContext<RoleServer>, 48 ) -> Result<GetPromptResult, ErrorData> { 49 Ok(GetPromptResult { 50 description: None, 51 messages: vec![PromptMessage::new_text( 52 PromptMessageRole::User, 53 "Hello world", 54 )], 55 }) 56 } 57}