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}