mod builder;
mod providers;
mod server;
pub use builder::{ServerBuilder, SimpleInfo};
pub use providers::{
CompletionProvider, LoggingProvider, PromptsProvider, ResourcesProvider, ServerInfoProvider,
ToolsProvider,
};
pub use server::{Server, Unset};
pub use rmcp::handler::server::ServerHandler;
pub use rmcp::model::{Implementation, ServerCapabilities};
impl<T, P, R, C, L, I> Server<T, P, R, C, L, I> {
pub fn builder() -> ServerBuilder<Unset, Unset, Unset, Unset, Unset, Unset> {
ServerBuilder::new()
}
}
#[cfg(test)]
mod tests {
use super::*;
use rmcp::model::{
CallToolRequestParams, ErrorData, GetPromptRequestParams, GetPromptResult,
ListPromptsResult, ListToolsResult, PaginatedRequestParams,
};
use rmcp::service::RequestContext;
struct TestToolsProvider;
impl ToolsProvider for TestToolsProvider {
async fn list_tools(
&self,
_request: Option<PaginatedRequestParams>,
_context: RequestContext<rmcp::service::RoleServer>,
) -> Result<ListToolsResult, ErrorData> {
Ok(ListToolsResult::with_all_items(vec![]))
}
async fn call_tool(
&self,
_request: CallToolRequestParams,
_context: RequestContext<rmcp::service::RoleServer>,
) -> Result<rmcp::model::CallToolResult, ErrorData> {
Ok(rmcp::model::CallToolResult::success(vec![
rmcp::model::Content::text("Tool executed"),
]))
}
}
struct TestPromptsProvider {
prompt_name: String,
}
impl PromptsProvider for TestPromptsProvider {
async fn list_prompts(
&self,
_request: Option<PaginatedRequestParams>,
_context: RequestContext<rmcp::service::RoleServer>,
) -> Result<ListPromptsResult, ErrorData> {
Ok(ListPromptsResult::with_all_items(vec![]))
}
async fn get_prompt(
&self,
request: GetPromptRequestParams,
_context: RequestContext<rmcp::service::RoleServer>,
) -> Result<GetPromptResult, ErrorData> {
if request.name == self.prompt_name {
Ok(GetPromptResult::new(vec![]).with_description("Test prompt"))
} else {
Err(ErrorData::invalid_params("Unknown prompt", None))
}
}
}
#[test]
fn test_builder_compiles() {
let _server = ServerBuilder::new()
.info(Implementation::new("test", "1.0.0"))
.tools(TestToolsProvider)
.prompts(TestPromptsProvider {
prompt_name: "test_prompt".into(),
})
.build();
}
#[test]
fn test_server_builder_static_method() {
let _server = Server::<Unset, Unset, Unset, Unset, Unset, Unset>::builder()
.info(Implementation::new("test", "1.0.0"))
.build();
}
}