En kanban-MCP-server til ChatGPT, Claude, Cursor og Codex
Af Andrei Finogeev, grundlægger af Weft ·
Weft er en hostet kanban-tavle — Backlog, Todo, Doing, Done, med valgfrie sprints — og dens MCP-server ligger på https://letsweft.com/api/mcp. Tilføj den URL i din AI-klient, og log ind én gang med OAuth; der er intet at installere eller køre lokalt. Derefter læser assistenten tavlen, opretter og flytter kort, gør krav på et kort, før den arbejder på det, så to agenter aldrig tager det samme, rapporterer fremdrift, spørger dig, når en beslutning er din, og lukker kortet med det, den gjorde. Gratis for 50 opgaver og 200 AI-kald om måneden.
https://letsweft.com/api/mcpStreamable HTTP · OAuth eller et personligt adgangstoken · 32 værktøjer
Tilføj den i din AI-klient
ChatGPT
Åbn Weft i ChatGPT — eller konfigurér den manuelt:
- 1Åbn Plugins i ChatGPTs sidebjælke — eller Settings → Plugins.
- 2Søg efter “Weft”, og åbn listningen.
- 3Klik på “Connect”, og gennemgå, hvad Weft får adgang til.
- 4Log ind med din Weft-konto i den popup, der åbner.
@-nævn pluginet i en hvilken som helst chat: “@Weft hvad er der på min tavle?” — eller vælg Weft i +-menuen. Sprang du opsætningen over, tilbyder ChatGPT at forbinde det direkte i samtalen.
Claude Desktop
- 1Åbn Claude Desktop → Settings → Connectors.
- 2Klik på “Add custom connector”.
- 3Indsæt Weft MCP-URL'en nedenfor, og gem.
- 4Gennemfør OAuth i det browservindue, der åbner.
Start en ny chat, og spørg: “hvad er der på min Weft-tavle?”. Claude henter din tavles tilstand via Weft-connectoren.
Claude Code
claude mcp add --transport http weft https://letsweft.com/api/mcpKør `claude` i et hvilket som helst projekt, og spørg så: “hvad er der på min tavle?”. Et browservindue åbner for at gennemføre OAuth første gang.
Cursor
Føj til Cursor — eller konfigurér den manuelt:
{
"mcpServers": {
"weft": {
"url": "https://letsweft.com/api/mcp"
}
}
}Åbn Cursor → Settings → MCP. Serveren “weft” bør dukke op med en grøn indikator, når du har gennemført OAuth.
Codex CLI
[mcp_servers.weft]
url = "https://letsweft.com/api/mcp"Kør `codex mcp login weft` for at logge ind gennem browseren, start så `codex`, og spørg: “hvad er der på min tavle?”. `/mcp` lister den forbundne server og dens værktøjer.
VS Code
Installér Weft-udvidelsen — eller konfigurér den manuelt:
{
"servers": {
"weft": {
"type": "http",
"url": "https://letsweft.com/api/mcp"
}
}
}Åbn Chat, skift tilstandsvælgeren til Agent, og spørg: “hvad er der på min tavle?”. Et browservindue åbner til OAuth første gang. “MCP: List Servers” bør vise weft som Running.
Windsurf
- 1Åbn Windsurf → Settings → Cascade → MCP servers.
- 2Klik på “Add server”, og vælg Remote (HTTP).
- 3Indsæt Weft MCP-URL'en nedenfor, og gem.
- 4Gennemfør OAuth i det browservindue, der åbner.
Åbn Cascade, og spørg: “hvad er der på min tavle?”. Cascade mærker de svar, der brugte Weft-serveren.
Gemini CLI
gemini extensions install https://github.com/AndreiFinogeev/weft-gemini-extensionKør `gemini`, og spørg: “hvad er der på min weft-tavle?”. En browser åbner til OAuth ved første brug. `gemini extensions list` bør vise “weft”.
Bygget til agenter, ikke kun til dig
Claims, ikke kollisioner
start_task lægger en lease på et kort, før en agent arbejder på det. En anden agent, der beder om arbejde, får et andet kort, og et kort, hvis agent er gået i stå, tilbydes igen, når leasen udløber.
Fremdrift og kvitteringer
report_progress holder kravet i live, mens agenten arbejder; complete_task lukker kortet med det, der blev gjort, det, der ikke blev, og links, du kan tjekke.
Spørgsmål venter på dig
request_input lægger et spørgsmål med valgmuligheder i din Inbox — på nettet og på din telefon — i stedet for at lade agenten gætte på noget, kun du kan beslutte.
Din opmærksomhed sætter tempoet
Når for meget færdigt arbejde venter på din gennemgang, holder agenterne op med at starte nye kort. Det er kanbans grænse for igangværende arbejde, anvendt på dig.
Du bestemmer, hvad hver AI må
Giv hver forbundet assistent fuld adgang, skriveadgang eller kun læseadgang, og afbryd forbindelsen med ét klik. Slettede kort havner i papirkurven, ikke direkte ud af verden.


De 32 værktøjer
Hvert værktøj angiver, om det kun læser, skriver eller fjerner noget, så din klient ved, hvornår den skal spørge dig først.
| Værktøj | Hvad det gør | Type |
|---|---|---|
| search | Søgning på nøgleord på tværs af opgaver, sprints, beslutninger og hukommelsesnoter. Returnerer op til 50 rangerede {id, title, url}-resultater, hvis id’er med typepræfiks kan sendes videre til fetch. | Læser |
| fetch | Henter det fulde indhold af ét søgeresultat — titel, tekstgengivelse, kilde-url og strukturerede metadata. Tager det id med præfiks, som search returnerede. | Læser |
| initialize_board | Opretter standardkolonnerne Backlog, Todo, Doing og Done på din Weft-tavle, hvis der ikke er nogen — opsætningen i ét kald, før en AI-agent styrer opgaver. Idempotent. | Skriver |
| get_board_state | Returnerer en kompakt briefing om brugerens Scrumban-tavle: kolonner, aktiv sprint, Doing, forsinkede opgaver og nyligt lukkede, cirka 30 gange mindre end et fuldt øjebliksbillede. | Læser |
| list_columns | Viser alle kolonner på tavlen i rækkefølge — id, navn og position for hver, så en agent ved præcis, hvor en opgave kan flyttes hen. | Læser |
| list_tasks | Returnerer den godkendte brugers opgaver, eventuelt filtreret efter kolonne, sprint, projekt (navn eller id), opretter (menneske eller AI) eller ansvarlig (den udførende). | Læser |
| create_task | Opretter en ny opgave på brugerens tavle. Havner i Backlog, hvis ingen kolonne er angivet. Prioritet er medium som standard. Bruges, når brugeren beder om at tilføje en opgave. | Skriver |
| bulk_create_tasks | Opretter op til 1000 opgaver i ét atomisk kald — importér eksporter fra Linear/Jira/Notion/Trello eller en hvilken som helst liste med 3+ opgaver, og brug kun ét AI-kald af kvoten. | Skriver |
| update_task | Retter felter på en eksisterende opgave. Kun de felter, du sender, ændres; udeladte felter bevares — med én undtagelse: at fjerne requiresReview afvises for en agent, og afvisningen tager hele rettelsen med sig. | Skriver |
| move_task | Flytter en opgave til en anden kolonne og position. Flytning til en kolonne med semantic='doing' starter måling af cyklustid; flytning til semantic='done' registrerer tidspunktet for afslutning. | Skriver |
| start_task | AI’en kalder dette i det øjeblik, den begynder at udføre en opgave — kortet flyttes til Doing, så brugeren og alle andre forbundne klienter ser det i gang (og ikke tager det to gange). Starter måling af cyklustid; en opgave uden ansvarlig tilfalder den kaldende agent (en eksisterende ansvarlig overskrives aldrig). Intet kolonne-id nødvendigt. | Skriver |
| report_progress | Siger, at du stadig arbejder. Et krav på en opgave udløber, hvis klienten bliver tavs, og dette fornyer det. Uden et hjerteslag betragtes en langvarig opgave som opgivet og tilbydes en anden — med vilje, for en agent, der dør midt i kørslen, rapporterer ingenting, så tavshed er det eneste signal, tavlen har. | Skriver |
| request_input | Spørger personen om noget, kun vedkommende kan beslutte, og venter uden at miste kravet på opgaven. Sidder personen ved sin klient, vises en formular der, og svaret kommer tilbage i det samme kald — agenten fortsætter i den samme kontekst med det samme krav. Er personen væk, returnerer kaldet parkeret, og spørgsmålet venter i personens kø; svaret når agenten ved dens næste start_task eller get_my_work. Til det uigenkaldelige og det reelt tvetydige, ikke til "må jeg fortsætte?" — hvert spørgsmål bruger af det samme opmærksomhedsbudget, som begrænser nyt arbejde. | Skriver |
| submit_answer | Bringer det tilbage, personen svarede på et spørgsmål, agenten stillede, og giver arbejdet tilbage med det samme runId og den samme lease, så det fortsætter i det samme forsøg i stedet for at starte forfra. Markeres som videreformidlet, aldrig som personens egen handling — et svar båret af en agent og et klik foretaget af et menneske er forskellige slags beviser, og tavlen holder dem adskilt. Er spørgsmålet allerede besvaret i Weft-appen, returneres det svar i stedet for en fejl: det vigtige er, at agenten fortsætter med det rigtige. | Skriver |
| get_my_work | Spørg, hvad du skal gøre nu, i stedet for at læse hele tavlen og gætte. Returnerer de opgaver, der er tildelt denne klient, hvad der allerede venter på mennesket, og om opmærksomhedskøen har plads. Den nævner også, hvad der er forsinket, og hvad der forfalder eller starter inden for ugen, så en agent hører om en frist uden at spørge. Når køen er fuld, er det nyttige træk at hjælpe med at tømme den, ikke at starte noget nyt — og det siger den, før en opgave vælges. | Læser |
| complete_task | AI’en kalder dette, når arbejdet faktisk er færdigt — kortet flyttes til Done med tidspunktet for afslutning registreret, og det valgfrie resultat (hvad der blev gjort, hvor resultatet ligger) tilføjes kortet som en note "Outcome (AI, date)". Intet kolonne-id nødvendigt. Arbejde markeret som krævende dig flyttes IKKE til Done: det går til din kø med kvitteringen vedhæftet, og hvis agenten sagde, hvad den ville gøre bagefter, godkender en accept præcis det trin og giver det tilbage til agenten. Har opgaven en verifikationsplan, udfører serveren dens tjek lige her — henter URL’en, leder efter citatet, sammenligner hashen: en executable/state_delta-plan, hvis blokerende tjek alle består, lukkes verificeret af serveren; et blokerende tjek, der fejler, holder kortet ude af Done og viser agenten, hvad serveren observerede. | Skriver |
| record_decision | Ét værktøj, to formål, én officiel tabel. (1) Videreformidl en afgørelse, du gav i samtalen om færdigt arbejde, der venter på dig — godkendt, send det tilbage, drop det, senere — så kortet fjernes fra gennemgangskøen; posten gemmes som videreformidlet og ikke som din egen handling i appen, og den forskel holdes synlig med vilje. (2) Registrér en selvstændig beslutning, der er værd at huske — 'valgte Neon frem for Supabase', en lærdom — som en uforanderlig MADR-lite-post med de afvejede muligheder og betingelsen for at tage den op igen. Poster redigeres aldrig: en ny beslutning med supersedesId erstatter en gammel, og den gamle kan stadig læses som det, den sagde den dag, den blev truffet. Disse poster er det, get_context leverer tilbage til alle agenter i næste uge. | Skriver |
| get_context | Arbejdsområdets gældende beslutninger og lærdomme, pakket til et token-budget, nyeste først — det, en agent bør læse, før den starter på noget ikke-trivielt. Udledt af registrerede beslutninger i stedet for skrevet som et dokument, så det kan ikke forælde: en erstattet beslutning falder ud, i det øjeblik dens afløser registreres, og hver linje har sin dato. Afgræns det til et projekt eller en opgave for at indsnævre det; linjer, der ikke passer ind i budgettet, tælles, men skjules aldrig i stilhed. | Læser |
| get_task_history | Hvad der skete med en opgave, ikke kun dens nuværende felter. Tre tilstande: 'summary' (standard, ≤500 tokens — kortet, dets seneste kvittering, antal), 'decisions' (alle beslutninger registreret om den, inklusive afgørelser og deres begrundelser — begrundelsen for en omarbejdning overlever her, efter at en senere accept har overskrevet kortet), 'full' (den rå journal, begrænset til 100 hændelser, og det siges). Findes, fordi en revisionslog er for snakkesalig at læse direkte, og opgaverækken kun rummer den seneste afgørelse. | Læser |
| trash_task | Flytter en opgave til papirkurven på din Weft-tavle. Kan gendannes i 30 dage via restore_task, hvorefter et planlagt job sletter den permanent. | Fjerner |
| restore_task | Gendanner en opgave fra papirkurven inden for 30 dage efter, at den blev smidt ud. Opgaven vender tilbage til tavlen, hvor den var, helt intakt — så en solo-founder aldrig mister arbejde ved en utilsigtet sletning. | Skriver |
| archive_done_tasks | Tømmer Done-kolonnen: hver opgave i den forlader tavlen og havner i arkivet — kan stadig findes med search/fetch og vises stadig i sin sprints historik, slettes aldrig. At afslutte en sprint arkiverer automatisk sprintens færdige opgaver; dette klarer resten. Det tager hele kolonnen i ét kald, uden antal og uden vej tilbage fra MCP-fladen — restore_task gendanner fra papirkurven, ikke fra arkivet — og derfor er det markeret som destruktivt: en klient bør bekræfte med brugeren, før den kalder det. | Fjerner |
| list_projects | Viser tavlens projekter — lette kontekster (en startup, en kunde, privat), som en opgave kan høre til. Udelader arkiverede projekter, medmindre includeArchived er sat. | Læser |
| create_project | Opretter en projektkontekst. Navnet er unikt pr. tavle; farven vælges som standard fra en roterende palet; url er projektets website, hvis favicon vises på opgavekortene. | Skriver |
| update_project | Omdøber et projekt, ændrer dets farve eller website-url eller arkiverer/genopretter det. Arkiverede projekter forsvinder fra vælgerne; deres opgaver beholder tilknytningen. | Skriver |
| list_sprints | Viser alle brugerens sprints (planlagte, aktive, afsluttede, arkiverede), så en solo-founder eller agent kan gennemgå sprinthistorik og aktuel status uden at åbne appen. | Læser |
| get_active_sprint | Returnerer den aktive sprint eller null, hvis ingen sprint kører — så en solo-founder eller agent kan tjekke det aktuelle mål uden at åbne appen. | Læser |
| create_sprint | Opretter en ny sprint med status "planned" på din Weft-tavle, klar til at blive planlagt med et mål og datoer. Brug start_sprint separat, når I er klar til at begynde. | Skriver |
| start_sprint | Skifter en planlagt sprint til aktiv status. Én sprint kan være aktiv ad gangen, på alle abonnementer — kører en anden sprint, fejler kaldet og nævner den; afslut den sprint først, og prøv så igen. | Skriver |
| complete_sprint | Afslutter den aktive sprint. Dens færdige opgaver arkiveres i sprintens historik — væk fra tavlens Done-kolonne, men stadig søgbare og vist på sprintens side. Ufærdige opgaver bliver på tavlen, knyttet til sprinten. Kan ikke fortrydes via MCP — klienter bør bekræfte, når hensigten er uklar. | Fjerner |
| add_task_to_sprint | Tildeler en eksisterende opgave til en sprint, så den vises i sprintens omfang og burndown. Idempotent — at kalde to gange har ingen ekstra effekt, så det er sikkert at prøve igen. | Skriver |
| remove_task_from_sprint | Løsriver en opgave fra dens nuværende sprint uden at slette den — opgaven bliver på tavlen i sin kolonne, den hører bare ikke længere til den sprint eller dens burndown. | Skriver |
Spørgsmål
Hvad er en kanban-MCP-server?
En MCP-server (Model Context Protocol), der stiller en kanban-tavle til rådighed som værktøjer, en AI-assistent kan kalde: vise kolonnerne, læse kort, oprette et kort, flytte det til Doing eller Done. Wefts er hostet, så du tilføjer en URL i stedet for at køre en proces på din maskine.
Skal jeg installere eller køre noget?
Nej. Tilføj https://letsweft.com/api/mcp i din AI-klient, og log ind med OAuth. Klienter uden OAuth bruger et personligt adgangstoken fra Indstillinger → Adgangstokens.
Er det gratis?
Ja, for 50 opgaver og 200 AI-kald om måneden. Pro fjerner grænserne for $7 pr. plads om måneden eller $60 pr. plads om året.
Virker det med ChatGPT Free?
Ja. Weft findes i ChatGPTs Plugin directory og virker på alle ChatGPT-abonnementer, også Free. At tilføje en rå MCP-URL i ChatGPT er en funktion i Business, Enterprise og Edu, men det har du ikke brug for til Weft.
Kan to agenter dele én tavle?
Ja — det er det, tavlen er til. Hver agent gør krav på et kort med start_task, før den arbejder på det, så de ikke tager det samme kort, og hvert kort viser, om en AI eller et menneske oprettede eller afsluttede det.
Hvordan adskiller det sig fra en lokal kanban-MCP-server?
Open source-kanban-MCP-servere kører på din maskine og gemmer tavlen i en lokal fil eller database, så kun agenterne på den maskine ser den. Weft er en delt, hostet tavle: de samme kort i ChatGPT, Claude, Cursor, Codex, webappen og apps til iOS og Android, for dig og dit team.