rmcp_server_builder/
lib.rs1mod builder;
47mod providers;
48mod server;
49
50pub use builder::{ServerBuilder, SimpleInfo};
51pub use providers::{
52 CompletionProvider, LoggingProvider, PromptsProvider, ResourcesProvider, ServerInfoProvider,
53 ToolsProvider,
54};
55pub use server::{Server, Unset};
56
57pub use rmcp::handler::server::ServerHandler;
59pub use rmcp::model::{Implementation, ServerCapabilities};
60
61impl<T, P, R, C, L, I> Server<T, P, R, C, L, I> {
62 pub fn builder() -> ServerBuilder<Unset, Unset, Unset, Unset, Unset, Unset> {
64 ServerBuilder::new()
65 }
66}
67
68#[cfg(test)]
69mod tests {
70 use super::*;
71 use rmcp::model::{
72 CallToolRequestParams, ErrorData, GetPromptRequestParams, GetPromptResult,
73 ListPromptsResult, ListToolsResult, PaginatedRequestParams,
74 };
75 use rmcp::service::RequestContext;
76
77 struct TestToolsProvider;
79
80 impl ToolsProvider for TestToolsProvider {
81 async fn list_tools(
82 &self,
83 _request: Option<PaginatedRequestParams>,
84 _context: RequestContext<rmcp::service::RoleServer>,
85 ) -> Result<ListToolsResult, ErrorData> {
86 Ok(ListToolsResult::with_all_items(vec![]))
87 }
88
89 async fn call_tool(
90 &self,
91 _request: CallToolRequestParams,
92 _context: RequestContext<rmcp::service::RoleServer>,
93 ) -> Result<rmcp::model::CallToolResult, ErrorData> {
94 Ok(rmcp::model::CallToolResult::success(vec![
95 rmcp::model::Content::text("Tool executed"),
96 ]))
97 }
98 }
99
100 struct TestPromptsProvider {
102 prompt_name: String,
103 }
104
105 impl PromptsProvider for TestPromptsProvider {
106 async fn list_prompts(
107 &self,
108 _request: Option<PaginatedRequestParams>,
109 _context: RequestContext<rmcp::service::RoleServer>,
110 ) -> Result<ListPromptsResult, ErrorData> {
111 Ok(ListPromptsResult::with_all_items(vec![]))
112 }
113
114 async fn get_prompt(
115 &self,
116 request: GetPromptRequestParams,
117 _context: RequestContext<rmcp::service::RoleServer>,
118 ) -> Result<GetPromptResult, ErrorData> {
119 if request.name == self.prompt_name {
120 Ok(GetPromptResult {
121 description: Some("Test prompt".into()),
122 messages: vec![],
123 })
124 } else {
125 Err(ErrorData::invalid_params("Unknown prompt", None))
126 }
127 }
128 }
129
130 #[test]
131 fn test_builder_compiles() {
132 let _server = ServerBuilder::new()
133 .info(Implementation {
134 name: "test".into(),
135 version: "1.0.0".into(),
136 ..Default::default()
137 })
138 .tools(TestToolsProvider)
139 .prompts(TestPromptsProvider {
140 prompt_name: "test_prompt".into(),
141 })
142 .build();
143 }
144
145 #[test]
146 fn test_server_builder_static_method() {
147 let _server = Server::<Unset, Unset, Unset, Unset, Unset, Unset>::builder()
148 .info(Implementation {
149 name: "test".into(),
150 version: "1.0.0".into(),
151 ..Default::default()
152 })
153 .build();
154 }
155}