Ce face elicitation/create (Elicitation)
Elicitarea permite serverului să ceară informații utilizatorului în timp ce procesează o cerere. În revizia 2026-07-28, elicitation/create vine în inputRequests al unui InputRequiredResult, iar răspunsul clientului (ElicitResult) se întoarce în inputResponses la reîncercare. Clientul declară capabilitatea elicitation cu modurile form și/sau url; un obiect gol înseamnă doar form. Serverul nu trimite cereri într-un mod nesuportat.
Modul form (implicit dacă lipsește mode) colectează date structurate prin requestedSchema, un subset restrâns de JSON Schema: un obiect plat cu proprietăți primitive (string cu formatele email, uri, date, date-time; number sau integer; boolean; enum cu selecție simplă sau multiplă). Serverele nu au voie să ceară prin form parole, chei API, tokenuri de acces sau date de plată. Modul url (introdus în 2025-11-25) trimite utilizatorul la un URL pentru interacțiuni sensibile care nu trebuie să treacă prin client: introducerea unei chei, o autorizare OAuth la un serviciu terț, o plată.
Răspunsul are action: accept, decline sau cancel; content apare doar la accept în modul form. În modul url, accept înseamnă doar consimțământul de a deschide URL-ul; la reîncercare, serverul decide din requestState sau din starea proprie dacă interacțiunea s-a terminat. Notificarea notifications/elicitation/complete și câmpul elicitationId din 2025-11-25 au fost eliminate în 2026-07-28. Modul url nu servește la autorizarea clientului la serverul MCP; pentru asta există autorizarea MCP.
Sintaxă și opțiuni
| Opțiune / Parametru | Descriere |
|---|---|
mode |
form sau url. Fără câmp, cererea este în modul form. |
message |
Text explicativ pentru utilizator: de ce este nevoie de interacțiune. Obligatoriu. |
requestedSchema |
Doar în modul form: schema obiectului așteptat, cu proprietăți primitive. |
url |
Doar în modul url: adresa pe care utilizatorul o deschide. Trebuie să fie un URL valid. |
action |
accept (a trimis), decline (a refuzat explicit), cancel (a închis fără să aleagă). |
content |
Datele trimise, conforme cu schema. Lipsește în modul url. |
capabilitate elicitation |
{"form": {}, "url": {}} în clientCapabilities; {} echivalează cu doar form. |
Exemple practice
Exemplul 1: Formular cu date de contact
Cererea din inputRequests; clientul afișează un formular generat din schemă.
{
"method": "elicitation/create",
"params": {
"mode": "form",
"message": "Please provide your contact information",
"requestedSchema": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Your full name"
},
"email": {
"type": "string",
"format": "email",
"description": "Your email address"
},
"age": {
"type": "number",
"minimum": 18,
"description": "Your age"
}
},
"required": ["name", "email"]
}
}
}
Exemplul 2: Răspunsul clientului la reîncercare
{
"action": "accept",
"content": {
"name": "Monalisa Octocat",
"email": "octocat@github.com",
"age": 30
}
}
Exemplul 3: Mod url pentru o cheie API
Clientul arată URL-ul complet, cere consimțământul și îl deschide astfel încât nici clientul, nici LLM-ul să nu vadă ce introduce utilizatorul.
{
"method": "elicitation/create",
"params": {
"mode": "url",
"url": "https://mcp.example.com/ui/set_api_key",
"message": "Please provide your API key to continue."
}
}
Greșeli frecvente și bune practici
- Ceri parole sau chei API prin modul form. Specificația interzice asta; folosește modul url.
- Tratezi
acceptdin modul url ca pe o confirmare că utilizatorul a terminat. Este doar consimțământul de navigare; verifică finalizarea la reîncercare. - Deschizi automat URL-ul sau îl preîncarci. Clientul nu are voie să facă asta fără consimțământ explicit și trebuie să arate URL-ul complet înainte.