///|
fn MCPServer::tools_are_enabled(self : MCPServer) -> Bool {
self.tools_enabled.unwrap_or(!self.registry.tools.is_empty())
}
///|
fn MCPServer::resources_are_enabled(self : MCPServer) -> Bool {
self.resources_enabled.unwrap_or(
!self.resource_registry.resources.is_empty() ||
!self.resource_registry.templates.is_empty(),
)
}
///|
fn MCPServer::prompts_are_enabled(self : MCPServer) -> Bool {
self.prompts_enabled.unwrap_or(!self.prompt_registry.prompts.is_empty())
}
///|
fn MCPServer::supports_method(self : MCPServer, method_name : String) -> Bool {
match method_name {
"tools/list" | "tools/call" => self.tools_are_enabled()
"resources/list" | "resources/templates/list" | "resources/read" =>
self.resources_are_enabled()
"prompts/list" | "prompts/get" => self.prompts_are_enabled()
"completion/complete" => self.completion_registry is Some(_)
_ => true
}
}
///|
fn MCPServer::supported_subscription_filter(
self : MCPServer,
requested : SubscriptionFilter,
) -> SubscriptionFilter {
{
tools_list_changed: requested.tools_list_changed && self.tools_are_enabled(),
resources_list_changed: requested.resources_list_changed &&
self.resources_are_enabled(),
prompts_list_changed: requested.prompts_list_changed &&
self.prompts_are_enabled(),
resource_subscriptions: if self.resources_are_enabled() {
requested.resource_subscriptions.copy()
} else {
[]
},
}
}
///|
/// Enable an empty tools registry, or explicitly disable tools even after registration.
/// Without an override, registering a tool enables tools automatically.
pub fn MCPServer::with_tools(
self : MCPServer,
enabled~ : Bool = true,
) -> MCPServer {
{ ..self, tools_enabled: Some(enabled), }
}
///|
/// Enable an empty resources/templates registry, or explicitly disable its methods.
pub fn MCPServer::with_resources(
self : MCPServer,
enabled~ : Bool = true,
) -> MCPServer {
{ ..self, resources_enabled: Some(enabled), }
}
///|
/// Enable an empty prompts registry, or explicitly disable its methods.
pub fn MCPServer::with_prompts(
self : MCPServer,
enabled~ : Bool = true,
) -> MCPServer {
{ ..self, prompts_enabled: Some(enabled), }
}
///|
/// Return only capabilities implemented and enabled by this server.
pub fn MCPServer::capabilities(self : MCPServer) -> @types.ServerCapabilities {
@types.ServerCapabilities::new(
tools?=if self.tools_are_enabled() {
Some(@types.ToolCapabilities::new(list_changed=true))
} else {
None
},
resources?=if self.resources_are_enabled() {
Some(@types.ResourceCapabilities::new(subscribe=true, list_changed=true))
} else {
None
},
prompts?=if self.prompts_are_enabled() {
Some(@types.PromptCapabilities::new(list_changed=true))
} else {
None
},
completions?=if self.completion_registry is Some(_) {
Some(Map([]))
} else {
None
},
)
}