मुख्य सामग्री पर जाएं
रूट्स सर्वरों को यह बताते हैं कि किन फाइल सिस्टम संसाधनों तक 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",        # वैकल्पिक डिस्प्ले नाम
)
फ़ील्डप्रकारविवरण
uristrफ़ाइल URI (उदाहरण के लिए file:///home/user/project)
namestrवैकल्पिक मानव-पठनीय नाम

सुरक्षा

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