Track long-running tasks in real time: sessions, steps, speed, ETA, HTTP API and TUI dashboard.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent — or use 1-click editor setup below.
One-click editor setup isn’t available for this listing yet — we don’t have a confirmed install command, and we’d rather show nothing than point your editor at the wrong package or host. Follow the project’s own setup instructions, linked above.
English summary. Local-first tracking of long-running tasks: an MCP server for Claude or Lyra, a small HTTP API on 127.0.0.1:8765 and a Textual terminal dashboard. Sessions have items, progress, logs and templates (download, machine, free, lyra_task, movie); pollers feed qBittorrent and Bazarr sessions automatically. Install: pip install . then mcp-tracking, mcp-tracking-api, mcp-tracking-ui. No cloud, no telemetry.
Serveur MCP de suivi en temps reel avec dashboard terminal. Permet a Claude/Lyra de tracker n'importe quelle operation longue ET alimente automatiquement les sessions depuis le media-server (qBittorrent, Bazarr, conversion DV).
Un agent LLM (grand modèle de langage) qui lance une tâche longue (conversion, clone de VM, téléchargement) ne peut pas rester bloqué à la regarder, et il ne voit rien de ce qui se passe entre deux de ses tours. Ce serveur lui sert de mémoire de travail partagée :
tracking_get.metrics.py) : l'agent reçoit des chiffres au lieu d'extrapoler lui-même.running sans mise à jour depuis 10 minutes
est marquée stale : l'agent distingue « encore en cours » de « processus mort ».pid de son processus ;
l'heure de démarrage relevée dans /proc évite de signaler un pid réutilisé par un
autre programme. tracking_stop envoie SIGTERM et garde la session, tracking_kill
envoie SIGKILL et la supprime.flock et réécrit de façon atomique (storage.py) : plusieurs agents et scripts peuvent
écrire en même temps.download, machine, movie, lyra_task, free)
pour que chaque agent décrive son travail de la même façon.Local-first et self-hosted : aucun cloud, aucune télémétrie, tout reste sur la machine (on-prem). Utilisé par Lyra, l'assistant vocal French-first, et par n'importe quel client MCP (Claude Code, Claude Desktop...).
![]()
Enregistree avec docs/demo/record.sh : server.py --test alimente quatre sessions simulees dans un repertoire d'etat temporaire (TRACKING_STATE_DIR), puis server.py --ui ouvre le dashboard dessus. Les sessions reelles ne sont pas touchees.
| Fichier | Emplacement | Surcharge |
|---|---|---|
tracking_state.json | ~/.local/state/tracking/ | TRACKING_STATE_DIR |
poller_state.json | ~/.local/state/tracking/ | TRACKING_STATE_DIR |
templates.json (templates utilisateur, optionnel) | ~/.config/tracking/ | TRACKING_TEMPLATES_FILE |
credentials/*.cred (qBittorrent, Bazarr) | a cote du code, gitignore | -- |
Un ancien tracking_state.json a cote du code est migre automatiquement au premier
demarrage (copie, jamais supprime).
Variables d'environnement de retention :
| Variable | Defaut | Role |
|---|---|---|
TRACKING_TTL_DAYS | 7 | Purge des sessions done / error / paused |
TRACKING_TTL_RUNNING_H | 24 | Purge des sessions running orphelines (plus mises a jour) |
Le fichier d'etat est ecrit a chaque modification via ecriture atomique (os.replace) sous verrou
fichier (tracking_state.lock). Tous les processus (MCP, API, poller, dashboard) partagent cet
unique fichier ; chaque lecture verifie le mtime pour invalider son cache.
Toute mutation (HTTP ou MCP) passe par mutations.py, qui garantit le meme comportement sur les
deux chemins : started_at / finished_at poses sur les items et la session, historique de
progression (fenetre glissante de 40 points), niveaux de log info / warn / error,
auto-completion quand tous les items sont termines.
GET /sessions et tracking_get renvoient un bloc metrics calcule a la volee par metrics.py :
| Champ | Sens |
|---|---|
percent | progression (plafonnee a 100) |
rate, rate_str | vitesse sur les 120 dernieres secondes (2.0 MB/s, 30.0 u/min) |
eta_seconds, eta_str | temps restant estime (session running uniquement) |
elapsed_seconds, elapsed_str | depuis created_at jusqu'a finished_at ou maintenant |
idle_seconds, stale | stale = running sans mise a jour depuis 10 min (affiche dans le TUI) |
Configuration Claude Desktop / Claude Code (mcpServers) :
Le MCP est enregistre dans Claude Code (scope user) :
Pour reenregistrer :
Deux services tournent en permanence et se lancent au boot :
| Service | Role | Port |
|---|---|---|
tracking-api.service | API HTTP locale pour scripts externes | 127.0.0.1:8765 |
tracking-poller.service | Poll qBittorrent (10s) + Bazarr (60s) | -- |
Les instances MCP server.py deja ouvertes par des sessions Claude Code ne sont pas
redemarrees par deploy.sh : reconnecter tracking via /mcp dans ces sessions.
No reviews yet — be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/task-tracking-sessions-eta-dashboard)<a href="https://allmcps.com/mcp/task-tracking-sessions-eta-dashboard"><img src="https://allmcps.com/api/badge/task-tracking-sessions-eta-dashboard?style=directory" alt="Task tracking (sessions, ETA, dashboard) on AllMCPs" /></a>