Un server MCP kanban pentru ChatGPT, Claude, Cursor și Codex
De Andrei Finogeev, fondatorul Weft ·
Weft este un panou kanban găzduit — Backlog, Todo, Doing, Done, cu sprinturi opționale — iar serverul lui MCP se află la https://letsweft.com/api/mcp. Adaugi acest URL în clientul tău AI și te autentifici o dată cu OAuth; nu ai nimic de instalat sau de rulat local. De atunci înainte, asistentul citește panoul, creează și mută carduri, revendică un card înainte să lucreze la el, ca doi agenți să nu-l ia niciodată pe același, raportează progresul, te întreabă când decizia e a ta și închide cardul cu ce a făcut. Gratuit pentru 50 de sarcini și 200 de apeluri AI pe lună.
https://letsweft.com/api/mcpStreamable HTTP · OAuth sau un token de acces personal · 32 de instrumente
Adaugă-l în clientul tău AI
ChatGPT
Deschide Weft în ChatGPT — sau configurează-l manual:
- 1Deschide Plugins în bara laterală ChatGPT — sau Settings → Plugins.
- 2Caută „Weft” și deschide listarea.
- 3Apasă „Connect” și verifică ce poate accesa Weft.
- 4Autentifică-te cu contul tău Weft în fereastra care se deschide.
Menționează pluginul cu @ în orice chat: „@Weft ce e pe panoul meu?” — sau alege Weft din meniul +. Dacă ai sărit configurarea, ChatGPT se oferă să-l conecteze pe loc.
Claude Desktop
- 1Deschide Claude Desktop → Settings → Connectors.
- 2Apasă „Add custom connector”.
- 3Lipește URL-ul MCP al Weft de mai jos și salvează.
- 4Finalizează OAuth în fereastra de browser care se deschide.
Începe un chat nou și întreabă: „ce e pe panoul meu Weft?”. Claude preia starea panoului prin conectorul Weft.
Claude Code
claude mcp add --transport http weft https://letsweft.com/api/mcpRulează `claude` în orice proiect, apoi întreabă: „ce e pe panoul meu?”. Prima dată se deschide o fereastră de browser pentru OAuth.
Cursor
Adaugă în Cursor — sau configurează-l manual:
{
"mcpServers": {
"weft": {
"url": "https://letsweft.com/api/mcp"
}
}
}Deschide Cursor → Settings → MCP. Serverul „weft” ar trebui să apară cu un indicator verde după ce finalizezi OAuth.
Codex CLI
[mcp_servers.weft]
url = "https://letsweft.com/api/mcp"Rulează `codex mcp login weft` ca să te autentifici prin browser, apoi pornește `codex` și întreabă: „ce e pe panoul meu?”. `/mcp` listează serverul conectat și instrumentele lui.
VS Code
Instalează extensia Weft — sau configurează-l manual:
{
"servers": {
"weft": {
"type": "http",
"url": "https://letsweft.com/api/mcp"
}
}
}Deschide Chat, treci selectorul de mod pe Agent și întreabă: „ce e pe panoul meu?”. Prima dată se deschide o fereastră de browser pentru OAuth. „MCP: List Servers” ar trebui să arate weft ca Running.
Windsurf
- 1Deschide Windsurf → Settings → Cascade → MCP servers.
- 2Apasă „Add server” și alege Remote (HTTP).
- 3Lipește URL-ul MCP al Weft de mai jos și salvează.
- 4Finalizează OAuth în fereastra de browser care se deschide.
Deschide Cascade și întreabă: „ce e pe panoul meu?”. Cascade marchează răspunsurile care au folosit serverul Weft.
Gemini CLI
gemini extensions install https://github.com/AndreiFinogeev/weft-gemini-extensionRulează `gemini` și întreabă: „ce e pe panoul meu weft?”. La prima folosire se deschide un browser pentru OAuth. `gemini extensions list` ar trebui să arate „weft”.
Făcut pentru agenți, nu doar pentru tine
Revendicări, nu coliziuni
start_task pune un leasing pe un card înainte ca un agent să lucreze la el. Un al doilea agent care cere de lucru primește alt card, iar un card al cărui agent a tăcut e oferit din nou când leasingul expiră.
Progres și chitanțe
report_progress ține revendicarea activă cât timp agentul lucrează; complete_task închide cardul cu ce s-a făcut, ce nu și linkuri pe care le poți verifica.
Întrebările te așteaptă
request_input îți pune în Inbox o întrebare cu variante — pe web și pe telefon — în loc să-l lase pe agent să ghicească ceva ce doar tu poți decide.
Atenția ta dă ritmul
Când prea multă muncă terminată îți așteaptă verificarea, agenții nu mai încep carduri noi. Este limita kanban de lucru în desfășurare, aplicată ție.
Tu decizi ce are voie să facă fiecare AI
Dă-i fiecărui asistent conectat acces complet, de scriere sau doar de citire și deconectează-l cu un clic. Cardurile șterse ajung în coș, nu dispar definitiv pe loc.


Cele 32 de instrumente
Fiecare instrument declară dacă doar citește, scrie sau elimină ceva, ca clientul tău să știe când să te întrebe mai întâi.
| Instrument | Ce face | Tip |
|---|---|---|
| search | Căutare după cuvinte-cheie în sarcini, sprinturi, decizii și note de memorie. Returnează până la 50 de rezultate {id, title, url} ordonate după relevanță, ale căror id-uri cu prefix de tip merg mai departe în fetch. | Citire |
| fetch | Aduce conținutul complet al unui singur rezultat de căutare — titlu, reprezentare text, URL-ul sursei și metadate structurate. Primește id-ul cu prefix returnat de search. | Citire |
| initialize_board | Creează coloanele implicite Backlog, Todo, Doing și Done pe panoul tău Weft dacă nu există niciuna — configurarea dintr-un singur apel înainte ca un agent AI să gestioneze sarcini. Idempotent. | Scriere |
| get_board_state | Returnează un rezumat compact al panoului Scrumban al utilizatorului: coloane, sprintul activ, Doing, sarcini întârziate și închideri recente, de vreo 30 de ori mai mic decât un snapshot complet. | Citire |
| list_columns | Listează toate coloanele de pe panou, în ordine — id, nume și poziție pentru fiecare, ca agentul să știe exact unde poate muta o sarcină. | Citire |
| list_tasks | Returnează sarcinile utilizatorului autentificat, filtrate opțional după coloană, sprint, proiect (nume sau id), creator (om sau AI) sau persoana atribuită (executantul). | Citire |
| create_task | Creează o sarcină nouă pe panoul utilizatorului. Ajunge în Backlog dacă nu e setată o coloană. Prioritatea implicită e medie. Se folosește când utilizatorul cere să adauge o sarcină. | Scriere |
| bulk_create_tasks | Creează până la 1000 de sarcini într-un singur apel atomic — importă exporturi din Linear/Jira/Notion/Trello sau orice listă de 3+ sarcini, consumând un singur apel AI din cotă. | Scriere |
| update_task | Modifică parțial câmpurile unei sarcini existente. Se schimbă doar câmpurile trimise; cele omise se păstrează — cu o excepție: ștergerea requiresReview e refuzată pentru un agent, iar refuzul anulează toată modificarea. | Scriere |
| move_task | Mută o sarcină într-o altă coloană și poziție. Mutarea într-o coloană cu semantic='doing' pornește măsurarea cycle time; mutarea în semantic='done' înregistrează momentul finalizării. | Scriere |
| start_task | AI-ul îl apelează în momentul în care începe să execute o sarcină — cardul trece în Doing, ca utilizatorul și orice alt client conectat să vadă că e în lucru (și să nu-l preia de două ori). Pornește măsurarea cycle time; o sarcină neatribuită e revendicată de agentul care apelează (o persoană deja atribuită nu e niciodată înlocuită). Nu e nevoie de id de coloană. | Scriere |
| report_progress | Spune că încă lucrezi. Revendicarea unei sarcini expiră dacă clientul tace, iar asta o reînnoiește. Fără un semn de viață, o sarcină de durată e considerată abandonată și oferită altcuiva — intenționat, pentru că un agent care moare în timpul rulării nu mai raportează nimic, așa că tăcerea e singurul semnal pe care îl are panoul. | Scriere |
| request_input | Întreabă persoana ceva ce doar ea poate decide și așteaptă fără să piardă revendicarea sarcinii. Dacă persoana e la clientul ei, acolo apare un formular și răspunsul vine înapoi în același apel — agentul continuă în același context, cu aceeași revendicare. Dacă e plecată, apelul se întoarce în așteptare și întrebarea stă în coada ei; răspunsul ajunge la agent la următorul start_task sau get_my_work. Pentru ce e ireversibil și cu adevărat ambiguu, nu pentru „pot să continui?” — fiecare întrebare consumă același buget de atenție care limitează munca nouă. | Scriere |
| submit_answer | Aduce înapoi ce a spus persoana la o întrebare ridicată de agent și predă munca înapoi cu același runId și același leasing, ca ea să continue în aceeași încercare, nu să pornească de la zero. E marcat ca transmis, niciodată ca acțiune făcută chiar de persoană — un răspuns adus de un agent și un clic dat de un om sunt dovezi de feluri diferite, iar panoul le ține separat. Dacă la întrebare s-a răspuns deja în aplicația Weft, se returnează acel răspuns în loc de o eroare: important e ca agentul să continue cu cel corect. | Scriere |
| get_my_work | Întreabă ce urmează în loc să citești tot panoul și să ghicești. Returnează sarcinile atribuite acestui client, ce așteaptă deja după om și dacă mai e loc în coada de atenție. Spune și ce e întârziat și ce are termen sau începe în săptămâna asta, ca agentul să afle de un termen fără să întrebe. Când coada e plină, mișcarea utilă e să ajuți la golirea ei, nu să începi ceva nou — și asta se spune înainte să fie aleasă o sarcină. | Citire |
| complete_task | AI-ul îl apelează când munca e cu adevărat terminată — cardul trece în Done, cu momentul finalizării înregistrat, iar rezultatul opțional (ce s-a făcut, unde se află rezultatul) e adăugat pe card ca notă "Outcome (AI, date)". Nu e nevoie de id de coloană. Munca marcată ca având nevoie de tine NU trece în Done: ajunge în coada ta cu chitanța atașată, iar dacă agentul a spus ce ar face în continuare, acceptarea aprobă exact acel pas și i-l predă înapoi agentului. Dacă sarcina are un plan de verificare, serverul îi execută verificările chiar aici — descarcă URL-ul, caută citatul, compară hash-ul: un plan executable/state_delta ale cărui verificări blocante trec toate se închide verificat de server; o verificare blocantă eșuată ține cardul în afara Done și îi arată agentului ce a observat serverul. | Scriere |
| record_decision | Un instrument, două utilizări, un singur tabel de evidență. (1) Transmite un verdict pe care l-ai dat în conversație despre o muncă terminată care te așteaptă — aprobat, trimis înapoi, renunțat, mai târziu — scoțând cardul din coada de verificare; intrarea e păstrată ca transmisă, nu ca acțiune făcută de tine în aplicație, iar diferența rămâne vizibilă intenționat. (2) Înregistrează o decizie de sine stătătoare care merită ținută minte — „am ales Neon în loc de Supabase”, o lecție învățată — ca înregistrare imuabilă MADR-lite, cu variantele cântărite și condiția în care trebuie revăzută. Înregistrările nu se editează niciodată: o decizie nouă cu supersedesId o înlocuiește pe una veche, iar cea veche rămâne de citit așa cum era în ziua în care a fost luată. Aceste înregistrări sunt ce le servește get_context înapoi tuturor agenților săptămâna viitoare. | Scriere |
| get_context | Deciziile și lecțiile în vigoare ale workspace-ului, împachetate într-un buget de tokenuri, cele mai noi primele — ce ar trebui să citească un agent înainte să înceapă orice lucru netrivial. Derivat din deciziile înregistrate, nu scris ca document, așa că nu se poate învechi: o decizie înlocuită dispare în momentul în care e înregistrată înlocuitoarea, iar fiecare rând are data lui. Restrânge-l la un proiect sau o sarcină; rândurile care nu încap în buget sunt numărate, niciodată ascunse pe tăcute. | Citire |
| get_task_history | Ce s-a întâmplat cu o sarcină, nu doar câmpurile ei actuale. Trei moduri: 'summary' (implicit, ≤500 de tokenuri — cardul, ultima chitanță, numărători), 'decisions' (fiecare decizie înregistrată despre ea, inclusiv verdictele și motivele lor — motivul unei refaceri supraviețuiește aici chiar după ce o acceptare ulterioară suprascrie cardul), 'full' (jurnalul brut, plafonat la 100 de evenimente, lucru pe care îl și spune). Există pentru că un jurnal de audit e prea vorbăreț ca să-l citești direct, iar rândul sarcinii păstrează doar ultimul verdict. | Citire |
| trash_task | Mută o sarcină în coșul panoului tău Weft. Poate fi recuperată timp de 30 de zile cu restore_task, după care o sarcină programată o șterge definitiv. | Elimină |
| restore_task | Recuperează o sarcină din coș în cel mult 30 de zile de la ștergere. Sarcina revine pe panou unde era, complet intactă — ca un fondator solo să nu piardă niciodată muncă din cauza unei ștergeri accidentale. | Scriere |
| archive_done_tasks | Golește coloana Done: fiecare sarcină din ea pleacă de pe panou în arhivă — tot găsită de search/fetch și tot afișată în istoricul sprintului ei, niciodată ștearsă. Finalizarea unui sprint arhivează automat sarcinile terminate ale acelui sprint; acesta se ocupă de rest. Ia toată coloana într-un singur apel, fără număr și fără cale de întoarcere din suprafața MCP — restore_task restaurează din coș, nu din arhivă — de aceea e marcat ca distructiv: un client ar trebui să ceară confirmarea utilizatorului înainte să-l apeleze. | Elimină |
| list_projects | Listează proiectele panoului — contexte ușoare (un startup, un client, personal) din care poate face parte o sarcină. Exclude proiectele arhivate, dacă nu e setat includeArchived. | Citire |
| create_project | Creează un context de proiect. Numele e unic pe panou; culoarea implicită e aleasă prin rotație dintr-o paletă; url este site-ul proiectului, al cărui favicon apare pe cardurile sarcinilor. | Scriere |
| update_project | Redenumește un proiect, îi schimbă culoarea sau URL-ul site-ului ori îl arhivează/dezarhivează. Proiectele arhivate dispar din selectoare; sarcinile lor păstrează asocierea. | Scriere |
| list_sprints | Listează toate sprinturile (planificate, active, finalizate, arhivate) ale utilizatorului, ca un fondator solo sau un agent să poată revedea istoricul sprinturilor și starea actuală fără să deschidă aplicația. | Citire |
| get_active_sprint | Returnează sprintul activ în acest moment sau null dacă nu rulează niciun sprint — ca un fondator solo sau un agent să poată verifica obiectivul curent fără să deschidă aplicația. | Citire |
| create_sprint | Creează un sprint nou cu starea "planned" pe panoul tău Weft, gata de programat cu un obiectiv și date. Folosește separat start_sprint când ești gata să începi lucrul. | Scriere |
| start_sprint | Trece un sprint planificat în starea activă. Poate fi activ un singur sprint odată, pe orice plan — dacă rulează alt sprint, apelul eșuează și îl numește; finalizează mai întâi acel sprint, apoi încearcă din nou. | Scriere |
| complete_sprint | Finalizează sprintul activ. Sarcinile lui terminate sunt arhivate în istoricul sprintului — scoase din coloana Done a panoului, dar tot căutabile și afișate pe pagina sprintului. Sarcinile neterminate rămân pe panou, legate de sprint. Nu poate fi anulat prin MCP — clienții ar trebui să ceară confirmare când intenția e ambiguă. | Elimină |
| add_task_to_sprint | Atribuie o sarcină existentă unui sprint, ca să apară în scopul și în burndown-ul acelui sprint. Idempotent — dacă îl apelezi de două ori nu are efect suplimentar, așa că poate fi reîncercat în siguranță. | Scriere |
| remove_task_from_sprint | Desparte o sarcină de sprintul ei curent fără s-o ștergi — sarcina rămâne pe panou în coloana ei, doar că nu mai face parte din acel sprint sau din burndown-ul lui. | Scriere |
Întrebări
Ce este un server MCP kanban?
Un server MCP (Model Context Protocol) care expune un panou kanban ca instrumente pe care un asistent AI le poate apela: listează coloanele, citește carduri, creează un card, îl mută în Doing sau Done. Cel al Weft e găzduit, așa că adaugi un URL în loc să rulezi un proces pe calculatorul tău.
Trebuie să instalez sau să rulez ceva?
Nu. Adaugă https://letsweft.com/api/mcp în clientul tău AI și autentifică-te cu OAuth. Clienții fără OAuth folosesc un token de acces personal din Setări → Tokenuri de acces.
Este gratuit?
Da, pentru 50 de sarcini și 200 de apeluri AI pe lună. Pro elimină limitele pentru 7 $ pe loc pe lună sau 60 $ pe loc pe an.
Merge cu ChatGPT Free?
Da. Weft e în Plugin directory din ChatGPT și merge pe orice plan ChatGPT, inclusiv Free. Adăugarea unui URL MCP direct în ChatGPT e o funcție Business, Enterprise și Edu, dar pentru Weft nu ai nevoie de ea.
Pot doi agenți să folosească același panou?
Da — pentru asta e panoul. Fiecare agent revendică un card cu start_task înainte să lucreze la el, așa că nu preiau același card, iar fiecare card arată dacă l-a creat sau terminat un AI sau un om.
Prin ce diferă de un server MCP kanban local?
Serverele MCP kanban open-source rulează pe calculatorul tău și țin panoul într-un fișier sau o bază de date locală, așa că îl văd doar agenții de pe acel calculator. Weft e un panou comun, găzduit: aceleași carduri în ChatGPT, Claude, Cursor, Codex, aplicația web și aplicațiile iOS și Android, pentru tine și echipa ta.