Ce face roots/list (Roots, depreciat) și aprobarea umană a uneltelor
Roots este depreciat din revizia 2026-07-28 (SEP-2577): rămâne cel puțin 12 luni, dar implementările noi nu ar trebui să-l adopte. Migrarea recomandată: directoarele sau fișierele se transmit prin parametrii uneltelor, prin URI-uri de resurse sau prin configurarea serverului. Roots informează serverul despre directoarele și fișierele pe care clientul le consideră relevante. Este un ghidaj informativ, nu un mecanism de control al accesului: protocolul nu impune ca serverul să rămână în interiorul rădăcinilor.
Clientul declară capabilitatea roots în clientCapabilities la fiecare cerere. Serverul cere lista prin roots/list în inputRequests al unui InputRequiredResult, iar clientul întoarce roots în inputResponses la reîncercare. Fiecare rădăcină are uri (obligatoriu file://) și name opțional. Notificarea notifications/roots/list_changed a fost eliminată în 2026-07-28. Clienții ar trebui să ceară consimțământul utilizatorului înainte de a expune rădăcinile și să le valideze împotriva path traversal.
Aprobarea umană. Principiile de securitate ale specificației cer ca host-ul să obțină consimțământul explicit al utilizatorului înainte de a apela o unealtă, iar pagina Tools recomandă ca un om să poată refuza orice apel. Clienții ar trebui să arate argumentele înainte de trimitere, să ceară confirmare pentru operații sensibile și să valideze rezultatele înainte de a le da LLM-ului. Adnotările uneltelor (readOnlyHint, destructiveHint etc.) sunt doar indicii și trebuie considerate nesigure dacă serverul nu este de încredere.
Sintaxă și opțiuni
| Opțiune / Parametru | Descriere |
|---|---|
roots/list |
Cererea de input prin care serverul află rădăcinile clientului (depreciată). |
uri |
URI-ul rădăcinii; trebuie să fie file://. |
name |
Opțional: numele de afișat. |
capabilitate roots |
{"roots": {}} în io.modelcontextprotocol/clientCapabilities. |
notifications/roots/list_changed |
Eliminată în 2026-07-28. |
Consimțământ pentru unelte |
Host-ul obține acordul explicit al utilizatorului înainte de a invoca o unealtă. |
Exemple practice
Exemplul 1: Cererea de rădăcini și răspunsul clientului
Prima parte stă în inputRequests, a doua în inputResponses la reîncercare.
{
"method": "roots/list"
}
{
"roots": [
{
"uri": "file:///home/user/projects/myproject",
"name": "My Project"
}
]
}
Exemplul 2: Mai multe repository-uri
[
{
"uri": "file:///home/user/repos/frontend",
"name": "Frontend Repository"
},
{
"uri": "file:///home/user/repos/backend",
"name": "Backend Repository"
}
]
Greșeli frecvente și bune practici
- Tratezi Roots ca sandbox. Protocolul nu obligă serverul să rămână în rădăcini; izolarea reală vine din permisiunile procesului și din validarea căilor în server.
- Aprobi automat o unealtă pentru că are
readOnlyHint: true. Pentru servere neverificate, adnotările nu garantează nimic. - Aștepți
notifications/roots/list_changed. Notificarea nu mai există în 2026-07-28.
Întrebări & Exemple practice:
roots/list (Roots, depreciat) și aprobarea umană a uneltelorAi o întrebare despre roots/list (Roots, depreciat) și aprobarea umană a uneltelor sau ai descoperit un truc, prompt sau fragment de cod util? Distribuie-l cu ceilalți membri ai comunității!
Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!
Nu au fost adăugate încă întrebări sau resurse pentru această pagină. Dacă ai testat un prompt sau ai un snippet util, adaugă-l mai jos pentru comunitate.