tools-kit 0.0.1

Portable Local and MCP tool execution with narrow extension traits.
Documentation
use rmcp::{
    ClientHandler, ErrorData as McpError,
    model::{
        ClientCapabilities, CreateElicitationRequestParams, CreateElicitationResult,
        ElicitationCapability, FormElicitationCapability, Implementation, InitializeRequestParams,
    },
    service::{RequestContext, RoleClient},
};

use super::interaction::McpInteractionBroker;

#[derive(Clone, Debug)]
pub(crate) struct ToolKitClientHandler {
    broker: McpInteractionBroker,
}

impl ToolKitClientHandler {
    pub(crate) fn new(broker: McpInteractionBroker) -> Self {
        Self { broker }
    }
}

impl ClientHandler for ToolKitClientHandler {
    fn get_info(&self) -> InitializeRequestParams {
        let mut capabilities = ClientCapabilities::default();
        if self.broker.form_enabled() {
            capabilities.elicitation = Some(ElicitationCapability {
                form: Some(FormElicitationCapability {
                    schema_validation: Some(self.broker.schema_validation()),
                }),
                url: None,
            });
        }
        InitializeRequestParams::new(capabilities, {
            let mut implementation = Implementation::new("ai-kit-tools-kit", "0.0.1");
            implementation.title = Some("ai-kit tools-kit".to_owned());
            implementation
        })
    }

    async fn create_elicitation(
        &self,
        request: CreateElicitationRequestParams,
        _context: RequestContext<RoleClient>,
    ) -> Result<CreateElicitationResult, McpError> {
        self.broker
            .request_elicitation(request)
            .await
            .map_err(|error| McpError::internal_error(error.to_string(), None))
    }
}