Een kanban-MCP-server voor ChatGPT, Claude, Cursor en Codex

Door Andrei Finogeev, oprichter van Weft ·

Weft is een gehost kanbanbord — Backlog, Todo, Doing, Done, met optionele sprints — en de MCP-server staat op https://letsweft.com/api/mcp. Voeg die URL toe aan je AI-client en log één keer in met OAuth; je hoeft niets lokaal te installeren of te draaien. Vanaf dan leest de assistent het bord, maakt en verplaatst hij kaarten, claimt hij een kaart voordat hij eraan werkt zodat twee agents nooit dezelfde pakken, meldt hij voortgang, vraagt hij het jou als een beslissing aan jou is, en sluit hij de kaart af met wat hij heeft gedaan. Gratis voor 50 taken en 200 AI-aanroepen per maand.

URL van de MCP-server
https://letsweft.com/api/mcp

Streamable HTTP · OAuth, of een persoonlijk toegangstoken · 32 tools

Voeg het toe aan je AI-client

ChatGPT

Weft openen in ChatGPT — of stel het handmatig in:

  1. 1Open Plugins in de zijbalk van ChatGPT — of Settings → Plugins.
  2. 2Zoek op "Weft" en open de listing.
  3. 3Klik op "Connect" en bekijk waar Weft bij kan.
  4. 4Log in met je Weft-account in het venster dat opent.

Noem de plugin met een @ in een willekeurige chat: "@Weft wat staat er op mijn bord?" — of kies Weft uit het +-menu. Heb je het instellen overgeslagen, dan biedt ChatGPT ter plekke aan om te koppelen.

Claude Desktop

  1. 1Open Claude Desktop → Settings → Connectors.
  2. 2Klik op "Add custom connector".
  3. 3Plak de MCP-URL van Weft hieronder en sla op.
  4. 4Rond OAuth af in het browservenster dat opent.

Begin een nieuwe chat en vraag: "wat staat er op mijn Weft-bord?". Claude haalt de stand van je bord op via de Weft-connector.

Claude Code

bash
claude mcp add --transport http weft https://letsweft.com/api/mcp

Draai `claude` in een willekeurig project en vraag: "wat staat er op mijn bord?". De eerste keer opent een browservenster om OAuth af te ronden.

Cursor

Toevoegen aan Cursor — of stel het handmatig in:

~/.cursor/mcp.json
{
  "mcpServers": {
    "weft": {
      "url": "https://letsweft.com/api/mcp"
    }
  }
}

Open Cursor → Settings → MCP. De server "weft" hoort er met een groen bolletje te staan zodra je OAuth hebt afgerond.

Codex CLI

~/.codex/config.toml
[mcp_servers.weft]
url = "https://letsweft.com/api/mcp"

Draai `codex mcp login weft` om in de browser in te loggen, start dan `codex` en vraag: "wat staat er op mijn bord?". `/mcp` toont de verbonden server en zijn tools.

VS Code

Weft-extensie installeren — of stel het handmatig in:

.vscode/mcp.json
{
  "servers": {
    "weft": {
      "type": "http",
      "url": "https://letsweft.com/api/mcp"
    }
  }
}

Open de chat, zet de moduskiezer op Agent en vraag: «wat staat er op mijn bord?». De eerste keer opent een browservenster voor OAuth. «MCP: List Servers» hoort weft als Running te tonen.

Windsurf

  1. 1Open Windsurf → Settings → Cascade → MCP servers.
  2. 2Klik op "Add server" en kies Remote (HTTP).
  3. 3Plak de MCP-URL van Weft hieronder en sla op.
  4. 4Rond OAuth af in het browservenster dat opent.

Open Cascade en vraag: "wat staat er op mijn bord?". Cascade markeert antwoorden waarvoor het de Weft-server gebruikte.

Gemini CLI

bash
gemini extensions install https://github.com/AndreiFinogeev/weft-gemini-extension

Draai `gemini` en vraag: "wat staat er op mijn weft-bord?". Bij het eerste gebruik opent een browser voor OAuth. `gemini extensions list` hoort "weft" te tonen.

Gebouwd voor agents, niet alleen voor jou

Claims, geen botsingen

start_task zet een lease op een kaart voordat een agent eraan werkt. Een tweede agent die om werk vraagt, krijgt een andere kaart, en een kaart waarvan de agent stil is gevallen, wordt opnieuw aangeboden als de lease afloopt.

Voortgang en bewijs

report_progress houdt de claim levend terwijl de agent werkt; complete_task sluit de kaart af met wat er gedaan is, wat niet, en links die je kunt controleren.

Vragen wachten op jou

request_input zet een vraag met opties in je Inbox — op het web en op je telefoon — in plaats van de agent te laten gokken naar iets wat alleen jij kunt beslissen.

Jouw aandacht bepaalt het tempo

Staat er te veel afgerond werk op jouw review te wachten, dan beginnen agents niet aan nieuwe kaarten. Dat is de kanbanlimiet op onderhanden werk, toegepast op jou.

Jij bepaalt wat elke AI mag

Geef elke gekoppelde assistent volledige toegang, schrijftoegang of alleen-lezen, en koppel hem met één klik los. Verwijderde kaarten gaan naar de prullenbak en verdwijnen niet meteen voorgoed.

Weft-bord op een telefoon, kolom Doing: drie taken die een AI-assistent heeft opgepakt, elk gemarkeerd met AI
Assistenten pakken de volgende taak op; elke kaart laat zien wie eraan werkt.
Een afgeronde Weft-taak die door AI is aangemaakt, met de uitkomst die de assistent vastlegde: wat er is opgelost en dat 40 testruns slaagden
Als een assistent klaar is, laat hij bewijs achter: wat hij deed en hoe hij het controleerde.

De 32 tools

Elke tool geeft aan of hij alleen leest, schrijft of iets verwijdert, zodat je client weet wanneer hij het jou eerst moet vragen.

ToolWat hij doetSoort
searchZoeken op trefwoord in taken, sprints, beslissingen en geheugennotities. Geeft tot 50 gerangschikte resultaten {id, title, url} terug, waarvan de ids met soortvoorvoegsel naar fetch gaan.Lezen
fetchHaal de volledige inhoud van één zoekresultaat op — titel, tekstweergave, bron-url en gestructureerde metadata. Neemt de id met voorvoegsel die search teruggaf.Lezen
initialize_boardMaak de standaardkolommen Backlog, Todo, Doing en Done aan op je Weft-bord als er nog geen zijn — de installatie in één aanroep voordat een AI-agent taken beheert. Idempotent.Schrijven
get_board_stateGeef een compacte briefing over het Scrumban-bord van de gebruiker: kolommen, actieve sprint, Doing, taken over de deadline en recent afgeronde taken, ongeveer 30x kleiner dan een volledige momentopname.Lezen
list_columnsToon alle kolommen op het bord, op volgorde — id, naam en positie van elke kolom, zodat een agent precies weet waar een taak heen kan.Lezen
list_tasksGeef de taken van de ingelogde gebruiker terug, optioneel gefilterd op kolom, sprint, project (naam of id), maker (mens of AI) of toegewezene (de uitvoerder).Lezen
create_taskMaak een nieuwe taak aan op het bord van de gebruiker. Komt in de Backlog als er geen kolom is opgegeven. Prioriteit staat standaard op gemiddeld. Gebruik deze als de gebruiker vraagt een taak toe te voegen.Schrijven
bulk_create_tasksMaak tot 1000 taken aan in één atomische aanroep — importeer exports uit Linear/Jira/Notion/Trello of een lijst van 3+ taken, voor maar één aanroep van het AI-quotum.Schrijven
update_taskWijzig velden van een bestaande taak. Alleen de velden die je meegeeft, veranderen; weggelaten velden blijven behouden — met één uitzondering: requiresReview wissen wordt voor een agent geweigerd, en die weigering geldt voor de hele wijziging.Schrijven
move_taskVerplaats een taak naar een andere kolom en positie. Verplaatsen naar een kolom met semantic='doing' start het meten van de doorlooptijd; verplaatsen naar semantic='done' legt het moment van afronden vast.Schrijven
start_taskDe AI roept dit aan op het moment dat hij een taak gaat uitvoeren — de kaart gaat naar Doing, zodat de gebruiker en elke andere gekoppelde client zien dat eraan gewerkt wordt (en hem niet twee keer oppakken). Start het meten van de doorlooptijd; een niet-toegewezen taak wordt geclaimd door de agent die aanroept (een bestaande toegewezene wordt nooit overschreven). Geen kolom-id nodig.Schrijven
report_progressLaat weten dat je nog bezig bent. Een claim op een taak verloopt als de client stil wordt, en dit verlengt hem. Zonder hartslag wordt een langlopende taak als verlaten beschouwd en aan iemand anders aangeboden — met opzet, want een agent die halverwege uitvalt, meldt niets, dus stilte is het enige signaal dat het bord heeft.Schrijven
request_inputVraag de persoon iets wat alleen hij of zij kan beslissen, en wacht zonder de claim op de taak te verliezen. Zit de persoon bij de client, dan verschijnt daar een formulier en komt het antwoord binnen dezelfde aanroep terug — de agent gaat verder in dezelfde context, met dezelfde claim. Is de persoon weg, dan komt de aanroep geparkeerd terug en wacht de vraag in diens wachtrij; het antwoord bereikt de agent bij de volgende start_task of get_my_work. Voor het onomkeerbare en het echt dubbelzinnige, niet voor "mag ik doorgaan?" — elke vraag kost uit hetzelfde aandachtsbudget dat nieuw werk begrenst.Schrijven
submit_answerBrengt terug wat de persoon antwoordde op een vraag die de agent stelde, en geeft het werk terug met dezelfde runId en lease, zodat het verdergaat in dezelfde poging in plaats van koud opnieuw te beginnen. Gemarkeerd als doorgegeven, nooit als iets wat de persoon zelf deed — een antwoord dat een agent overbrengt en een klik van een mens zijn verschillende soorten bewijs, en het bord houdt ze uit elkaar. Is de vraag al in de Weft-app beantwoord, dan komt dat antwoord terug in plaats van een fout: het gaat erom dat de agent met het juiste antwoord verdergaat.Schrijven
get_my_workVraag wat je nu moet doen in plaats van het hele bord te lezen en te gokken. Geeft de taken terug die aan deze client zijn toegewezen, wat er al op de mens wacht, en of er ruimte is in de aandachtswachtrij. Het noemt ook wat over de deadline is en wat binnen de week moet af zijn of begint, zodat een agent van een deadline hoort zonder ernaar te vragen. Is de wachtrij vol, dan is de nuttige zet helpen hem leeg te maken, niet iets nieuws beginnen — en dit zegt dat al voordat er een taak gekozen wordt.Lezen
complete_taskDe AI roept dit aan als het werk echt af is — de kaart gaat naar Done met het moment van afronden vastgelegd, en de optionele uitkomst (wat er gedaan is, waar het resultaat staat) wordt als notitie "Outcome (AI, date)" aan de kaart toegevoegd. Geen kolom-id nodig. Werk dat als jouw review nodig gemarkeerd is, gaat NIET naar Done: het komt in je wachtrij met het bewijs erbij, en als de agent zei wat hij daarna zou doen, keurt accepteren precies die stap goed en geeft hem terug aan de agent. Heeft de taak een verificatieplan, dan voert de server de controles hier meteen uit — de URL ophalen, het citaat zoeken, de hash vergelijken: een executable/state_delta-plan waarvan alle blokkerende controles slagen, wordt door de server geverifieerd afgesloten; een mislukte blokkerende controle houdt de kaart uit Done en laat de agent zien wat de server zag.Schrijven
record_decisionEén tool, twee toepassingen, één register. (1) Geef een oordeel door dat je in het gesprek gaf over afgerond werk dat op jou wacht — goedgekeurd, terugsturen, laten vallen, later — waarmee de kaart uit de reviewwachtrij verdwijnt; de vermelding wordt opgeslagen als doorgegeven, niet als iets wat jij in de app deed, en dat verschil blijft met opzet zichtbaar. (2) Leg een losse beslissing vast die het onthouden waard is — 'Neon gekozen boven Supabase', een geleerde les — als onveranderlijk MADR-lite-record met de afgewogen opties en de voorwaarde waaronder je erop terugkomt. Records worden nooit bewerkt: een nieuwe beslissing met supersedesId vervangt een oude, en de oude blijft leesbaar als wat hij zei op de dag dat hij werd genomen. Deze records zijn wat get_context volgende week aan elke agent teruggeeft.Schrijven
get_contextDe geldende beslissingen en lessen van de workspace, ingepakt binnen een tokenbudget, nieuwste eerst — wat een agent moet lezen voordat hij aan iets niet-triviaals begint. Afgeleid uit vastgelegde beslissingen in plaats van als document geschreven, dus het kan niet verouderen: een vervangen beslissing valt weg zodra de vervanger is vastgelegd, en elke regel draagt zijn datum. Beperk het tot een project of een taak om het smaller te maken; regels die niet in het budget passen, worden geteld en nooit stilletjes verborgen.Lezen
get_task_historyWat er met een taak is gebeurd, niet alleen de huidige velden. Drie modi: 'summary' (standaard, ≤500 tokens — de kaart, het laatste bewijs, aantallen), 'decisions' (elke beslissing die erover is vastgelegd, inclusief oordelen en hun redenen — de reden voor herwerk blijft hier bewaard nadat een latere acceptatie de kaart overschrijft), 'full' (het ruwe logboek, begrensd op 100 gebeurtenissen en dat ook vermeldend). Bestaat omdat een auditlog te breedsprakig is om direct te lezen, en de taakrij altijd alleen het laatste oordeel bevat.Lezen
trash_taskVerplaats een taak naar de prullenbak van je Weft-bord. 30 dagen te herstellen via restore_task, daarna verwijdert een geplande job hem definitief.Verwijdert
restore_taskHaal een taak uit de prullenbak binnen 30 dagen nadat hij erin is gezet. De taak komt volledig intact terug op het bord waar hij stond — zodat een solo-oprichter nooit werk kwijtraakt door per ongeluk te verwijderen.Schrijven
archive_done_tasksMaak de kolom Done leeg: elke taak erin gaat van het bord naar het archief — nog steeds te vinden via search/fetch en nog steeds zichtbaar in de geschiedenis van de sprint, nooit verwijderd. Een sprint afronden archiveert de afgeronde taken van die sprint automatisch; dit regelt de rest. Het pakt de hele kolom in één aanroep, zonder aantal en zonder weg terug vanuit MCP — restore_task herstelt uit de prullenbak, niet uit het archief — en daarom is het als destructief gemarkeerd: een client moet het eerst bij de gebruiker bevestigen voordat hij het aanroept.Verwijdert
list_projectsToon de projecten van het bord — lichte contexten (een startup, een klant, persoonlijk) waar een taak bij kan horen. Gearchiveerde projecten vallen erbuiten, tenzij includeArchived is ingesteld.Lezen
create_projectMaak een projectcontext aan. De naam is uniek per bord; de kleur wordt standaard uit een roterend palet gekozen; url is de website van het project, waarvan het favicon op taakkaarten wordt getoond.Schrijven
update_projectHernoem een project, wijzig de kleur of de website-url, of archiveer het of haal het uit het archief. Gearchiveerde projecten verdwijnen uit keuzelijsten; hun taken houden de koppeling.Schrijven
list_sprintsToon alle sprints (gepland, actief, afgerond, gearchiveerd) van de gebruiker, zodat een solo-oprichter of agent de sprintgeschiedenis en de huidige status kan bekijken zonder de app te openen.Lezen
get_active_sprintGeef de sprint die nu actief is terug, of null als er geen sprint loopt — zodat een solo-oprichter of agent het huidige doel kan controleren zonder de app te openen.Lezen
create_sprintMaak een nieuwe sprint aan met status "planned" op je Weft-bord, klaar om in te plannen met een doel en data. Gebruik apart start_sprint als je klaar bent om te beginnen.Schrijven
start_sprintZet een geplande sprint op actief. Er kan één sprint tegelijk actief zijn, op elk plan — loopt er al een andere sprint, dan mislukt de aanroep en noemt hij die; rond die sprint eerst af en probeer het opnieuw.Schrijven
complete_sprintRond de actieve sprint af. De afgeronde taken worden gearchiveerd in de geschiedenis van de sprint — uit de kolom Done van het bord, nog steeds doorzoekbaar en zichtbaar op de pagina van de sprint. Niet-afgeronde taken blijven op het bord, gekoppeld aan de sprint. Kan niet ongedaan worden gemaakt via MCP — clients moeten bevestigen als de bedoeling onduidelijk is.Verwijdert
add_task_to_sprintWijs een bestaande taak toe aan een sprint, zodat hij in de scope en de burndown van die sprint verschijnt. Idempotent — twee keer aanroepen heeft geen extra effect, dus opnieuw proberen is veilig.Schrijven
remove_task_from_sprintMaak een taak los van zijn huidige sprint zonder hem te verwijderen — de taak blijft op het bord in zijn kolom, alleen niet meer binnen de scope van die sprint of de burndown.Schrijven

Vragen

Wat is een kanban-MCP-server?

Een MCP-server (Model Context Protocol) die een kanbanbord aanbiedt als tools die een AI-assistent kan aanroepen: de kolommen opsommen, kaarten lezen, een kaart aanmaken, hem naar Doing of Done verplaatsen. Die van Weft is gehost, dus je voegt een URL toe in plaats van een proces op je machine te draaien.

Moet ik iets installeren of draaien?

Nee. Voeg https://letsweft.com/api/mcp toe aan je AI-client en log in met OAuth. Clients zonder OAuth gebruiken een persoonlijk toegangstoken uit Instellingen → Toegangstokens.

Is het gratis?

Ja, voor 50 taken en 200 AI-aanroepen per maand. Pro haalt de limieten weg voor $7 per plek per maand, of $60 per plek per jaar.

Werkt het met ChatGPT Free?

Ja. Weft staat in de Plugin directory van ChatGPT en werkt op elk ChatGPT-plan, Free inbegrepen. Een losse MCP-URL toevoegen in ChatGPT is een functie van Business, Enterprise en Edu, maar die heb je voor Weft niet nodig.

Kunnen twee agents één bord delen?

Ja — daar is het bord voor. Elke agent claimt een kaart met start_task voordat hij eraan werkt, zodat ze niet dezelfde kaart oppakken, en elke kaart laat zien of een AI of een mens hem heeft aangemaakt of afgerond.

Wat is het verschil met een lokale kanban-MCP-server?

Opensource kanban-MCP-servers draaien op je eigen machine en bewaren het bord in een lokaal bestand of een lokale database, dus alleen de agents op die machine zien het. Weft is een gedeeld, gehost bord: dezelfde kaarten in ChatGPT, Claude, Cursor, Codex, de webapp en de apps voor iOS en Android, voor jou en je team.

Gerelateerd