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.

MCP-serverens URL
https://letsweft.com/api/mcp

Streamable 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. 1Åbn Plugins i ChatGPTs sidebjælke — eller Settings → Plugins.
  2. 2Søg efter “Weft”, og åbn listningen.
  3. 3Klik på “Connect”, og gennemgå, hvad Weft får adgang til.
  4. 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. 1Åbn Claude Desktop → Settings → Connectors.
  2. 2Klik på “Add custom connector”.
  3. 3Indsæt Weft MCP-URL'en nedenfor, og gem.
  4. 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

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

Kø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:

~/.cursor/mcp.json
{
  "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

~/.codex/config.toml
[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:

.vscode/mcp.json
{
  "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. 1Åbn Windsurf → Settings → Cascade → MCP servers.
  2. 2Klik på “Add server”, og vælg Remote (HTTP).
  3. 3Indsæt Weft MCP-URL'en nedenfor, og gem.
  4. 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

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

Kø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.

Weft-tavle på en telefon, kolonnen Doing: tre opgaver, en AI-assistent har taget, hver markeret AI
Assistenterne tager den næste opgave; hvert kort viser, hvem der arbejder på det.
En færdig Weft-opgave oprettet af AI med det resultat, assistenten registrerede: hvad den rettede, og at 40 testkørsler bestod
Når en assistent er færdig, efterlader den en kvittering: hvad den gjorde, og hvordan den tjekkede det.

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øjHvad det gørType
searchSø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
fetchHenter 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_boardOpretter 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_stateReturnerer 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_columnsViser 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_tasksReturnerer 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_taskOpretter 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_tasksOpretter 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_taskRetter 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_taskFlytter 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_taskAI’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_progressSiger, 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_inputSpø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_answerBringer 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_workSpø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_taskAI’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_contextArbejdsområ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_historyHvad 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_taskFlytter 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_taskGendanner 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_tasksTø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_projectsViser 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_projectOpretter 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_projectOmdø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_sprintsViser 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_sprintReturnerer 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_sprintOpretter 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_sprintSkifter 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_sprintAfslutter 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_sprintTildeler 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_sprintLø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.

Relateret