List available tools
(&self)
| 122 | |
| 123 | /// List available tools |
| 124 | pub async fn list_tools(&self) -> Result<Vec<McpTool>> { |
| 125 | let request = JsonRpcRequest::new(self.next_id(), "tools/list", None); |
| 126 | let response = self.transport.request(request).await?; |
| 127 | |
| 128 | if let Some(error) = response.error { |
| 129 | return Err(anyhow!( |
| 130 | "MCP list_tools error: {} ({})", |
| 131 | error.message, |
| 132 | error.code |
| 133 | )); |
| 134 | } |
| 135 | |
| 136 | let result: ListToolsResult = |
| 137 | serde_json::from_value(response.result.ok_or_else(|| anyhow!("No result"))?)?; |
| 138 | |
| 139 | // Cache tools |
| 140 | { |
| 141 | let mut tools = self.tools.write().await; |
| 142 | *tools = result.tools.clone(); |
| 143 | } |
| 144 | |
| 145 | Ok(result.tools) |
| 146 | } |
| 147 | |
| 148 | /// Get cached tools |
| 149 | pub async fn get_cached_tools(&self) -> Vec<McpTool> { |
no test coverage detected