--- name: push-tickets-lesstime description: Use after full-project-review to push TICKETS.md tickets into Lesstime project management via MCP. Triggers on "push tickets", "envoyer tickets", "creer les tickets dans lesstime", "sync tickets lesstime", "pousser les tickets". --- # Push Tickets to Lesstime ## Overview Prend le fichier `TICKETS.md` genere par le skill `full-project-review` et cree les taches correspondantes dans Lesstime via son MCP server. Chaque ticket devient une tache avec la bonne priorite, le bon groupe, et la description complete. ## When to Use - Apres un `full-project-review` qui a genere un `TICKETS.md` - L'utilisateur demande de "pousser", "sync", "envoyer" les tickets dans Lesstime - L'utilisateur veut creer les taches dans son gestionnaire de projet ## Prerequis - Un fichier `TICKETS.md` doit exister dans le repertoire courant (genere par `full-project-review`) - L'API Lesstime doit etre accessible via HTTP ## Connexion a Lesstime Lesstime est accessible via un serveur MCP HTTP (JSON-RPC 2.0). Il n'y a PAS de MCP natif configure dans Claude Code — il faut appeler l'API directement via `curl` dans le Bash tool. ### Parametres de connexion ``` URL: http://project.malio-dev.fr/_mcp TOKEN: 7e8b410a5b79b5c0432951dcee3a3a81e0731e86d9f70d8784ec079a2b759c64 ``` ### Procedure de connexion (3 etapes) **Etape 1 — Initialiser la session** (SANS header Mcp-Session-Id) : ```bash curl -s -D /tmp/mcp_headers -X POST http://project.malio-dev.fr/_mcp \ -H "Authorization: Bearer 7e8b410a5b79b5c0432951dcee3a3a81e0731e86d9f70d8784ec079a2b759c64" \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"claude","version":"1.0"}}}' > /dev/null ``` **Etape 2 — Extraire le Session ID** depuis les headers de reponse : ```bash SID=$(grep -i "mcp-session-id" /tmp/mcp_headers | awk '{print $2}' | tr -d '\r\n') ``` **Etape 3 — Appeler les outils** avec le Session ID : ```bash curl -s -X POST http://project.malio-dev.fr/_mcp \ -H "Authorization: Bearer 7e8b410a5b79b5c0432951dcee3a3a81e0731e86d9f70d8784ec079a2b759c64" \ -H "Content-Type: application/json" \ -H "Mcp-Session-Id: $SID" \ -d '{"jsonrpc":"2.0","id":10,"method":"tools/call","params":{"name":"list-projects","arguments":{}}}' ``` Les reponses sont au format `{"jsonrpc":"2.0","id":X,"result":{"content":[{"type":"text","text":"[JSON_DATA]"}]}}`. Extraire les donnees avec : `python3 -c "import sys,json; d=json.loads(sys.stdin.read()); print(json.loads(d['result']['content'][0]['text']))"` ### Approche recommandee : script Python Pour pousser plusieurs tickets, generer un script Python temporaire qui : 1. Initialise la session via curl subprocess 2. Extrait le SID 3. Boucle sur les tickets et appelle create-task pour chacun 4. Affiche le resultat Voir la memoire `reference_lesstime.md` pour les IDs connus (projets, users, statuts, priorites). ### IDs frequemment utilises | Type | Label | ID | |------|-------|----| | Statut | A faire | 1 | | Statut | En cours | 2 | | Statut | Termine | 5 | | Priorite | Basse | 1 | | Priorite | Moyen | 2 | | Priorite | Haute | 3 | | User | matteo | 6 | | User | Matthieu | 5 | | Projet | Infrastructure | 13 | | Projet | Lesstime | 5 | | Projet | Inventory | 7 | | Projet | Ferme | 8 | | Projet | SIRH | 12 | **IMPORTANT :** Toujours faire un appel `list-projects` / `list-users` / `list-priorities` en phase Discovery pour verifier que les IDs sont toujours valides. Les IDs ci-dessus sont un cache pour aller plus vite, pas une source de verite. ## Outils MCP Lesstime disponibles Le MCP Lesstime expose 22 outils. Voici ceux utilises par ce skill : ### Discovery (appeler en premier pour mapper les IDs) | Outil | Usage | |-------|-------| | `list-projects` | Trouver le projectId cible | | `list-statuses` | Recuperer les statuts disponibles (label, id, color) | | `list-priorities` | Recuperer les priorites disponibles (label, id, color) | | `list-efforts` | Recuperer les niveaux d'effort (label, id) | | `list-groups` | Lister les groupes d'un projet (par projectId) | | `list-tags` | Lister les tags disponibles (label, id, color) | | `list-users` | Lister les utilisateurs pour l'assignation | ### Creation | Outil | Usage | |-------|-------| | `create-task` | Creer une tache (projectId, title, description, statusId, priorityId, effortId, assigneeId, groupId, tagIds) | | `create-group` | Creer un groupe dans un projet (projectId, title) | ### Parametres de `create-task` ``` projectId: int (required) -- ID du projet cible title: string (required) -- Titre du ticket (ex: "T-001 -- Supprimer le webhook hardcode") description: string (optional) -- Corps complet du ticket (Pourquoi + A faire + Fichiers) statusId: int (optional) -- ID du statut initial priorityId: int (optional) -- ID de la priorite effortId: int (optional) -- ID de l'effort estime assigneeId: int (optional) -- ID de l'utilisateur assigne groupId: int (optional) -- ID du groupe (utilise pour regrouper par priorite) tagIds: int[] (optional) -- IDs des tags ``` ## Process ```dot digraph push_flow { rankdir=TB; "1. Lire TICKETS.md" -> "2. Discovery MCP (parallele)"; "2. Discovery MCP (parallele)" -> "3. Demander projet cible"; "3. Demander projet cible" -> "4. Mapper priorites"; "4. Mapper priorites" -> "5. Creer groupes si besoin"; "5. Creer groupes si besoin" -> "6. Creer les taches"; "6. Creer les taches" -> "7. Resume au user"; } ``` ### Phase 1 -- Lire et parser TICKETS.md Lire le fichier `TICKETS.md` du repertoire courant. Extraire : - La liste des tickets avec leur ID (T-001, T-002, ...) - Le titre de chaque ticket - La priorite (P0, P1, P2, P3) -- derivee de la section dans laquelle se trouve le ticket - Le corps complet (Pourquoi + A faire + Fichiers) -- sera la description de la tache **Parsing :** - Les sections `## P0`, `## P1`, `## P2`, `## P3` delimitent les groupes de priorite - Chaque `### T-XXX -- {Titre}` est un ticket - Tout le contenu entre deux `### T-XXX` constitue la description du ticket ### Phase 2 -- Discovery MCP (appels paralleles) Appeler ces outils MCP **en parallele** pour recuperer les metadonnees : 1. `list-projects` -- pour afficher les projets disponibles 2. `list-statuses` -- pour mapper le statut initial des taches 3. `list-priorities` -- pour mapper P0/P1/P2/P3 aux priorites Lesstime 4. `list-efforts` -- pour estimer l'effort 5. `list-tags` -- pour les tags disponibles ### Phase 3 -- Demander le projet cible Presenter a l'utilisateur la liste des projets Lesstime et lui demander : 1. **Quel projet ?** -- dans quel projet creer les taches 2. **Quel statut initial ?** -- ex: "To Do", "Backlog" 3. **Creer des groupes par priorite ?** -- ex: "P0 - Urgents", "P1 - Importants" 4. **Assigner a quelqu'un ?** -- optionnel 5. **Tags a ajouter ?** -- ex: "review", "tech-debt" ### Phase 4 -- Mapper les priorites Mapper les priorites du TICKETS.md aux priorites Lesstime : - P0 -> priorite la plus haute disponible (ex: "Urgent", "Critical") - P1 -> priorite haute (ex: "High") - P2 -> priorite moyenne (ex: "Medium") - P3 -> priorite basse (ex: "Low") Si le mapping n'est pas evident, demander confirmation a l'utilisateur. ### Phase 5 -- Creer les groupes (si demande) Si l'utilisateur veut des groupes par priorite : 1. Creer le groupe "P0 - Urgents (securite)" via `create-group` 2. Creer le groupe "P1 - Importants" via `create-group` 3. Creer le groupe "P2 - Documentation" via `create-group` 4. Creer le groupe "P3 - Nice to have" via `create-group` ### Phase 6 -- Creer les taches Pour chaque ticket dans TICKETS.md : 1. Construire le titre : `"T-XXX -- {titre}"` 2. Construire la description : le corps complet du ticket (Pourquoi + A faire + Fichiers) 3. Appeler `create-task` avec tous les parametres mappes **Optimisation :** Creer les taches en parallele par batch de 5 pour eviter de surcharger l'API. ### Phase 7 -- Resume Afficher un resume au user : - Nombre de taches creees - Repartition par priorite - Lien vers le projet Lesstime (si disponible) - Taches echouees (si applicable) avec raison ## Mapping par defaut | TICKETS.md | Lesstime Priority | Lesstime Group | |------------|-------------------|----------------| | P0 | Urgent/Critical | "P0 - Urgents (securite)" | | P1 | High | "P1 - Importants" | | P2 | Medium | "P2 - Documentation" | | P3 | Low | "P3 - Nice to have" | ## Common Mistakes - **Oublier la phase Discovery** -- les IDs de priorites/statuts varient par workspace Lesstime - **Ne pas demander confirmation** -- toujours valider le projet cible et le mapping avant de creer - **Creer sans groupes** -- les groupes rendent la vue Lesstime beaucoup plus lisible - **Description trop courte** -- inclure le corps complet du ticket, pas juste le titre - **Ne pas gerer les erreurs** -- si une tache echoue, continuer avec les suivantes et reporter a la fin