httpmcp_rust/handlers/
tools.rs

1use crate::context::RequestContext;
2use crate::error::Result;
3use crate::protocol::{Tool, ToolContent};
4use async_trait::async_trait;
5use serde_json::Value;
6use std::collections::HashMap;
7
8/// Trait for implementing tool providers
9///
10/// Implement this trait to provide tools (functions, operations) to MCP clients.
11/// All methods receive a RequestContext with access to headers and request metadata.
12#[async_trait]
13pub trait ToolProvider: Send + Sync {
14    /// List available tools
15    ///
16    /// # Arguments
17    /// * `ctx` - Request context with headers and metadata
18    ///
19    /// # Returns
20    /// A vector of available tools
21    async fn list_tools(&self, ctx: &RequestContext) -> Result<Vec<Tool>>;
22
23    /// Call a specific tool
24    ///
25    /// # Arguments
26    /// * `name` - The name of the tool to call
27    /// * `arguments` - Tool arguments as a key-value map
28    /// * `ctx` - Request context with headers and metadata
29    ///
30    /// # Returns
31    /// A tuple of (content, is_error)
32    async fn call_tool(
33        &self,
34        name: &str,
35        arguments: Option<HashMap<String, Value>>,
36        ctx: &RequestContext,
37    ) -> Result<(Vec<ToolContent>, bool)>;
38}