रूट्स सर्वरों को यह बताते हैं कि किन फाइल सिस्टम संसाधनों तक Client की पहुँच है। सर्वर इस जानकारी के आधार पर अपने व्यवहार को समायोजित कर सकते हैं या संचालन को सुरक्षित सीमाओं तक सीमित कर सकते हैं।
## रूट्स को कॉन्फ़िगर करें
from pathlib import Path
from dedalus_mcp.client import ClientCapabilitiesConfig, open_connection
from dedalus_mcp.types import Root
initial_roots = [
Root(uri=Path.cwd().as_uri(), name="Project Directory"),
Root(uri=Path("/tmp").as_uri(), name="Temporary Files"),
]
capabilities = ClientCapabilitiesConfig(
enable_roots=True,
initial_roots=initial_roots,
)
async with open_connection(
url="http://127.0.0.1:8000/mcp",
transport="streamable-http",
capabilities=capabilities,
) as client:
# List advertised roots
roots = await client.list_roots()
for root in roots:
print(f"{root.name}: {root.uri}")
## डायनेमिक अपडेट्स
सेशन के दौरान रूट्स को अपडेट करें:
async with open_connection(
url="http://127.0.0.1:8000/mcp",
transport="streamable-http",
capabilities=capabilities,
) as client:
# एक नया रूट जोड़ें
new_roots = initial_roots + [
Root(uri=Path.home().as_uri(), name="Home Directory"),
]
await client.update_roots(new_roots, notify=True)
# अपडेट को सत्यापित करें
roots = await client.list_roots()
print(f"Now advertising {len(roots)} roots")
## रूट संरचना
from dedalus_mcp.types import Root
Root(
uri="file:///path/to/directory", # फ़ाइल URI
name="Human-readable name", # वैकल्पिक डिस्प्ले नाम
)
| फ़ील्ड | प्रकार | विवरण |
|---|
uri | str | फ़ाइल URI (उदाहरण के लिए file:///home/user/project) |
name | str | वैकल्पिक मानव-पठनीय नाम |
## सुरक्षा
Roots सुरक्षा सीमाएँ निर्धारित करते हैं। सर्वरों को चाहिए कि वे:
- केवल घोषित किए गए roots के भीतर की फ़ाइलों तक ही पहुँचें
- उन सभी ऑपरेशनों को अस्वीकार करें जो root सीमाओं के बाहर के पथों को लक्षित करते हों
- फ़ाइल खोज और ऑपरेशनों का दायरा सीमित करने के लिए roots का उपयोग करें
# सर्वर-साइड: जाँचें कि पथ रूट्स के भीतर है या नहीं
def is_path_allowed(path: Path, roots: list[Root]) -> bool:
for root in roots:
root_path = Path(str(root.uri).replace("file://", ""))
if path.is_relative_to(root_path):
return True
return False