Agent-Native Calendar
Agent-Native Google Calendar - manage events, sync, and public booking
คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)
Track long-running tasks in real time: sessions, steps, speed, ETA, HTTP API and TUI dashboard.
สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน
ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry
เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง
TRACKING_STATE_DIR, TRACKING_TOKEN_FILEต้องเตรียมก่อน
คุณใช้แอปไหน
เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”
เปิด Claude Desktop → Settings → Developer → Edit Config แล้ววางค่านี้ในไฟล์ claude_desktop_config.json
{
"mcpServers": {
"tracking": {
"command": "uvx",
"args": [
"mcp-tracking"
],
"env": {
"TRACKING_STATE_DIR": "ใส่ค่าของคุณ",
"TRACKING_TOKEN_FILE": "ใส่ค่าของคุณ"
}
}
}
}พิมพ์คำสั่งนี้ใน Terminal
claude mcp add tracking --env TRACKING_STATE_DIR='ใส่ค่าของคุณ' --env TRACKING_TOKEN_FILE='ใส่ค่าของคุณ' -- uvx mcp-trackingเติมค่าที่เว้นว่างไว้ก่อนรัน
วางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json
{
"mcpServers": {
"tracking": {
"command": "uvx",
"args": [
"mcp-tracking"
],
"env": {
"TRACKING_STATE_DIR": "ใส่ค่าของคุณ",
"TRACKING_TOKEN_FILE": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
วางในไฟล์ .vscode/mcp.json ของโปรเจกต์
{
"servers": {
"tracking": {
"type": "stdio",
"command": "uvx",
"args": [
"mcp-tracking"
],
"env": {
"TRACKING_STATE_DIR": "ใส่ค่าของคุณ",
"TRACKING_TOKEN_FILE": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
ตัวนี้รันในเครื่องคุณ แต่ ChatGPT ต่อได้เฉพาะ server บนอินเทอร์เน็ต ลองเลือกแอปอื่น
ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี
TRACKING_STATE_DIR envTRACKING_TOKEN_FILE envค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 6 พ.ย. 2569
ชื่อใน registry ยืนยันด้วยบัญชี GitHub amineutron ซึ่งเป็นเจ้าของ repo
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต
ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน
รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
registry ไม่ได้ระบุว่าต้องใช้กุญแจ แต่บางตัวจะขอให้ล็อกอินตอนใช้ครั้งแรก
รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)
repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (0.3.1) เข้า registry เมื่อวานซืน
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Python (uv) ในเครื่องด้วย
ในหมวดเดียวกันมี Agent-Native Calendar, Excel MCP Server, MCP Server for Excel
server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว
อ่านการ์ด:★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi
Agent-Native Google Calendar - manage events, sync, and public booking
ให้ AI สร้างและแก้ไฟล์ Excel ได้เอง ทั้งสูตร กราฟ และ PivotTable โดยไม่ต้องมีโปรแกรม Excel ในเครื่อง
Excel automation for AI - Sheets, Power Query, DAX, VBA, Tables, Ranges and more. Windows only.
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ
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.
MCP/tracking/
server.py -- Serveur MCP (outils Claude/Lyra) + point d'entree --ui / --test api.py -- API HTTP locale (127.0.0.1:8765) pour les scripts externes mutations.py -- Mutations d'une session, partagees par api.py ET server.py (horodatage items, historique, niveaux de log, auto-completion) metrics.py -- Metriques derivees (vitesse, ETA, ecoule, stale) -- logique pure, calculees a la lecture, jamais stockees storage.py -- Persistence JSON atomique + verrou fichier + cache mtime + purge TTL models.py -- Modeles pydantic (TrackingSession, TrackingItem, LogEntry, ProgressPoint) templates.py -- Templates builtin + templates utilisateur (JSON) ui.py -- Dashboard Textual (TUI temps reel) + modales stop/kill sim.py -- Simulations de demo (server.py --test) poller.py -- Daemon polling qBittorrent (10s) + Bazarr (60s) tracking-api.service -- Unite systemd (systeme) pour api.py tracking-poller.service -- Unite systemd (systeme) pour poller.py install.sh / deploy.sh -- Installation initiale / redeploiement des services Makefile -- make test | smoke | deploy | ui tests/ -- unitaires (storage, metrics) + integration/ (API HTTP reelle)
| 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) |
Claude/Lyra (outils MCP)
| v server.py ─────────────────────────────────────────┐ | qBittorrent API (poll 10s) | | | Bazarr API (poll 60s) ──> poller.py ──> api.py ──> mutations.py ──> storage.py ──> ~/.local/state/tracking/tracking_state.json | | | dv_webhook_server.py | v | | ui.py v | (rafraichit chaque seconde) dv_convert.py ──────────────────────────────────────> (metriques temps reel ffmpeg/dovi_tool)
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) |
uvx mcp-tracking # serveur MCP (stdio) ; avant publication : uvx --from git+https://github.com/amineutron/mcp-tracking mcp-tracking
uvx --from mcp-tracking mcp-tracking-api # API HTTP 127.0.0.1:8765 uvx --from mcp-tracking mcp-tracking-ui # tableau de bord terminal
Configuration Claude Desktop / Claude Code (mcpServers) :
{ "tracking": { "command": "uvx", "args": ["mcp-tracking"] } }
cd <dossier du dépôt>
uv venv .venv uv pip install "mcp[cli]>=1.0.0" "pydantic>=2.0" "textual>=0.80.0" "fastapi"
Le MCP est enregistre dans Claude Code (scope user) :
claude mcp list # -> tracking: Connected
Pour reenregistrer :
claude mcp add tracking -s user -- \
/.venv/bin/python \ /server.py
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) | -- |
cd <dossier du dépôt>
./install.sh # premiere fois : venv + services (demande sudo) sudo ./deploy.sh # apres chaque mise a jour du code : stop, unites, restart, verif make smoke # sante rapide
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.
# Etat
systemctl status tracking-api.service tracking-poller.service
journalctl -fu tracking-poller.service journalctl -fu tracking-api.service
sudo systemctl restart tracking-api.service tracking-poller.service
curl http://127.0.0.1:8765/health curl http://127.0.0.1:8765/sessions
Cherche "MCP Tracking" dans wofi/launcher. Lance le dashboard dans Kitty.
# Toutes les sessions
/.venv/bin/python \ /server.py --ui
.venv/bin/python server.py --ui --filter download .venv/bin/python server.py --ui --filter movie .venv/bin/python server.py --ui --filter errors
open_tracking_ui() # toutes les sessions
open_tracking_ui(filter_template="lyra_task") # vue Lyra uniquement open_tracking_ui(filter_template="errors") # erreurs uniquement
.venv/bin/python server.py --test
Simule 4 sessions en parallele : download, machine (12 noeuds), free, movie (pipeline DV complet).
[TEMPLATE] Nom de la session id:xxxxxxxx (status)
[=============> ] 54.2% 27100 MB / 50000 MB champ_extra1: valeur | champ_extra2: valeur
[ok] item-1 100.0 GB -- termine [>] item-2 frame: 94231 / 172800 (54.5%) speed: 3.2x [ ] item-3 -- [!] item-4 erreur detail
Logs Erreurs 14:32:01 Message log 1 [!] item-4 14:32:04 Message log 2 14:32:08 ECHEC: details 14:32:07 Message log 3 --
| Icone | Statut | Couleur |
|---|---|---|
[ ] | pending | gris |
[>] | running | cyan |
[ok] | done | vert |
[!] | error | rouge |
| Couleur | Statut |
|---|---|
| cyan | running |
| vert | done |
| rouge | error |
ตัดมาแค่ช่วงต้น อ่านต่อใน repo