Todocko MCP Server
Todocko MCP Server
English version below / Jump to English
MCP (Model Context Protocol) server pro práci s daty Todocko aplikace z AI asistentů.
Podpora
Claude Desktop - plná podpora
Claude Code (CLI) - plná podpora (stejná konfigurace)
Požadavky
Node.js 24.20+ — Evolu v8 to má v
engines, a není to formalita: v8 stojí nanavigator.locks,MessageChannel,BroadcastChannelaWebSocket, které má Node nativně teprve od 24Todocko účet s daty synchronizovanými přes Evolu
Evolu v8 (TODO-88)
MCP běží na @evolu/common 8.9.0 a @evolu/nodejs 3.2.0.
v7 dodával createDbWorkerForPlatform, což bylo vše, co headless klient v Node
potřeboval. v8 to zrušil: @evolu/nodejs v3 nabízí relay a pár primitiv, a
jedinou kompletní klientskou platformu má upstream pro web. src/evoluPlatform.ts
je protějšek pro Node, poskládaný ze stejných dílů.
Vyšel krátce, protože Node 24 má potřebná web API nativně. Oba workery běží
in-process přes createWorker / createSharedWorker — to jsou vlastní
fallbacky Evolu „pro platformy bez podpory workerů"; worker_threads by přinesly
izolaci, kterou jednoprocesový CLI nepotřebuje.
Pět věcí, na kterých se to dá snadno rozbít:
installPolyfills()je povinné a musí proběhnout dřív než cokoli z@evolu/common. v8 voláMap.prototype.getOrInsert(Computed), které nemá žádný vydaný Node (ověřeno do 25.9.0). Bez toho to spadne na první zprávě.Databáze patří jednomu mnemonicu. v7 při neshodě volal
restoreAppOwner, který lokální databázi resetoval. v8 obnovu nemá, takže by v souboru zůstala data starého ownera zašifrovaná klíčem, který nový nemá. Server proto neshodu ohlásí a odmítne nastartovat — smaž~/.todocko/todocko.dba nech ho stáhnout data znovu.createNodeEvoluDeps()musí být singleton na proces. Shared worker drží jedinýtabLeaderPortStoreainitDbWorkerkaždého tenanta předpokládá, že je už naplněný. Druhá sada deps znamená druhý shared worker, kterému nikdo leadera neohlásil, a vytvoření sdílené instance spadne nainitDbWorker: Expected value to be non-nullable. Jeden worker obslouží obě instance jako dva tenanty podleappName, stejně jako@evolu/webna jedné stránce.Mutace nevrací
Result. v7 vracel zinsert/updateResult, takže se testovaloresult.oka čtloresult.value.id. v8 vrací přímo{ id }a při neplatné změně vyhodí výjimku. Kontrola!result.okproto uspěla vždy a nástroj ohlásil chybu u zápisu, který právě proběhl. U vkládání je to horší, protože uživatel to zkusí znovu a vznikne duplicita. Hlídá tosrc/tools/pure.test.ts.Ownera filtrovat v SQL, ne až v JS. Sdílená instance drží data všech ownerů v jedné tabulce.
limitprovede SQLite dřív, než se v JS cokoli filtruje, takže nezúžený dotaz vrátí prvních N řádků přes všechny ownery a filtr je pak zahodí. Nástroj hlásil nula úkolů u projektu, který jich má 26. Stejná past číhá uorderBy position desc limit 1při výpočtu další pozice.
Instalace
1. Stažení
Pomocí git:
git clone https://github.com/brnt-cz/todocko-mcp.git
cd todocko-mcpNebo stáhněte ZIP z Releases a rozbalte.
2. Spuštění instalátoru
Linux/macOS:
chmod +x install.sh
./install.shWindows (PowerShell):
.\install.ps1Instalátor:
Nainstaluje závislosti a sestaví projekt
Zeptá se, zda chcete nakonfigurovat Claude Desktop, Claude Code nebo obojí
Vytvoří konfigurační soubor s placeholderem
Ručně doplňte svou 24slovnou zálohovací frázi do konfiguračního souboru
Restartujte Claude
Manuální instalace
Nainstalujte závislosti:
npm install npm run buildPřidejte do konfigurace:
Claude Desktop (~/.config/Claude/claude_desktop_config.json na Linuxu nebo ~/Library/Application Support/Claude/claude_desktop_config.json na macOS):
{
"mcpServers": {
"todocko": {
"command": "node",
"args": ["/cesta/k/mcp-server/dist/index.js"],
"env": {
"TODOCKO_MNEMONIC": "vaše 24slovná zálohovací fráze"
}
}
}
}Claude Code (CLI) - přidejte do ~/.claude/settings.json:
{
"mcpServers": {
"todocko": {
"command": "node",
"args": ["/cesta/k/mcp-server/dist/index.js"],
"env": {
"TODOCKO_MNEMONIC": "vaše 24slovná zálohovací fráze"
}
}
}
}Restartujte Claude Desktop / Claude Code
Dostupné nástroje (152)
Projekty
Nástroj | Popis |
| Seznam všech projektů |
| Detail projektu podle ID nebo kódu |
| Vytvoření nového projektu |
| Aktualizace projektu (name, code, color, isArchived, autoApproveMembers, isHiddenFromFilters) |
| Smazání projektu (soft delete) |
Úkoly
Nástroj | Popis |
| Seznam úkolů s filtry (projekt, status, priorita, assignee) |
| Detail úkolu podle ID nebo kódu (např. |
| Vytvoření nového úkolu (včetně recurrence, sprintNumber, parentTaskId) |
| Aktualizace existujícího úkolu (včetně recurrence, sprintNumber, parentTaskId) |
| Vyhledávání úkolů podle textu |
| Hromadná aktualizace více úkolů (včetně sprintNumber) |
| Hromadné smazání více úkolů |
| Smazání jednoho úkolu (soft delete, kaskáda na worklogy a přílohy) |
| Git aktivita pro úkol (commits, PR) z relay serveru |
Uživatelé
Nástroj | Popis |
| Seznam všech uživatelů |
| Detail uživatele |
| Vytvoření nového uživatele |
| Aktualizace uživatele |
| Smazání uživatele (soft delete) |
Worklogy
Nástroj | Popis |
| Seznam worklogů pro úkol |
| Přidání worklogu k úkolu |
| Aktualizace worklogu |
| Smazání worklogu (soft delete) |
Přílohy
Nástroj | Popis |
| Nahrání přílohy k úkolu (ze souboru nebo base64) |
| Seznam příloh úkolu |
| Stažení přílohy |
| Smazání přílohy |
| Nahrání přílohy k lokální poznámce projektu |
| Seznam příloh lokální poznámky |
| Stažení přílohy poznámky |
| Smazání přílohy poznámky |
Komentáře
Nástroj | Popis |
| Seznam komentářů k úkolu |
| Přidání komentáře k úkolu |
| Úprava komentáře |
| Smazání komentáře (soft delete) |
Checklist
Nástroj | Popis |
| Seznam položek checklistu úkolu |
| Přidání položky checklistu |
| Aktualizace položky (zaškrtnutí, pozice) |
| Smazání položky (soft delete) |
Zmínky (mentions)
Nástroj | Popis |
| Seznam zmínek uživatele |
| Vytvoření zmínky |
| Označení zmínky jako přečtené |
| Označení všech zmínek jako přečtených |
| Smazání zmínky (soft delete) |
Linky mezi úkoly
Nástroj | Popis |
| Seznam linků úkolu |
| Vytvoření linku mezi úkoly |
| Smazání linku (soft delete) |
Tagy
Nástroj | Popis |
| Seznam štítků; vrací |
| Vytvoření štítku — předej |
| Přejmenování, změna barvy, přiřazení projektu, nebo příznak výchozího štítku |
| Smazání štítku (soft delete) |
| Seznam štítků přiřazených k úkolu |
| Přiřazení štítku k úkolu |
| Odebrání štítku z úkolu |
Sdílené projekty (TODO-235):
Nástroj | Popis |
| Štítky ve sdíleném projektu |
| Vytvoření štítku ve sdíleném projektu |
| Přejmenování / změna barvy / příznak výchozího štítku |
| Smazání (soft delete) |
| Přiřazení k úkolu ve sdíleném projektu |
| Odebrání z úkolu |
Štítek bez projektu appka nikde nenabídne. Od TODO-227 jsou štítky vázané na projekt;
td_create_tagbezprojectIdvyrobí nezařazený štítek, který se v appce objeví jen v nastavení projektu v sekci „Nezařazené" s tlačítkem na přiřazení. Odpověď nástroje na to upozorní. Dodatečně to spravítd_update_tagsprojectId.Limity free tarifu (TODO-243). Tarifní limity patří do appky, ne sem.
td_create_taskatd_create_projectproto do odpovědi přilepí varování s reálným počtem, když je owner na free tarifu a je nad limitem (1 projekt, 50 aktivních úkolů). Jde o to, aby se to člověk dozvěděl při zakládání, ne až zpětně v appce, a aby z textu bylo jasné, že o nic nepřišel. Nic to neblokuje a při neznámém tarifu (nedostupný relay) radši mlčí — falešný poplach je horší než žádný.
Výchozí štítky (TODO-239).
isDefaultutd_create_tag/td_update_tag(a sdílených variant) znamená, že štítek dostane každý nově zakládaný úkol projektu.td_create_taskitd_create_shared_taskje přidávají samy a vrátí je vappliedTags— appka je předzaškrtává v modalu, takže bez toho by výsledek závisel na tom, odkud úkol vznikne. Existujících úkolů se to nedotkne.Ve sdílených projektech se zapisuje do jiné Evolu instance, proto samostatná sada nástrojů —
td_add_tag_to_taskna sdílený úkol nefunguje.
Šablony úkolů
Nástroj | Popis |
| Seznam šablon úkolů |
| Vytvoření šablony |
| Aktualizace šablony |
| Smazání šablony (soft delete) |
Kanban sloupce
Nástroj | Popis |
| Seznam kanban sloupců |
| Vytvoření sloupce |
| Aktualizace sloupce |
| Smazání sloupce (soft delete) |
Uložená zobrazení
Nástroj | Popis |
| Seznam uložených zobrazení |
| Vytvoření zobrazení |
| Aktualizace zobrazení |
| Smazání zobrazení (soft delete) |
Aktivita
Nástroj | Popis |
| Seznam zápisů aktivity s filtry (úkol, aktor, akce, typ entity, datum od/do) — read-only |
Poznámky k projektu
Nástroj | Popis |
| Seznam lokálních poznámek projektu |
| Vytvoření lokální poznámky |
| Aktualizace lokální poznámky |
| Smazání lokální poznámky (soft delete) |
Dokumentace projektu
Dokumenty jsou poznámky s isDoc, takže mohou být zanořené pod jiný dokument
(parentDocId).
Nástroj | Popis |
| Seznam dokumentů projektu |
| Vytvoření dokumentu |
| Aktualizace dokumentu |
| Smazání dokumentu (soft delete) |
Systémová oznámení (relay)
Broadcast oznámení pro všechny uživatele. Zápis a výpis včetně expirovaných
vyžaduje TODOCKO_RELAY_ADMIN_KEY; obráceným směrem jdou zprávy od uživatelů,
viz níž.
Nástroj | Popis |
| Seznam aktivních oznámení (s |
| Vytvoření oznámení pro všechny uživatele |
| Smazání oznámení |
Deployment stages
Nástroj | Popis |
| Seznam deployment stages pro projekt |
| Vytvoření deployment stage |
| Aktualizace deployment stage |
| Smazání deployment stage (soft delete) |
Repository linky
Nástroj | Popis |
| Seznam repozitářových linků |
| Vytvoření repozitářového linku |
| Aktualizace repozitářového linku |
| Smazání repozitářového linku |
Sdílené projekty
Nástroj | Popis |
| Seznam sdílených projektů |
| Seznam úkolů ze sdíleného projektu |
| Vytvoření úkolu ve sdíleném projektu (auto-generovaný kód) |
| Aktualizace úkolu ve sdíleném projektu (všechna pole včetně recurrence, estimate, blocking) |
| Smazání úkolu ve sdíleném projektu (soft delete, kaskáda na checklist) |
| Aktualizace sdíleného projektu: název, kód, barva, archivace, skrytí z filtrů, automatické schvalování členů |
| Seznam worklogů úkolu ve sdíleném projektu |
| Přidání worklogu k úkolu ve sdíleném projektu |
| Smazání worklogu ve sdíleném projektu |
| Seznam položek checklistu úkolu ve sdíleném projektu |
| Přidání položky checklistu ve sdíleném projektu |
| Aktualizace položky checklistu ve sdíleném projektu |
| Smazání položky checklistu ve sdíleném projektu |
| Seznam komentářů úkolu ve sdíleném projektu |
| Přidání komentáře k úkolu ve sdíleném projektu |
| Aktualizace komentáře ve sdíleném projektu |
| Smazání komentáře ve sdíleném projektu |
| Nahrání přílohy k úkolu ve sdíleném projektu |
| Seznam příloh úkolu ve sdíleném projektu |
| Stažení přílohy úkolu sdíleného projektu |
| Smazání přílohy úkolu sdíleného projektu |
| Seznam deployment stages pro sdílený projekt |
| Vytvoření deployment stage ve sdíleném projektu |
| Aktualizace deployment stage ve sdíleném projektu |
| Smazání deployment stage ve sdíleném projektu |
| Seznam repozitářových linků sdíleného projektu |
| Vytvoření repozitářového linku ve sdíleném projektu |
| Aktualizace repozitářového linku ve sdíleném projektu |
| Smazání repozitářového linku ve sdíleném projektu |
| Seznam poznámek sdíleného projektu |
| Vytvoření poznámky ve sdíleném projektu |
| Aktualizace poznámky ve sdíleném projektu |
| Smazání poznámky ve sdíleném projektu |
| Seznam členů sdíleného projektu (jméno, oprávnění, kicked/blocked stav) |
| Změna oprávnění / block / kick člena sdíleného projektu |
| Nahrání přílohy k poznámce sdíleného projektu |
| Seznam příloh poznámky sdíleného projektu |
| Stažení přílohy poznámky sdíleného projektu |
| Smazání přílohy poznámky sdíleného projektu |
| Seznam dokumentů sdíleného projektu |
| Vytvoření dokumentu ve sdíleném projektu |
| Aktualizace dokumentu ve sdíleném projektu |
| Smazání dokumentu ve sdíleném projektu |
| Detail jednoho úkolu ve sdíleném projektu (podle ID nebo kódu, s odpracovaným časem a počty checklistu a komentářů) |
| Tagy úkolu ve sdíleném projektu |
| Hromadná úprava úkolů ve sdíleném projektu |
| Hromadné smazání úkolů ve sdíleném projektu (kaskáda na checklist a komentáře) |
| Úprava worklogu ve sdíleném projektu |
| Aktivita ve sdíleném projektu (stejné filtry jako u osobní) |
Stavy úkolů a validace argumentů (TODO-296, TODO-297). Stav
recurringje plnohodnotný, appka ho používá pro opakované úkoly a MCP ho teď nabízí ve všech devíti enumech. Zároveň se kontrolují hodnoty enumů a odmítají nedeklarované argumenty. Dřív byly enumy jen dokumentace a neznámý argument se tiše zahodil, což je přesně způsob, jaktd_create_shared_checklist_itempřijalisChecked, vrátilsuccessa položku založil neodškrtnutou. Ten argument tam dnes je.Při té příležitosti se srovnal i
linkType: MCP nabízelorelated, kterému appka nerozumí, a chyběly muexplicitamention, které appka opravdu zapisuje. Platné hodnoty jsoublocks,explicit,mention.
Rodič se ověřuje, argumenty jsou dorovnané (TODO-300, TODO-302).
td_create_task_commentatd_create_checklist_itemšly dřív založit na neexistující úkol: řádek se zapsal proti ID, které nic nerozřeší, každý výpis jde přestaskId, takže ho nikdo nikdy nepřečte, a tool vrátilsuccess.td_add_worklogto odmítal od TODO-90 M12, tyhle dva ne. Teď odmítají obě strany, osobní i sdílená, a sdílená scopuje i podle ownera.Zároveň se dorovnalo devět argumentů, které sdílené tooly proti osobním neměly. Nejcitelnější byl
td_update_shared_project: uměl jen archivaci, takže sdílený projekt nešlo přejmenovat.
Zprávy od uživatelů (relay)
Zprávy, které uživatelé posílají z aplikace (hlášení vad, návrhy, vzkazy).
Výpis a mazání umí jen admin owner a relay od TODO-90 H2 nevěří samotnému
ownerId — požadavek se podepisuje Ed25519 klíčem odvozeným z nastaveného
mnemoniku. Odesílání relay nechává nepřihlášené, stejně jako formulář v appce.
Nástroj | Popis |
| Výpis zpráv od uživatelů (jen admin owner) |
| Odeslání zprávy adminům (hlášení vady, návrh, vzkaz) |
| Smazání zprávy na relayi (jen admin owner, tvrdé smazání) |
Analytika a přehledy
Nástroj | Popis |
| Přehled: úkoly dnes, po termínu, odpracováno tento týden, nadcházející deadline |
| Vytížení týmu: odpracováno vs odhad vs kapacita per uživatel za období |
| Seznam opakujících se úkolů s konfigurací opakování |
| Úkoly po termínu (seřazené od nejstaršího) |
Do v1.6.0 tyhle tři nástroje vracely vždy prázdno.
td_list_recurring_tasks,td_list_overdue_tasksatd_list_tasks_by_date_rangečtlyresult.rows, zatímcoevolu.loadQueryvrací pole samo — takžecount: 0na jakýkoli vstup, bez chyby, které by šlo si všimnout. Opraveno v TODO-242 přes společnýqueryRows. Recurrence pole navíc vrací itd_get_task, takže nastavení opakování jde přečíst tou nejpřímější cestou. |td_list_tasks_by_date_range| Úkoly filtrované podle scheduledDate nebo deadline v daném rozmezí | |td_analyze_dependencies| Analýza závislostí: blokované úkoly, blokující řetězce, kritická cesta |
Sdílené projekty se do analytiky počítají (TODO-112). Do MCP IX čtlo všech pět přehledů jen osobní instanci, takže úkol ve sdíleném projektu neviděl dashboard, rozdělení vytížení, seznam opakujících se ani po termínu, ani dotaz na rozmezí dat. U vytížení to nebylo jen chybějící číslo: počítá se z odpracovaného času, takže vynechané sdílené minuty podhodnocovaly každého, kdo ve sdíleném projektu pracuje. Každý nástroj bere
includeShared(výchozítrue) a vracísharedIncluded, ať je vidět, jestli se sdílená polovina opravdu načetla.td_analyze_dependencieszůstává záměrně jen osobní: appka sdílenétaskLinkřádky čte, ale žádné nezapisuje.
td_search_taskshledá ve sdílených projektech taky, se stejným přepínačem.
Diagnostika
Nástroj | Popis |
| Stav synchronizace |
| Vynutí sync round-trip s relayem (užitečné, když chceš mít jistotu, že vidíš nejnovější data z jiného zařízení) |
Příklady použití
Seznam projektů
Zobraz mi seznam všech projektů v TodockoSeznam úkolů
Jaké mám úkoly ve stavu "todo"?
Zobraz úkoly projektu TODODetail úkolu
Jaké jsou detaily úkolu TODO-15?Vytvoření úkolu
Vytvoř nový úkol v projektu PROJ s názvem "Opravit bug v přihlášení" a prioritou high
Vytvoř úkol s deadline na 2026-03-15 a scheduledDate na 2026-03-10Aktualizace úkolu
Označ úkol PROJ-5 jako dokončený
Přiřaď úkol TODO-10 uživateli s ID xyz
Nastav scheduledDate úkolu TODO-10 na zítraLogování času
Zaloguj 2 hodiny práce na úkol TODO-15 s popisem "Implementace feature"Práce s přílohami
Nahraj soubor /home/user/report.pdf jako přílohu k úkolu TODO-15
Jaké přílohy má úkol TODO-15?
Smaž přílohu s ID xyzSdílené projekty
Zobraz sdílené projekty
Jaké úkoly jsou ve sdíleném projektu?
Označ úkol jako nasazený na produkciDeployment stages
Jaké deployment stages má projekt?
Vytvoř novou deployment stage "Staging" pro sdílený projektSub-úkoly
Vytvoř sub-úkol k úkolu TODO-15 v projektu TODO
Odpoj úkol TODO-20 od rodičovského úkolu (parentTaskId: null)Přehledy a analytika
Jaký mám dnes přehled? (dashboard summary)
Jak je vytížený tým tento týden?
Jaké úkoly jsou po termínu?
Zobraz úkoly naplánované na příští týden
Analyzuj závislosti v projektu TODO
Jaké mám opakující se úkoly?Linux CLI (todo) (TODO-160)
Vedle MCP serveru je v balíčku i CLI todo pro rychlé osobní ovládání z terminálu — sdílí stejnou databázi i TODOCKO_MNEMONIC jako MCP. Po npm link (nebo globální instalaci) je dostupné jako todo.
📖 Podrobný návod: CLI.md
# Přidání úkolu (bez -p použije první projekt)
todo add "Opravit login"
todo add "Opravit login" -p TODO --priority high --scheduled today
# Změna stavu (identifikace kódem úkolu)
todo done TODO-160 # status=done
todo start TODO-160 # status=in_progress
todo mv TODO-160 review # backlog|todo|in_progress|review|done|recurring
# Worklog
todo log TODO-160 1h30m "ladění OAuth"
todo worklogs TODO-160 # tabulka worklogů
# Strojový výstup na všech příkazech
todo add "X" --jsonArchitektura:
src/cli.ts(commander) → mapuje argumenty na existující tool handlery (handleToolCall), žádná duplicitní business logika. Kód úkolu se překládá na ID přestd_get_task.Sync: po mutaci čeká ~3 s na relay; když je offline, vypíše
⚠ uloženo lokálněa skončí s kódem 0 (data jsou lokálně bezpečně).Exit kódy:
0úspěch,1user/business chyba (neznámý kód, špatný stav/čas),2config (chybí mnemonic).Barvy jen v TTY a při nenastaveném
NO_COLOR.Pozn.: běží jako samostatný proces nad stejnou SQLite DB jako MCP; při souběžném zápisu s MCP může (vzácně) nastat
SQLITE_BUSY— v takovém případě příkaz zopakuj. Mimo rozsah v1:list/today, editace popisu, projekty/tagy/checklist, sdílené projekty.
Bezpečnost
Důležité: Vaše zálohovací fráze (mnemonic) je citlivý údaj!
Nikdy ji nesdílejte v přímé konverzaci s AI
V konfiguraci MCP serveru je fráze bezpečná (AI k ní nemá přístup)
Kdokoli s vaší frází má plný přístup k vašim datům
WebSocket Origin (TODO-169)
MCP server při WebSocket připojení k relay posílá hlavičku Origin: https://todocko-mcp. Sdílený relay (relay.todocko.cz) má tuto hodnotu povolenou ve whitelistu Access Control. Pokud používáš vlastní relay, musíš ji přidat do tiers.json.allowedDomains, jinak relay odmítne připojení s 403 Forbidden na WS upgrade.
Umístění dat
Databáze jsou uloženy v adresáři ~/.todocko/:
Platforma | Cesta |
Linux |
|
macOS |
|
Windows |
|
Soubory:
todocko.db- vaše osobní data (úkoly, projekty)todocko-shared.db- sdílené projekty
Změna konfigurace
Claude Code (CLI)
Po změně konfigurace v ~/.claude/settings.json (např. změna mnemonicu) spusťte příkaz:
/mcpTím se MCP server restartuje s novou konfigurací.
Přepnutí na jiný účet
Při změně mnemonicu na jiný Todocko účet je potřeba smazat lokální databázi:
# Linux/macOS
rm ~/.todocko/todocko.db
# Windows
del %USERPROFILE%\.todocko\todocko.dbDatabáze obsahuje ID vlastníka z předchozího mnemonicu. Po smazání se při dalším spuštění vytvoří nová databáze a stáhnou se data nového účtu.
Troubleshooting
Server se nespustí
Zkontrolujte, že máte Node.js 24.20+
Zkontrolujte, že jste spustili
npm run buildZkontrolujte logy v Claude Desktop
Data se nesynchronizují
Ověřte, že je zálohovací fráze správná (24 slov)
Zkontrolujte internetové připojení
Počkejte pár sekund na synchronizaci
Zkuste smazat
~/.todocko/todocko.dba restartovat
Nástroje nejsou viditelné
Restartujte Claude Desktop
V Claude Code použijte
/mcppro reloadZkontrolujte konfigurační soubor
Zkontrolujte cestu k dist/index.js
Každý loadQuery skončí timeoutem (loadQuery timed out after 15000ms)
Příčina: better-sqlite3 native binding byl zkompilován proti jiné Node.js ABI verzi, než pod kterou MCP server běží. new Database() selže s ERR_DLOPEN_FAILED, Evolu dbWorker init nikdy nedoběhne a všechny loadQuery volání visí navždy. Mutace (insert/update) reportují success, ale ve skutečnosti se nezapíšou.
Symptom v praxi: td_sync_status hlásí ok, errorCount: 0, ale td_get_task, td_list_* apod. timeoutují.
Fix — přebuildit native binding proti aktuálnímu Node:
cd ~/.todocko-mcp # případně cesta, kde máš nainstalované todocko-mcp
cd node_modules/better-sqlite3
npx node-gyp rebuild --releasePak /mcp reconnect v Claude Code.
Mismatch je typický, pokud upgradneš Node.js (např. z v22 na v25) nebo přepneš mezi nvm a linuxbrew/brew Node. Při instalaci installer použije node z PATH — pokud claude později spouští MCP přes jiný node binary, binding nesedí.
Vývoj
# Instalace závislostí
npm install
# Build
npm run build
# Watch mode pro vývoj
npm run dev
# Ruční spuštění
TODOCKO_MNEMONIC="vaše fráze" npm startEnglish
MCP (Model Context Protocol) server for working with Todocko app data from AI assistants.
Support
Claude Desktop - full support
Claude Code (CLI) - full support (same configuration)
Requirements
Node.js 24.20+ — required by Evolu v8's
engines, and not merely formally: v8 relies onnavigator.locks,MessageChannel,BroadcastChannelandWebSocket, which Node only has natively from 24 onTodocko account with data synchronized via Evolu
Installation
1. Download
Using git:
git clone https://github.com/brnt-cz/todocko-mcp.git
cd todocko-mcpOr download ZIP from Releases and extract.
2. Run the installer
Linux/macOS:
chmod +x install.sh
./install.shWindows (PowerShell):
.\install.ps1The installer will:
Install dependencies and build the project
Ask whether to configure Claude Desktop, Claude Code, or both
Create a configuration file with a placeholder
Manually add your 24-word backup phrase to the configuration file
Restart Claude
Manual installation
Install dependencies:
npm install npm run buildAdd to configuration:
Claude Desktop (~/.config/Claude/claude_desktop_config.json on Linux or ~/Library/Application Support/Claude/claude_desktop_config.json on macOS):
{
"mcpServers": {
"todocko": {
"command": "node",
"args": ["/path/to/mcp-server/dist/index.js"],
"env": {
"TODOCKO_MNEMONIC": "your 24 word backup phrase"
}
}
}
}Claude Code (CLI) - add to ~/.claude/settings.json:
{
"mcpServers": {
"todocko": {
"command": "node",
"args": ["/path/to/mcp-server/dist/index.js"],
"env": {
"TODOCKO_MNEMONIC": "your 24 word backup phrase"
}
}
}
}Restart Claude Desktop / Claude Code
Available Tools (152)
Projects
Tool | Description |
| List all projects |
| Get project details by ID or code |
| Create a new project |
| Update a project (name, code, color, isArchived, autoApproveMembers, isHiddenFromFilters) |
| Delete a project (soft delete) |
Tasks
Tool | Description |
| List tasks with filters (project, status, priority, assignee) |
| Get task details by ID or code (e.g., |
| Create a new task (with recurrence, sprint, parentTaskId support) |
| Update an existing task (with recurrence, sprint, parentTaskId support) |
| Search tasks by text |
| Bulk update multiple tasks |
| Bulk delete multiple tasks |
| Soft-delete a single personal task (cascades to its worklogs and attachments). |
| List git events (push, PR opened/merged/closed) for a task by its code. |
Users
Tool | Description |
| List all users |
| Get user details |
| Create a new user |
| Update a user |
| Delete a user (soft delete) |
Worklogs
Tool | Description |
| List worklogs for a task |
| Add a worklog to a task |
| Update a worklog |
| Delete a worklog (soft delete) |
Attachments
Tool | Description |
| Upload an attachment to a task (from file or base64) |
| List attachments for a task |
| Download an attachment |
| Delete an attachment |
| Upload an attachment to a local project note |
| List attachments of a local note |
| Download a note attachment |
| Delete a note attachment |
Comments
Tool | Description |
| List comments for a task |
| Add a comment to a task |
| Update a comment |
| Delete a comment (soft delete) |
Checklist
Tool | Description |
| List checklist items for a task |
| Add a checklist item |
| Update a checklist item (check, reposition) |
| Delete a checklist item (soft delete) |
Mentions
Tool | Description |
| List mentions for a user |
| Create a mention |
| Mark a mention as read |
| Mark all mentions as read |
| Delete a mention (soft delete) |
Task Links
Tool | Description |
| List links for a task |
| Create a link between tasks |
| Delete a task link (soft delete) |
Tags
Tool | Description |
| List tags; returns |
| Create a tag — pass |
| Rename, recolour, assign to a project, or mark default |
| Delete a tag (soft delete) |
| List tags assigned to a task |
| Assign a tag to a task |
| Remove a tag from a task |
Shared projects (TODO-235):
Tool | Description |
| Tags in a shared project |
| Create a tag in a shared project |
| Rename / recolour |
| Delete (soft delete) |
| Assign to a task in a shared project |
| Remove from a task |
A tag without a project is never offered by the app. Since TODO-227 tags belong to a project;
td_create_tagwithoutprojectIdmakes an unassigned tag, which shows up only under "Nezařazené" in project settings with a button to adopt it. The tool response says so. Fix it afterwards withtd_update_tagand aprojectId.Free-tier limits (TODO-243). Tier caps belong to the app, not here.
td_create_taskandtd_create_projectappend a warning with the real count when the owner is on the free tier and above its cap (1 project, 50 active tasks), so that it is learned at creation time rather than later in the app, and so that the text makes clear nothing was lost. Nothing is blocked, and with an unknown tier (unreachable relay) it stays silent — a false alarm is worse than none.
Default tags (TODO-239).
isDefaultontd_create_tag/td_update_tag(and the shared variants) means every task newly created in the project gets the tag. Bothtd_create_taskandtd_create_shared_taskapply them and report them back inappliedTags— the app pre-ticks them in its form, so without this the result would depend on where the task was created. Existing tasks are untouched.Shared projects write to a different Evolu instance, hence the separate set —
td_add_tag_to_taskdoes not work on a shared task.
Task Templates
Tool | Description |
| List task templates |
| Create a task template |
| Update a task template |
| Delete a task template (soft delete) |
Kanban Columns
Tool | Description |
| List kanban columns |
| Create a kanban column |
| Update a kanban column |
| Delete a kanban column (soft delete) |
Saved Views
Tool | Description |
| List saved views |
| Create a saved view |
| Update a saved view |
| Delete a saved view (soft delete) |
Activity Log
Tool | Description |
| List activity log entries with filters (task, actor, action, entityType, date from/to) — read-only |
Project Notes
Tool | Description |
| List local project notes |
| Create a local project note |
| Update a local project note |
| Delete a local project note (soft delete) |
Deployment Stages
Tool | Description |
| List deployment stages for a project |
| Create a deployment stage for a personal project. |
| Update a deployment stage in a personal project. |
| Soft-delete a deployment stage in a personal project. |
Repository Links
Tool | Description |
| List repository links |
| Create a repository link |
| Delete a repository link |
| Update a repository link for a project. |
Shared Projects
Tool | Description |
| List shared projects |
| List tasks from a shared project |
| Update a task in a shared project |
| List deployment stages for a shared project |
| Create a deployment stage in a shared project |
| List repository links for a shared project |
| Create a repository link in a shared project |
| List notes for a shared project |
| Create a note in a shared project |
| Update a note in a shared project |
| Delete a note in a shared project |
| List members of a shared project (name, permission, kicked/blocked state) |
| Change permission / block / kick a shared project member |
| Upload an attachment to a shared project note |
| List attachments of a shared project note |
| Download a shared note attachment |
| Delete a shared note attachment |
| List document pages from a shared project |
| Create a document page in a shared project |
| Update a document page in a shared project |
| Delete a document page in a shared project (soft delete) |
| Create a task in a shared project. |
| Soft-delete a task in a shared project (cascades to its checklist items and comments). |
| List worklogs for a task in a shared project. |
| Add a worklog to a task in a shared project. |
| Soft-delete a worklog in a shared project. |
| List checklist items for a task in a shared project. |
| Create a checklist item on a task in a shared project. |
| Update a checklist item in a shared project (toggle done, rename, reorder). |
| Soft-delete a checklist item in a shared project. |
| List comments for a task in a shared project. |
| Add a comment to a task in a shared project. |
| Update a comment in a shared project. |
| Soft-delete a comment in a shared project. |
| Update a repository link in a shared project. |
| Soft-delete a repository link in a shared project. |
| Update a deployment stage in a shared project. |
| Soft-delete a deployment stage in a shared project. |
| Update shared-project metadata (archive / hide from filters). |
| Upload a file attachment to a task in a shared project. |
| List file attachments of a task in a shared project (metadata only, no data). |
| Download a task attachment from a shared project. |
| Soft-delete a task attachment in a shared project. |
| Get one task in a shared project by ID or code, with its worklog total, checklist and comment counts. |
| List the tags on a task in a shared project. |
| Update several tasks in a shared project at once. |
| Soft-delete several tasks in a shared project at once, cascading their checklist items and comments. |
| Update a worklog in a shared project. |
| List activity log entries for a shared project. |
Project Documentation
Documents are notes with isDoc, so they can nest under another document via parentDocId.
Tool | Description |
| List local project document pages (not synced to shared projects) |
| Create a local project document page |
| Update a local project document page |
| Delete a local project document page (soft delete) |
System Notifications (relay)
Broadcast notices for every user. Writing, and listing expired ones, needs TODOCKO_RELAY_ADMIN_KEY.
Tool | Description |
| List active system/broadcast notifications from the relay server. |
| Create a broadcast notification visible to all Todocko users. |
| Delete a system notification by ID. |
User Messages (relay)
What users send from the app: bug reports, feature requests, notes. Listing and deleting are admin-owner only and the request is signed with the configured mnemonic; submitting needs no admin rights.
Tool | Description |
| List messages users have sent from the app (bug reports, feature requests, notes). |
| Send a message to the Todocko admins (bug report, feature request or note), the same way the app's feedback form does. |
| Delete one user message from the relay. |
Analytics & Reports
Tool | Description |
| Overview: tasks today, overdue, this week's worklog, upcoming deadlines |
| Team workload: logged vs estimate vs capacity per user for a period |
| List recurring tasks with recurrence configuration |
| Overdue tasks (sorted oldest first) |
Before v1.6.0 these three tools always returned nothing.
td_list_recurring_tasks,td_list_overdue_tasksandtd_list_tasks_by_date_rangereadresult.rows, whileevolu.loadQueryresolves to the array itself — socount: 0for every input, with no error to notice. Fixed in TODO-242 behind a sharedqueryRows.td_get_tasknow returns the recurrence settings too, so a schedule can be read the obvious way. |td_list_tasks_by_date_range| Tasks filtered by scheduledDate or deadline within a date range | |td_analyze_dependencies| Dependency analysis: blocked tasks, blocking chains, critical path |
Diagnostics
Tool | Description |
| Sync status |
| Force a sync round-trip with the relay (useful when you want to make sure you're reading the latest data from another device) |
Usage Examples
List projects
Show me all projects in TodockoList tasks
What tasks do I have with status "todo"?
Show tasks for project TODOTask details
What are the details of task TODO-15?Create task
Create a new task in project PROJ with title "Fix login bug" and priority high
Create a task with deadline 2026-03-15 and scheduledDate 2026-03-10Update task
Mark task PROJ-5 as completed
Assign task TODO-10 to user with ID xyz
Set scheduledDate of task TODO-10 to tomorrowLog time
Log 2 hours of work on task TODO-15 with description "Feature implementation"Working with attachments
Upload file /home/user/report.pdf as attachment to task TODO-15
What attachments does task TODO-15 have?
Delete attachment with ID xyzShared projects
Show shared projects
What tasks are in the shared project?
Mark task as deployed to productionDeployment stages
What deployment stages does the project have?
Create a new deployment stage "Staging" for the shared projectSub-tasks
Create a sub-task for task TODO-15 in project TODO
Detach task TODO-20 from its parent (parentTaskId: null)Analytics & Reports
What's my dashboard summary for today?
How is the team's workload this week?
What tasks are overdue?
Show tasks scheduled for next week
Analyze dependencies in project TODO
What recurring tasks do I have?Security
Important: Your backup phrase (mnemonic) is sensitive data!
Never share it directly in conversation with AI
In the MCP server configuration, the phrase is safe (AI has no access to it)
Anyone with your phrase has full access to your data
Data Location
Databases are stored in the ~/.todocko/ directory:
Platform | Path |
Linux |
|
macOS |
|
Windows |
|
Files:
todocko.db- your personal data (tasks, projects)todocko-shared.db- shared projects
Configuration Changes
Claude Code (CLI)
After changing configuration in ~/.claude/settings.json (e.g., changing mnemonic), run the command:
/mcpThis will restart the MCP server with the new configuration.
Switching to a Different Account
When changing the mnemonic to a different Todocko account, you need to delete the local database:
# Linux/macOS
rm ~/.todocko/todocko.db
# Windows
del %USERPROFILE%\.todocko\todocko.dbThe database contains the owner ID from the previous mnemonic. After deletion, a new database will be created on the next startup and data from the new account will be downloaded.
Troubleshooting
Server won't start
Check that you have Node.js 24.20 or newer (Evolu v8 requires it)
Check that you ran
npm run buildCheck logs in Claude Desktop
Data not syncing
Verify the backup phrase is correct (24 words)
Check internet connection
Wait a few seconds for synchronization
Try deleting
~/.todocko/todocko.dband restart
Tools not visible
Restart Claude Desktop
In Claude Code, use
/mcpfor reloadCheck the configuration file
Check the path to dist/index.js
Every loadQuery ends with a timeout (loadQuery timed out after 15000ms)
Cause: the better-sqlite3 native binding was compiled against a different Node.js ABI than the one running the MCP server. new Database() fails with ERR_DLOPEN_FAILED, the Evolu dbWorker init never completes, and every loadQuery hangs forever. Mutations (insert/update) report success but are silently lost.
Typical symptoms: td_sync_status reports ok with errorCount: 0, but td_get_task, td_list_*, etc. all time out.
Fix — rebuild the native binding against the current Node:
cd ~/.todocko-mcp # or wherever todocko-mcp is installed
cd node_modules/better-sqlite3
npx node-gyp rebuild --releaseThen /mcp reconnect in Claude Code.
This mismatch typically appears after upgrading Node.js (e.g. v22 → v25) or switching between nvm and linuxbrew/brew Node, because the installer builds the binding against the node from PATH, but claude may later spawn the MCP with a different node binary.
Development
# Install dependencies
npm install
# Build
npm run build
# Watch mode for development
npm run dev
# Tests
npm test
# Manual run
TODOCKO_MNEMONIC="your phrase" npm startTesty
Vitest, 24 testů ve dvou souborech. Běží v CI (ci.yml, push i PR na main)
od TODO-229 — do té doby CI spouštěla jen build, takže se nikdo nedozvěděl, že
helpers.test.ts na Node 18/20 ani neprojde importem: přes helpers.ts
tahal ../evolu.js, jehož inicializace při načtení modulu spadne na
crypto.getRandomValues must be defined.
Proto jsou funkce bez závislosti na Evolu v src/tools/pure.ts a testují se
odtud. helpers.ts je re-exportuje, takže volající se nemění. Když píšeš helper,
který Evolu nepotřebuje, patří do pure.ts — jinak ho nejde testovat bez
nastartované databáze.
Závazná verze je Node 24.20 nebo novější — je v engines a Evolu v8 na
starším neběží. Na té jede ci.yml i release.yml.