List available resources
(&self)
| 185 | |
| 186 | /// List available resources |
| 187 | pub async fn list_resources(&self) -> Result<Vec<McpResource>> { |
| 188 | let request = JsonRpcRequest::new(self.next_id(), "resources/list", None); |
| 189 | let response = self.transport.request(request).await?; |
| 190 | |
| 191 | if let Some(error) = response.error { |
| 192 | return Err(anyhow!( |
| 193 | "MCP list_resources error: {} ({})", |
| 194 | error.message, |
| 195 | error.code |
| 196 | )); |
| 197 | } |
| 198 | |
| 199 | let result: ListResourcesResult = |
| 200 | serde_json::from_value(response.result.ok_or_else(|| anyhow!("No result"))?)?; |
| 201 | |
| 202 | // Cache resources |
| 203 | { |
| 204 | let mut resources = self.resources.write().await; |
| 205 | *resources = result.resources.clone(); |
| 206 | } |
| 207 | |
| 208 | Ok(result.resources) |
| 209 | } |
| 210 | |
| 211 | /// Read a resource |
| 212 | pub async fn read_resource(&self, uri: &str) -> Result<ReadResourceResult> { |