En kanban-MCP-server för ChatGPT, Claude, Cursor och Codex
Av Andrei Finogeev, grundare av Weft ·
Weft är en molnbaserad kanbantavla — Backlog, Todo, Doing, Done, med valfria sprintar — och dess MCP-server finns på https://letsweft.com/api/mcp. Lägg till den adressen i din AI-klient och logga in en gång med OAuth; inget att installera eller köra lokalt. Därefter läser assistenten tavlan, skapar och flyttar kort, gör anspråk på ett kort innan den arbetar med det så att två agenter aldrig tar samma, rapporterar framsteg, frågar dig när ett beslut är ditt och stänger kortet med vad den gjorde. Gratis för 50 uppgifter och 200 AI-anrop i månaden.
https://letsweft.com/api/mcpStreamable HTTP · OAuth, eller en personlig åtkomsttoken · 32 verktyg
Lägg till den i din AI-klient
ChatGPT
Öppna Weft i ChatGPT — eller konfigurera den manuellt:
- 1Öppna Plugins i ChatGPT:s sidofält — eller Settings → Plugins.
- 2Sök efter ”Weft” och öppna listningen.
- 3Klicka på ”Connect” och gå igenom vad Weft får åtkomst till.
- 4Logga in med ditt Weft-konto i fönstret som öppnas.
Nämn pluginet med @ i valfri chatt: ”@Weft vad ligger på min tavla?” — eller välj Weft i +-menyn. Hoppade du över uppsättningen erbjuder ChatGPT att koppla in det på plats.
Claude Desktop
- 1Öppna Claude Desktop → Settings → Connectors.
- 2Klicka på ”Add custom connector”.
- 3Klistra in Wefts MCP-URL nedan och spara.
- 4Slutför OAuth i webbläsarfönstret som öppnas.
Starta en ny chatt och fråga: ”vad ligger på min Weft-tavla?”. Claude hämtar tavlans läge via Weft-kopplingen.
Claude Code
claude mcp add --transport http weft https://letsweft.com/api/mcpKör `claude` i ett valfritt projekt och fråga: ”vad ligger på min tavla?”. Första gången öppnas ett webbläsarfönster för OAuth.
Cursor
Lägg till i Cursor — eller konfigurera den manuellt:
{
"mcpServers": {
"weft": {
"url": "https://letsweft.com/api/mcp"
}
}
}Öppna Cursor → Settings → MCP. Servern ”weft” ska dyka upp med en grön indikator när du slutfört OAuth.
Codex CLI
[mcp_servers.weft]
url = "https://letsweft.com/api/mcp"Kör `codex mcp login weft` och logga in i webbläsaren, starta sedan `codex` och fråga: ”vad ligger på min tavla?”. `/mcp` listar den anslutna servern och dess verktyg.
VS Code
Installera Weft-tillägget — eller konfigurera den manuellt:
{
"servers": {
"weft": {
"type": "http",
"url": "https://letsweft.com/api/mcp"
}
}
}Öppna chatten, ställ lägesväljaren på Agent och fråga: ”vad står på min tavla?”. Första gången öppnas ett webbläsarfönster för OAuth. «MCP: List Servers» ska visa weft som Running.
Windsurf
- 1Öppna Windsurf → Settings → Cascade → MCP servers.
- 2Klicka på ”Add server” och välj Remote (HTTP).
- 3Klistra in Wefts MCP-URL nedan och spara.
- 4Slutför OAuth i webbläsarfönstret som öppnas.
Öppna Cascade och fråga: ”vad ligger på min tavla?”. Cascade märker de svar som använt Weft-servern.
Gemini CLI
gemini extensions install https://github.com/AndreiFinogeev/weft-gemini-extensionKör `gemini` och fråga: ”vad ligger på min weft-tavla?”. En webbläsare öppnas för OAuth första gången. `gemini extensions list` ska visa ”weft”.
Byggd för agenter, inte bara för dig
Anspråk, inte krockar
start_task lägger ett lån på ett kort innan en agent arbetar med det. En andra agent som ber om arbete får ett annat kort, och ett kort vars agent har tystnat erbjuds igen när lånet går ut.
Framsteg och kvitton
report_progress håller anspråket vid liv medan agenten arbetar; complete_task stänger kortet med vad som gjordes, vad som inte gjordes och länkar du kan kontrollera.
Frågor väntar på dig
request_input lägger en fråga med alternativ i din Inkorg — på webben och i telefonen — i stället för att låta agenten gissa om något som bara du kan avgöra.
Din uppmärksamhet sätter takten
När för mycket färdigt arbete väntar på din granskning slutar agenterna påbörja nya kort. Det är kanbans gräns för pågående arbete, tillämpad på dig.
Du bestämmer vad varje AI får göra
Ge varje ansluten assistent full åtkomst, skrivåtkomst eller endast läsåtkomst, och koppla bort den med ett klick. Raderade kort hamnar i papperskorgen, de försvinner inte direkt.


De 32 verktygen
Varje verktyg anger om det bara läser, skriver eller tar bort något, så att din klient vet när den ska fråga dig först.
| Verktyg | Vad det gör | Typ |
|---|---|---|
| search | Sökning på nyckelord i uppgifter, sprintar, beslut och minnesanteckningar. Returnerar upp till 50 rangordnade resultat {id, title, url} vars id:n med typprefix går vidare till fetch. | Läser |
| fetch | Hämta hela innehållet i ett enskilt sökresultat — titel, textrepresentation, källadress och strukturerad metadata. Tar det id med prefix som search returnerade. | Läser |
| initialize_board | Skapa standardkolumnerna Backlog, Todo, Doing och Done på din Weft-tavla om inga finns — konfigurationen i ett anrop innan en AI-agent hanterar uppgifter. Idempotent. | Skriver |
| get_board_state | Returnera en kompakt lägesbild av användarens Scrumban-tavla: kolumner, aktiv sprint, Doing, försenade uppgifter och nyligen stängda, ungefär 30 gånger mindre än en fullständig ögonblicksbild. | Läser |
| list_columns | Lista alla kolumner på tavlan, i ordning — id, namn och position för var och en, så att en agent vet exakt vart en uppgift kan flyttas. | Läser |
| list_tasks | Returnera uppgifter för den inloggade användaren, valfritt filtrerade på kolumn, sprint, projekt (namn eller id), skapare (människa eller AI) eller tilldelad (den som utför). | Läser |
| create_task | Skapa en ny uppgift på användarens tavla. Hamnar i Backlog om ingen kolumn anges. Prioriteten är medel som standard. Används när användaren ber om att lägga till en uppgift. | Skriver |
| bulk_create_tasks | Skapa upp till 1000 uppgifter i ett atomärt anrop — importera exporter från Linear/Jira/Notion/Trello eller valfri lista med 3+ uppgifter, och använd bara ett AI-anrop av kvoten. | Skriver |
| update_task | Ändra fält i en befintlig uppgift. Bara fälten du skickar ändras; utelämnade fält behålls — med ett undantag: att rensa requiresReview vägras för en agent, och vägran gäller då hela ändringen. | Skriver |
| move_task | Flytta en uppgift till en annan kolumn och position. En flytt till en kolumn med semantic='doing' startar mätningen av cykeltid; en flytt till semantic='done' registrerar tidpunkten för slutförandet. | Skriver |
| start_task | AI:n anropar detta i samma stund som den börjar utföra en uppgift — kortet flyttas till Doing så att användaren och alla andra anslutna klienter ser att den pågår (och inte tar den två gånger). Startar mätningen av cykeltid; en otilldelad uppgift tas av den anropande agenten (en befintlig tilldelning skrivs aldrig över). Inget kolumn-id behövs. | Skriver |
| report_progress | Säg att du fortfarande arbetar. Ett anspråk på en uppgift går ut om klienten tystnar, och detta förnyar det. Utan livstecken behandlas en långvarig uppgift som övergiven och erbjuds någon annan — med avsikt, eftersom en agent som dör mitt i en körning inte rapporterar något, så tystnad är den enda signal tavlan har. | Skriver |
| request_input | Fråga personen något som bara den kan avgöra, och vänta utan att förlora anspråket på uppgiften. Om personen sitter vid sin klient visas ett formulär där och svaret kommer tillbaka i samma anrop — agenten fortsätter i samma kontext, med samma anspråk. Om personen är borta returnerar anropet parked och frågan väntar i personens kö; svaret når agenten vid dess nästa start_task eller get_my_work. För det oåterkalleliga och det genuint tvetydiga, inte för "får jag fortsätta?" — varje fråga förbrukar samma uppmärksamhetsbudget som begränsar nytt arbete. | Skriver |
| submit_answer | Tar tillbaka vad personen svarade på en fråga som agenten ställde, och lämnar tillbaka arbetet med samma runId och lån, så att det fortsätter i samma försök i stället för att börja ett nytt från noll. Markeras som vidarebefordrat, aldrig som att personen själv agerat — ett svar som en agent bär fram och ett klick som en människa gör är olika sorters bevis, och tavlan håller isär dem. Om frågan redan besvarats i Weft-appen returneras det svaret i stället för ett fel: det viktiga är att agenten fortsätter med rätt svar. | Skriver |
| get_my_work | Fråga vad du ska göra härnäst i stället för att läsa hela tavlan och gissa. Returnerar uppgifterna som är tilldelade den här klienten, vad som redan väntar på människan och om uppmärksamhetskön har plats. Den nämner också vad som är försenat och vad som förfaller eller startar inom veckan, så att en agent får höra om en deadline utan att fråga. När kön är full är det nyttiga draget att hjälpa till att beta av den, inte att börja på något nytt — och det här säger det innan en uppgift väljs. | Läser |
| complete_task | AI:n anropar detta när arbetet faktiskt är klart — kortet flyttas till Done med tidpunkten för slutförandet registrerad, och det valfria resultatet (vad som gjordes, var resultatet finns) läggs till på kortet som en anteckning "Outcome (AI, date)". Inget kolumn-id behövs. Arbete som är markerat som att det behöver dig flyttas INTE till Done: det går till din kö med kvittot bifogat, och om agenten sa vad den skulle göra härnäst godkänner ett godkännande exakt det steget och lämnar tillbaka det till agenten. Om uppgiften har en verifieringsplan kör servern dess kontroller just här — hämtar adressen, letar efter citatet, jämför hashen: en plan av typen executable/state_delta vars blockerande kontroller alla går igenom stängs som verifierad av servern; en blockerande kontroll som misslyckas håller kortet borta från Done och visar agenten vad servern observerade. | Skriver |
| record_decision | Ett verktyg, två användningar, en registertabell. (1) Vidarebefordra ett utlåtande som du gav i konversationen om färdigt arbete som väntar på dig — godkänt, skicka tillbaka, släpp det, senare — vilket tar bort kortet från granskningskön; posten sparas som vidarebefordrad snarare än som att du agerat i appen, och den skillnaden hålls synlig med avsikt. (2) Registrera ett fristående beslut värt att minnas — 'valde Neon framför Supabase', en lärdom — som en oföränderlig MADR-lite-post med de vägda alternativen och villkoret för när det ska omprövas. Poster redigeras aldrig: ett nytt beslut med supersedesId ersätter ett gammalt, och det gamla förblir läsbart som det det sa den dag det fattades. Dessa poster är vad get_context lämnar tillbaka till varje agent nästa vecka. | Skriver |
| get_context | Arbetsytans gällande beslut och lärdomar, packade till en tokenbudget, nyast först — vad en agent bör läsa innan den börjar med något som inte är trivialt. Härleds från registrerade beslut i stället för att skrivas som ett dokument, så det kan inte ruttna: ett ersatt beslut faller bort i samma stund som ersättaren registreras, och varje rad har sitt datum. Avgränsa till ett projekt eller en uppgift för att snäva in det; rader som inte ryms i budgeten räknas, de döljs aldrig i tysthet. | Läser |
| get_task_history | Vad som hänt med en uppgift, inte bara dess nuvarande fält. Tre lägen: 'summary' (standard, ≤500 tokens — kortet, dess senaste kvitto, antal), 'decisions' (varje beslut som registrerats om den, inklusive utlåtanden och deras skäl — skälet till en omarbetning finns kvar här även efter att ett senare godkännande skrivit över kortet), 'full' (den råa journalen, begränsad till 100 händelser och säger det). Finns eftersom en granskningslogg är för pratig för att läsas direkt, och uppgiftsraden bara någonsin har det senaste utlåtandet. | Läser |
| trash_task | Flytta en uppgift till papperskorgen på din Weft-tavla. Kan återställas i 30 dagar via restore_task, därefter raderar ett schemalagt jobb den permanent. | Tar bort |
| restore_task | Återställ en uppgift från papperskorgen inom 30 dagar efter att den slängts. Uppgiften kommer tillbaka till tavlan där den var, helt intakt — så att en soloföretagare aldrig förlorar arbete på grund av en oavsiktlig radering. | Skriver |
| archive_done_tasks | Töm kolumnen Done: varje uppgift i den lämnar tavlan och hamnar i arkivet — hittas fortfarande av search/fetch och visas fortfarande i sin sprints historik, raderas aldrig. När en sprint avslutas arkiveras sprintens färdiga uppgifter automatiskt; det här tar hand om resten. Det tar hela kolumnen i ett anrop, utan antal och utan väg tillbaka från MCP-ytan — restore_task återställer från papperskorgen, inte från arkivet — och därför är det markerat som destruktivt: en klient bör bekräfta med användaren innan den anropar det. | Tar bort |
| list_projects | Lista tavlans projekt — lätta sammanhang (en startup, en kund, privat) som en uppgift kan höra till. Utesluter arkiverade projekt om inte includeArchived anges. | Läser |
| create_project | Skapa ett projektsammanhang. Namnet är unikt per tavla; färgen väljs som standard ur en roterande palett; url är projektets webbplats, vars favicon visas på uppgiftskorten. | Skriver |
| update_project | Byt namn på ett projekt, ändra dess färg eller webbplatsadress, eller arkivera/avarkivera det. Arkiverade projekt försvinner från väljare; deras uppgifter behåller kopplingen. | Skriver |
| list_sprints | Lista alla sprintar (planerade, aktiva, avslutade, arkiverade) för användaren, så att en soloföretagare eller agent kan gå igenom sprinthistoriken och aktuell status utan att öppna appen. | Läser |
| get_active_sprint | Returnera den aktiva sprinten, eller null om ingen sprint pågår — så att en soloföretagare eller agent kan kontrollera det aktuella målet utan att öppna appen. | Läser |
| create_sprint | Skapa en ny sprint med statusen "planned" på din Weft-tavla, redo att schemaläggas med ett mål och datum. Använd start_sprint separat när det är dags att börja arbeta. | Skriver |
| start_sprint | Ändra en planerad sprint till aktiv status. En sprint i taget kan vara aktiv, på alla planer — om en annan sprint pågår misslyckas anropet och nämner den; avsluta den sprinten först och försök sedan igen. | Skriver |
| complete_sprint | Avsluta den aktiva sprinten. Dess färdiga uppgifter arkiveras i sprintens historik — bort från tavlans kolumn Done, fortfarande sökbara och visade på sprintens sida. Ofärdiga uppgifter blir kvar på tavlan, kopplade till sprinten. Kan inte ångras via MCP — klienter bör bekräfta när avsikten är oklar. | Tar bort |
| add_task_to_sprint | Koppla en befintlig uppgift till en sprint så att den syns i sprintens omfattning och burndown. Idempotent — att anropa två gånger har ingen extra effekt, så det är säkert att försöka igen. | Skriver |
| remove_task_from_sprint | Koppla loss en uppgift från dess nuvarande sprint utan att radera den — uppgiften blir kvar på tavlan i sin kolumn, bara inte längre inom den sprinten eller dess burndown. | Skriver |
Frågor
Vad är en kanban-MCP-server?
En MCP-server (Model Context Protocol) som exponerar en kanbantavla som verktyg som en AI-assistent kan anropa: lista kolumnerna, läsa kort, skapa ett kort, flytta det till Doing eller Done. Wefts är molnbaserad, så du lägger till en adress i stället för att köra en process på din dator.
Behöver jag installera eller köra något?
Nej. Lägg till https://letsweft.com/api/mcp i din AI-klient och logga in med OAuth. Klienter utan OAuth använder en personlig åtkomsttoken från Inställningar → Åtkomsttokens.
Är det gratis?
Ja, för 50 uppgifter och 200 AI-anrop i månaden. Pro tar bort gränserna för $7 per plats och månad, eller $60 per plats och år.
Fungerar det med ChatGPT Free?
Ja. Weft finns i ChatGPT:s Plugin directory och fungerar på alla ChatGPT-planer, även Free. Att lägga till en rå MCP-adress i ChatGPT är en funktion för Business, Enterprise och Edu, men du behöver den inte för Weft.
Kan två agenter dela en tavla?
Ja — det är det tavlan är till för. Varje agent gör anspråk på ett kort med start_task innan den arbetar med det, så att de inte tar samma kort, och varje kort visar om en AI eller en människa skapade eller avslutade det.
Hur skiljer sig detta från en lokal kanban-MCP-server?
MCP-servrar för kanban med öppen källkod körs på din dator och sparar tavlan i en lokal fil eller databas, så bara agenterna på den datorn ser den. Weft är en delad, molnbaserad tavla: samma kort i ChatGPT, Claude, Cursor, Codex, webbappen och apparna för iOS och Android, för dig och ditt team.