turbomcp_protocol/types/
roots.rs

1//! Filesystem boundaries types (MCP 2025-06-18)
2//!
3//! This module contains types for filesystem boundary discovery,
4//! allowing servers to understand client filesystem access boundaries.
5
6use serde::{Deserialize, Serialize};
7
8use super::core::Uri;
9
10/// Filesystem root definition
11#[derive(Debug, Clone, Serialize, Deserialize)]
12pub struct Root {
13    /// Root URI (typically a file:// URI)
14    pub uri: Uri,
15    /// Optional human-readable name for this root
16    #[serde(skip_serializing_if = "Option::is_none")]
17    pub name: Option<String>,
18}
19
20/// List roots request with optional metadata
21/// Note: Roots do not support pagination, only metadata
22#[derive(Debug, Clone, Serialize, Deserialize, Default)]
23pub struct ListRootsRequest {
24    /// Optional metadata per MCP 2025-06-18 specification
25    #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")]
26    pub _meta: Option<serde_json::Value>,
27}
28
29/// List roots result
30#[derive(Debug, Clone, Serialize, Deserialize)]
31pub struct ListRootsResult {
32    /// Available filesystem roots
33    pub roots: Vec<Root>,
34    /// Optional metadata per MCP 2025-06-18 specification
35    #[serde(skip_serializing_if = "Option::is_none")]
36    pub _meta: Option<serde_json::Value>,
37}
38
39/// Roots list changed notification (no parameters)
40#[derive(Debug, Clone, Serialize, Deserialize)]
41pub struct RootsListChangedNotification;