- Website-ul tău începe cu o conversație.
- Pentru dezvoltatori și agenți AI
- Changelog: MCP-ul de administrare VIStudio
Changelog: MCP-ul de administrare VIStudio
Istoricul versiunilor MCP-ului de administrare (https://app.vistudio.ro/mcp), de la cea mai nouă la cea mai veche. Versiunea curentă este 1.15.0, din 28.10.2026; o vezi și în câmpul version întors de whoami. Regulile de versionare (semver) și politica de depreciere de cel puțin 30 de zile sunt pe pagina pentru dezvoltatori.
După o actualizare, reconectează clientul: lista uneltelor și parametrii lor se negociază la conectare.
1.15.0 — 28.10.2026
- ChatGPT se poate conecta din nou prin CIMD: un document de metadate al clientului care declară
noneprintre metodele de autentificare (listatoken_endpoint_auth_methods_supporteddin SEP-3149 sau câmpul vechitoken_endpoint_auth_method) e acceptat ca client public cu PKCE, chiar dacă metoda lui preferată eprivate_key_jwt. Un document fărănone, sau cu o metodă cu secret partajat (client_secret_basic,client_secret_post,client_secret_jwt), rămâne refuzat cuinvalid_client. Metadatele serverului nu se schimbă; - OAuth: o cerere la
/oauth/tokensau/oauth/revokecuclient_assertionsauclient_assertion_typee refuzată explicit cuinvalid_client(„client_assertion is not supported by this server: use token_endpoint_auth_method none”), în loc să fie tratată tăcut ca un client public; - cheia de sesiune: fiecare conectare are o cheie stabilă, aceeași la toate reînnoirile orare ale tokenului.
whoamiîntoarce câmpul nousession.key(lângăsession.id, care rămâne rândul tokenului curent și se schimbă la reînnoire) și câmpul nouclientId, id-ul aplicației: uuid-ul înregistrării dinamice sau adresa documentului CIMD. La cheia API ambele suntnull; agent_sessions_listîntoarce câte o intrare pe sesiune (o conectare), nu pe token, cu câmpurile noisessionKey,clientIdșigenerations;createdAte al primei generații, iarlastUsedAt,refreshExpiresAt,revokedAtșiactivesunt ale ultimei. Lista nu mai e tăiată la 200 de rânduri;- jurnalul agenților din admin reține, la fiecare acțiune nouă, sesiunea și id-ul aplicației: doi agenți care lucrează cu același utilizator (de exemplu ChatGPT și Claude, sau două conversații ale aceleiași aplicații) se deosebesc;
- limita de 120 de apeluri pe minut se socotește pe sesiune și nu se mai resetează la reînnoirea tokenului;
- fără unelte noi. Descrierile actualizate ale lui
whoamișiagent_sessions_listse văd după reconectarea clientului.
1.14.0 — 25.10.2026
- unealtă nouă
page_table_edit: schimbă celule sau rânduri dintr-un bloctablefără să retrimită blocul. Operațiile (setCell,hideRow,showRow,insertRow,removeRow,moveRow) se aplică în ordine, cu indexuri de la 0 care numără și rândurile ascunse; un index în afara tabelului refuză tot apelul (invalid), fără nimic scris; o cheie sau o operație necunoscută e refuzată înainte de unealtă, ca eroare de validare a parametrilor. Lucrează pe o singură limbă (localeobligatoriu) și aredry_run; răspunsul întoarce tabelul rezultat (table: { columns, rows, hidden }); - bloc nou de pagină
table: titlu și/sau legendă, stildefaultsauboard, 1–8 coloane (cu aliniere), rânduri cu câte o celulă pe coloană, rânduri ascunse, rând evidențiat și legătură opțională pe rând. Apare înblocks_schemașiblock_template; regula „fiecare rând are exact câte celule are capul” e verificată înblock_validate,page_block_insert,page_block_update,page_blocks_set,pages_createșipages_create_many, iar mesajul numește rândul. Rândurile ascunse lipsesc dinllms-full.txtși din Markdown-ul paginii, unde tabelul apare ca tabel Markdown; - argument nou
accentînpages_create,pages_create_manyșipages_update(none,blue,green,yellow,orange,red,purple,teal,pink): un indiciu de culoare pentru pagină, pe care tema site-ului îl poate folosi;pages_getșipages_treeîl întorc (nonecând lipsește), iarpages_updatecudry_runîl arată închanges.pages_create_manyprimește șihideTitle, capages_create; - blocul
image-gallery(galeria cu lightbox) se poate pune acum și pe pagini, nu doar în articole; settings_updateacceptătiktokîn rețelele sociale, iarsettings_getîl întoarce;- modulul nou
search(căutarea pe site) poate apărea înmodulesdinregion_infoșiregions_list; îl pornește administratorul platformei, pe fiecare site. Nu adaugă unelte MCP; - descrierile și parametrii noi se văd după reconectarea clientului.
1.13.0 — 24.10.2026
- planul de site:
task_linkrefuză acum cuconflictun task revendicat activ de alt agent, catask_update;plan_apply_structurerefuză cuconflict, înainte de orice scriere și și ladry_run, când un task pe care l-ar anula (sau E9.0, al cărui text îl rescrie) e ținut de alt agent, iar mesajul listează cheile și cine le ține. Administratorul site-ului trece; - regula revendicării se aplică acum pe orice cale: o modificare din adminul web sau din API-ul REST pe un task revendicat activ de alt agent primește 409
plan_task_claimed, fără nimic scris; eticheta clientului din revendicare se schimbă doar la o revendicare nouă sau la eliberare; - un blocaj reciproc în baza de date pe scrierea unei pagini (de exemplu o pagină publicată exact când părintele ei e redenumit) nu mai iese
internal: Failed query: …, ciconflict: [page_busy] …, fără nimic scris: reîncearcă după câteva secunde. Se aplică uneltelor de pagini și luitranslate_document/translation_unlockcând documentul e o pagină. Cursa în sine nu mai apare: redenumirea părintelui așteaptă publicarea copilului; - OAuth:
POST /oauth/revokepe o sesiune ale cărei site-uri aprobate au fost toate șterse răspunde 200 (înainte, 500); sesiunea e revocată, iar reînnoirea ei dăinvalid_grant; - fără unelte noi și fără schimbări în parametrii uneltelor. Descrierea actualizată a lui
plan_apply_structurese vede după reconectarea clientului.
1.12.0 — 23.10.2026
- câmp nou
theme.releaseîndesign_schema,design_getșidesign_validate:{ tag, version, schema }, release-ul temei pe care rulează site-ul și schema după care se validează designul ("release"= schema acelui release;"current"= schema curentă a temei, când release-ul nu are o schemă proprie); - un site fixat pe un release mai vechi al temei își păstrează opțiunile:
design_validate,design_draft_set,design_restore,design_submitșidesign_publishvalidează după schema acelui release (înainte, după schema curentă a temei), iarthemeVersional versiunii salvate e versiunea release-ului; - o valoare zecimală aflată pe pasul opțiunii (de exemplu
0.3la pasul0.1) nu mai e refuzată din cauza erorilor de rotunjire;0.35la pasul0.1rămâne refuzat; - la schimbarea temei site-ului, opțiunile pe care tema nouă nu le are sau nu le permite revin la valorile implicite, într-o versiune activă nouă cu nota „Schimbarea temei …”, vizibilă în
design_versionsșidesign_get; - fără unelte noi. Descrierea actualizată a lui
design_schemase vede după reconectarea clientului.
1.11.4 — 22.10.2026
plan_delete: un subtask mutat într-un alt plan pleacă odată cu task-ul lui părinte și intră în numărultasksdin refuz, dindry_runși dindeleted(înainte rămânea în celălalt plan, ca task de nivel superior);frontend_update,frontend_set_page_role,frontend_set_homepageșifrontend_set_blog_pagenu mai pică cu „invalid selections” când pagina de start, pagina de blog sau o pagină cu rol (about,contact,privacy,terms,pricing) e în coș: legătura păstrată trece, iar una nouă spre o pagină din coș e refuzată cu[link_target_trashed];posts_deleteșiposts_unpublish(și cudry_run) întorclinkedFromșilinkedFromNote: ce trimite la articol (blocurile și textul paginilor și articolelor, redirecturile, meniurile);- avertismentul
warningal uneltelorsettings_menu_*spune acum că legăturile spre coș au devenit text și nu mai blochează alte salvări; - OAuth: un
client_idcu caractere de control sau mai lung de 512 caractere primeșteinvalid_client(la/oauth/authorizedirect, fără redirect; 401 la/oauth/tokenși/oauth/revoke), nu 500server_error; - OAuth: redirectul automat la erorile de la
/oauth/authorizeși eticheta „aplicație cunoscută” de pe pagina de consimțământ se dau doar pe adresa de callback a aplicației (https://claude.ai/api/mcp/auth_callback,https://claude.com/api/mcp/auth_callback,https://chatgpt.com/connector/oauth/<id>), în forma ei canonică; adresele loopback rămân de încredere pe orice cale și port. Pentru altă adresă de pe aceste gazde, adminul afișează eroarea, fără s-o urmeze; - pagina de consimțământ: butoanele devin active abia la primul gest pe pagină (mișcarea mouse-ului, o tastă) sau la 1 s după ce fereastra primește focus; o decizie trimisă la mai puțin de 1 s de la afișarea paginii e refuzată (400), iar o pagină de consimțământ deschisă înainte de actualizare răspunde „Formular invalid sau expirat”: conectarea se reia din aplicație;
- fără unelte noi și fără schimbări în parametrii uneltelor.
1.11.3 — 22.10.2026
- traducerea automată pornește de la versiunea publicată a limbii principale, nu de la ultima ciornă: o ciornă salvată imediat după publicare nu mai ajunge în limbile traduse înaintea limbii principale, ci odată cu publicarea ei; un document retras înainte să ruleze traducerea nu mai e tradus și republicat. Descrierea
translate_documentșiautoTranslate.notedintranslation_statuso spun; design_preview_url: calea cerută e verificată pe fiecare segment, și după decodare; segmentele goale,.și..(și codate, de exemplu%2esau%252e),%2f,%5c,~, caracterele de control și codările invalide sunt refuzate cuinvalid, iar mesajul le numește;design_schema: exemplul are culorile în forma normalizată de server (#rrggbb, litere mici), decidesign_validatepe el întoarceconversions: [];- sugestiile „Did you mean …?” recunosc și sinonimele pentru umbra cardurilor (
shadows,card shadow,card elevationși altele); posts_createșiposts_updateîntorc o eroare când autorul articolului nu poate fi salvat, în loc de un succes fals;- fără unelte noi și fără schimbări în parametrii uneltelor.
1.11.2 — 22.10.2026
- un bloc citit cu
pages_getse poate trimite înapoi neschimbat lapage_blocks_set,page_block_insert,page_block_update,pages_create,pages_create_manyșiblock_validate: câmpurile adăugate la citire (hrefșipublicHrefdin legături, în ambele formate) sunt scoase înainte de validare; înainte, orice bloc cu o legătură era refuzat culink: must NOT have additional properties. Altă cheie necunoscută e refuzată în continuare; - o legătură (CTA, card, blocul de redirect, linkul din text, redirectul) salvată într-o ciornă cu id-ul unei pagini, al unui articol sau al unui fișier media din alt site nu mai întoarce calea sau adresa acelei ținte:
hrefenull(înpages_getcuformat: jsonși în previzualizare); legăturile din același site nu se schimbă; pages_deleteșipages_unpublishpe o pagină dinamică publicată (o listare, inclusiv pagina de blog) întorc îngonecăile ei, pe limbi (înainte,gone: []); la mutarea unei astfel de pagini, platforma creează și redirectul 301 automat, iarredirects_listșiredirects_testîi văd calea;- OAuth:
POST /oauth/token(reînnoirea tokenului sau schimbul de cod) pe o sesiune ale cărei site-uri aprobate au fost toate șterse întoarce 400invalid_grant, nu 500; nimic nu se revocă, iar clientul reia autorizarea. O reînnoire picată lasă valabil vechiul refresh token, deci clientul poate reîncerca; - pașii de reconectare după un scope nou sunt în skill-urile
administer-siteșidesign-siteși în ghidul de conectare: în Claude Code,/mcp→ conectorul → Clear authentication, apoi Authenticate; în claude.ai, Disconnect, apoi Connect (Re-authenticate păstrează scope-urile vechi); region_clone_check(mode=plan) nu mai numără printre referințele fără pereche legăturile care n-au avut niciodată o referință în sursă;- fără unelte noi și fără schimbări în parametrii uneltelor.
1.11.1 — 22.10.2026
- două salvări sau publicări simultane ale aceleiași pagini trec acum pe rând, așa că o alegere de meniu făcută în admin nu se mai pierde; dacă pagina e ocupată mai mult de 10 secunde, uneltele răspund
conflict: [page_busy] …, fără nimic scris: reîncearcă după câteva secunde; - o salvare a unei pagini-părinte oprită de salvarea simultană a unei subpagini răspunde
conflict: [child_resave_busy] …(înainte,internal: [child_resave_failed]), fără nimic scris: reîncearcă; - traducerea automată nu mai ține pagina ocupată cât traduce, doar cât scrie limbile traduse;
- fără unelte noi și fără schimbări în parametrii uneltelor.
1.11.0 — 22.10.2026
- stratul de CSS al designului: pe site-urile unde administratorul platformei l-a pornit, o versiune de design poate avea și un CSS propriu, filtrat și limitat la conținutul paginii (nu poate acoperi antetul, subsolul sau bannerul de cookie-uri). Argument opțional nou
cssladesign_validateșidesign_draft_set;design_getîntoarcecssLayerșicss,design_validate,design_draft_setșidesign_restoreîntorccss, iardesign_schemaarelimits.cssLayer. Refuzuri noi:design_css_disabled(stratul e oprit pe site) șidesign_css_invalid(cu codurile filtrului,css_*); - formularele: ce întoarce
forms_getse poate trimite înapoi neschimbat laforms_update. Câmpul ascunsreferencee acceptat (doarnameșirequired): valoarea lui e titlul documentului ales ca sursă în blocul formularului, goală fără sursă, decirequired: trueare sens doar dacă fiecare bloc are sursa setată;fields[].labelșisubmitButtonLabelacceptănull(submitButtonLabel: nullșterge eticheta butonului); - jurnalul agenților arată documentul corect pentru fiecare unealtă (articole, etichete, sedii, media, formulare, setări, plan, task-uri);
task_linkîntoarce șiid, iarplan_apply_structureîntoarceplanId; - clonarea unui site: avertismentul pentru o legătură fără referință în sursă spune că tipul și referința nu au fost setate niciodată;
- fără unelte noi. Descrierile uneltelor atinse se văd după reconectarea clientului.
1.10.0 — 21.10.2026
- legăturile spre o pagină mutată în coș sau ștearsă nu mai blochează salvarea: o legătură existentă, în același câmp, rămâne, iar o legătură nouă spre o pagină din coș e refuzată cu
[link_target_trashed](sau[link_target_deleted]pentru o pagină ștearsă); pages_delete(și cudry_run) întoarcelinkedFromșilinkedFromNote: ce trimite la pagină (blocuri, text, redirecturi, meniuri, rolurile din front-end), ca să le schimbi înainte sau după;redirects_listmarchează cubrokenredirecturile spre o țintă din coș sau ștearsă (cubrokenTotalșinote), iarredirects_coverageîntoarcebrokenRedirects;redirects_updatepe un redirect fără țintă cere o țintă nouă;settings_updateîntoarceconvertedMenuLinksșiconvertedNotecând un element de meniu rămas fără țintă a devenit text;pages_deleteșipages_undeletelucrează în limba principală a site-ului: o pagină doar în română nu mai capătă un rând gol în engleză;- fără unelte noi. Descrierile uneltelor atinse se văd după reconectarea clientului.
1.9.0 — 21.10.2026
- redirecturi automate: când se schimbă calea publică a unei pagini sau a unui articol publicat (slug, părinte, slug-ul tradus), platforma creează singură redirectul 301 de la adresa veche, pe fiecare limbă, și pentru subpaginile publicate (iar la pagina de blog, pentru articole); fără lanțuri și fără bucle;
pages_publish,posts_publish, iarpages_update/posts_updatecând publică direct, întorcredirects: { created, updated, deleted };pages_unpublish,pages_delete,posts_unpublishșiposts_deleteîntorcgone, căile care nu mai răspund;redirects_listarată și redirecturile spre articole (to.type: 'post',postId), iarredirects_testle urmărește, pe calea publicată a articolului;- mutarea paginii de blog repornește site-ul, ca noua rutare să se aplice;
pages_publisho spune înnote; forms_deletecuconfirm: trueșterge formularul și trimiterile lui într-o singură operație (înainte, o ștergere picată putea pierde trimiterile); refuzul fărăconfirmspune câte trimiteri are formularul;plan_deletecuconfirm: trueșterge planul, task-urile și toate comentariile lor (și pe ale altor utilizatori) într-o singură operație; răspunsul aredeleted.comments, iar refuzul fărăconfirmnumără și comentariile;- două publicări programate ale aceluiași document (
pages_publish/posts_publishcuat) nu mai rulează simultan; ștergerea definitivă a unei pagini sau a unui articol îi scoate programările; - formulări ca „în toate limbile”, „și în engleză” sau „multilingv” nu mai sunt luate drept o cerere de traducere manuală: agentul scrie doar în limba principală, iar platforma traduce restul (instrucțiunile serverului,
policydinwhoamiși descrierile uneltelor de scriere); - fără unelte noi. Descrierile uneltelor atinse se văd după reconectarea clientului.
1.8.0 — 21.10.2026
- câmp nou
mcpOnlyîn răspunsulwhoami: regiunile sesiunii pe care contul lucrează doar prin MCP și o notă pentru agent;nullcând nu există. Bifa „Doar prin MCP” o pune administratorul platformei pe contul agentului, pe fiecare site. Pe aceste site-uri contul are rolul lui doar prin MCP (OAuth sau cheie API); în adminul web și în API-ul REST nu are mai mult decât un vizitator anonim, deci agentul lucrează doar cu uneltele MCP; - regula de lucru recomandată: fiecare agent are contul lui, separat de contul persoanei pentru care lucrează;
- fără unelte noi și fără schimbări în parametrii uneltelor.
1.7.1 — 20.10.2026
- schimbarea paginii de blog (
frontend_set_blog_page) și a limbilor site-ului (region_languages_update) repornește acum site-ul, ca noua rutare să se aplice; înainte, un site altfel neschimbat rămânea pornit cu rutarea veche; - descrierea și câmpul
notedin răspunsul luifrontend_set_blog_pagespun că repornirea durează 1–2 minute și cum o verifici: până când/api/healthal site-ului arată unstartedAtnou, lista articolelor răspunde pe calea veche; region_languages_updatespune același lucru în descriere și înnote, alături de nota despre conținutul limbilor scoase;- doar texte: fără unelte noi și fără schimbări în parametrii uneltelor.
1.7.0 — 20.10.2026
posts_getîntoarce conținutul articolului ca Markdown în câmpul noumarkdown;contentdinposts_gete depreciat: e o copie identică a luimarkdownși dispare după 19.11.2026 (versiunea 2.0.0); citeștemarkdown;- în ChatGPT,
posts_getajungea ca{}, fiindcă lanțul ChatGPT pierde rezultatul unei unelte care are un câmpcontentla primul nivel; clientului ChatGPT nu i se mai trimitecontent, deci primește articolul întreg; - fără unelte noi și fără schimbări în parametrii uneltelor.
1.6.0 — 20.10.2026
- Agent Skill nou
get-started(https://app.vistudio.ro/.well-known/agent-skills/get-started/SKILL.md): promptul pe care îl copiezi în chat-ul agentului tău ca să-l pornești. Agentul conectează MCP-ul, află site-ul cuwhoami, face un raport doar-citire al stării lui și continuă cu tine pe regulile serverului. Promptul în română e pe pagina Pornește un agent AI pe site-ul tău; - ghidul de conectare (
https://app.vistudio.ro/mcp/guide) are secțiunea „Pornește un agent nou”, cu același prompt; - fără unelte noi și fără schimbări în parametrii uneltelor.
1.5.0 — 20.10.2026
- slug-ul dat explicit rămâne al documentului: un slug trimis la
pages_create,pages_create_many,pages_update,posts_create,posts_updatesautags_create, diferit de cel derivat din titlu, nu mai e rescris din titlu când documentul e deschis în admin; - câmp nou
slugLocked(pe limbă):true= slug-ul urmează titlul,false= rămâne cel dat; înpages_get,posts_get,posts_list,pages_treeși în răspunsurile scrierilor; pages_updateșiposts_updateprimescslugLocked, care blochează sau deblochează slug-ul fără să-l schimbe;pages_getșiposts_getîntorcnotepe o limbă fără conținut propriu (tradusă de platformă la publicare sau lipsă): câmpurile goale nu sunt o eroare.
1.4.0 — 19.10.2026
dry_runla uneltele care șterg (pages_delete,posts_delete,media_delete,forms_delete,redirects_delete,offices_delete,plan_delete): nu scrie nimic, nici cuconfirm: true;- un parametru care nu e în schema uneltei refuză apelul cu
invalidși „Did you mean …?” (înainte era ignorat);regionla o unealtă care nu-l are șiconfirmîn plus sunt ignorate, cu notaignored; - titlurile cu caractere de control sunt refuzate.
1.3.0 — 18.10.2026
- unelte noi pentru designul site-ului:
design_schema,design_get,design_validate,design_preview_url,design_versions,design_draft_set,design_restore,design_submit,design_publish; scope noumcp:design. Un design nu se publică niciodată direct:design_publishcere rolul de admin,mcp:publishșiconfirm: true.
1.2.0 — 12.10.2026
frontend_updateprimeștewhenToUse, textul secțiunii „When to use” dinllms.txt(pe limbă, cel mult 1000 de caractere);settings_getîl întoarce însite.whenToUse;pages_publish, și publicarea programată, adaugă pagina în meniurile alese în admin, în secțiunea „Meniu” a paginii;- mutarea unei pagini în coș (
pages_delete) și ștergerea ei definitivă o scot din meniuri; - uneltele
settings_menu_*raporteazăconvertedcând transformă în text un element de meniu spre o pagină din coș sau inexistentă; - restaurarea unei versiuni din admin rulează în limba principală a site-ului (
pages_restorerula deja așa).
1.1.0 — 12.10.2026
- unelte noi:
pages_schedule_cancelșiposts_schedule_cancel(anulează programările active ale unei pagini sau ale unui articol, fără să schimbe documentul); pages_publishșiposts_publishprimescat, publicarea programată: o dată și oră ISO 8601 în viitor, cel mult 365 de zile; fără fus orar, ora e cea a României. Ca la orice publicare, agentul cere întâi confirmarea utilizatorului;pages_getșiposts_getîntorcschedules, programările active;- conectarea: CIMD.
client_idpoate fi adresa https a documentului de metadate al clientului; înregistrarea dinamică rămâne; - o salvare de pagină care nu poate actualiza calea unei subpagini întoarce eroarea
child_resave_failedși nu scrie nimic (înainte raporta succes fără să scrie); - crearea unei pagini a cărei cale nu se poate scrie întoarce eroarea
page_breadcrumbs_failedși nu creează nimic (înainte întorcea pagina, deși ea nu exista).
1.0.0 — 12.10.2026
Prima versiune cu politică de versiuni și depreciere. Față de versiunea anterioară:
- unelte noi:
frontend_set_page_role(rolurile de pagină: about, contact, privacy, terms, pricing),region_clone_checkșiregion_clone(doar pentru super-admin); - limba principală: paginile, articolele și etichetele se scriu doar în limba principală. Celelalte limbi le traduce platforma la publicare (
region_info.autoTranslate,pendingAutoTranslationînpages_treeșicontent_status).translation_unlockdeblochează o limbă doar la cererea explicită a utilizatorului; region_languages_updateprimeșteautoTranslateNewDocuments;translation_statusaremanualLanguages;translate_documenttraduce și formularele, la cerere (collection: forms);- conectarea:
scope=înWWW-Authenticate,resource_documentationîn metadatele resursei,listChanged: falseîn capabilități; - limitele:
retry after N sînrate_limitedșiRetry-Afterpe 429-ul OAuth; whoamiîntoarceversion.