mantis-manager
This skill manages Mantis Bug Tracker via the REST API, providing full CRUD for issues, projects, users, tokens, attachments, and cross-instance sync. It requires MANTIS_BASE_URL and MANTIS_API_TOKEN and issues HTTP requests to configured Mantis instances.
Mantis BT Manager - OpenClaw Skill
Un skill OpenClaw complet pour gérer Mantis Bug Tracker via son API REST officielle.
🚀 Installation et Configuration
Variables d'Environnement Requises
MANTIS_BASE_URL=https://your-mantis-instance.com/api/rest
MANTIS_API_TOKEN=your_api_token_here
Génération du Token API
- Connectez-vous à votre instance Mantis BT
- Allez dans Mon Compte → Tokens API
- Cliquez sur Créer un Token API
- Copiez le token généré dans votre variable d'environnement
📖 Guide de Démarrage Rapide
Exemple 1 : Lister tous les tickets
User: "Liste tous les tickets"
→ GET /issues
Exemple 2 : Créer un ticket
User: "Crée un ticket avec le titre 'Bug de connexion' et la description 'Impossible de se connecter'"
→ POST /issues
{
"summary": "Bug de connexion",
"description": "Impossible de se connecter",
"project": {"id": 1},
"category": {"name": "General"}
}
Exemple 3 : Lister les projets
User: "Affiche tous les projets"
→ GET /projects
🔄 Gestion Multi-Instances
Basculer Entre Instances
Ce skill supporte plusieurs instances Mantis grâce à un système de résolution contextuelle.
Utilisation Temporaire (Une Seule Opération)
User: "Utilise https://staging.mantis.com/api/rest pour cette requête"
→ Set temporary_base_url = "https://staging.mantis.com/api/rest"
→ Perform operation
→ Clear temporary_base_url
Utilisation Session (Plusieurs Opérations)
User: "Connecte-toi à l'instance du client ABC"
→ Set user_base_url = "https://client-abc.mantis.com/api/rest"
→ Set user_token = "client_abc_token"
→ All subsequent operations use this instance
Retour aux Valeurs Par Défaut
User: "Reviens à l'instance par défaut"
→ Clear user_base_url
→ Clear user_token
Ordre de Précédence
Base URL
temporary_base_url(priorité la plus haute)user_base_urlMANTIS_BASE_URL(env)
Token
temporary_token(priorité la plus haute)user_tokenMANTIS_API_TOKEN(env)
📋 Exemples de Cas d'Usage
Cas 1 : Gestion de Tickets
# Créer un ticket
User: "Crée un ticket prioritaire avec le titre 'Erreur serveur 500'"
# Ajouter une note
User: "Ajoute une note au ticket 123 : 'Problème résolu après redémarrage'"
# Assigner à un utilisateur
User: "Assigne le ticket 123 à l'utilisateur 5"
# Monitorer le ticket
User: "Je veux suivre le ticket 123"
# Ajouter un tag
User: "Ajoute le tag 'critique' au ticket 123"
Cas 2 : Gestion de Projets
# Créer un projet
User: "Crée un projet nommé 'Site Web E-commerce'"
# Ajouter une version
User: "Crée la version 1.0 pour le projet 5"
# Ajouter un utilisateur
User: "Ajoute l'utilisateur 10 au projet 5 comme développeur"
# Lister les sous-projets
User: "Affiche les sous-projets du projet 5"
Cas 3 : Gestion des Utilisateurs
# Créer un utilisateur
User: "Crée un utilisateur 'john.doe' avec l'email 'john@example.com'"
# Voir mes infos
User: "Affiche mes informations utilisateur"
# Réinitialiser mot de passe
User: "Réinitialise le mot de passe de l'utilisateur 10"
# Générer un token API
User: "Crée un token API pour moi"
Cas 4 : Multi-Instances (Avancé)
# Comparer un ticket entre prod et staging
User: "Compare le ticket 123 entre production et staging"
→ Action 1:
Set temporary_base_url = "https://prod.mantis.com/api/rest"
GET /issues/123
Save result as "prod_issue"
→ Action 2:
Set temporary_base_url = "https://staging.mantis.com/api/rest"
GET /issues/123
Save result as "staging_issue"
→ Compare prod_issue vs staging_issue
# Gérer plusieurs clients
User: "Génère un rapport quotidien pour tous mes clients"
→ For each client (A, B, C):
Set user_base_url = client.mantis_url
Set user_token = client.token
GET /issues?filter_id=daily_filter
Collect stats
Clear context
→ Generate consolidated report
Cas 5 : Filtres et Recherches Avancées
# Lister les tickets d'un filtre
User: "Affiche les tickets du filtre 10"
→ GET /issues?filter_id=10
# Tickets assignés à moi
User: "Montre mes tickets assignés"
→ GET /issues (avec filtre handler_id = me)
# Tickets non assignés
User: "Liste les tickets sans assignation"
→ GET /issues (avec filtre unassigned)
# Pagination
User: "Affiche les 100 premiers tickets du projet 5"
→ GET /projects/5/issues?page_size=100&page=1
Cas 6 : Notes et Time Tracking
# Ajouter une note avec temps
User: "Ajoute une note au ticket 123 : 'Travail effectué' avec 2h30 de temps"
→ POST /issues/123/notes
{
"text": "Travail effectué",
"time_tracking": "PT2H30M"
}
# Ajouter une note privée
User: "Ajoute une note privée au ticket 123"
→ POST /issues/123/notes
{
"text": "Note confidentielle",
"view_state": {"name": "private"}
}
# Ajouter une note avec pièce jointe
User: "Ajoute une note avec un fichier log au ticket 123"
→ POST /issues/123/notes
{
"text": "Voir fichier log joint",
"files": [{"name": "error.log", "content": "base64..."}]
}
🎯 Fonctionnalités Principales
Issues (Tickets)
- ✅ CRUD complet (Create, Read, Update, Delete)
- ✅ Monitoring/unmonitoring
- ✅ Gestion des tags
- ✅ Relations entre tickets
- ✅ Pièces jointes
- ✅ Notes avec time tracking
- ✅ Filtres et recherches avancées
Projects
- ✅ CRUD complet
- ✅ Sous-projets
- ✅ Versions/releases
- ✅ Gestion des membres avec niveaux d'accès
Users
- ✅ CRUD complet
- ✅ Réinitialisation de mot de passe
- ✅ Génération de tokens API
- ✅ Gestion des permissions
Configuration
- ✅ Lecture/modification des options
- ✅ Localisation multilingue
- ✅ Impersonation d'utilisateur
Multi-Instances
- ✅ Basculement dynamique entre instances
- ✅ Gestion de contexte (temporary/session/env)
- ✅ Support de plusieurs clients/environnements
- ✅ Comparaison et synchronisation cross-instance
📊 Structure des Données
Statuts d'Issues
new(10) - Nouveaufeedback(20) - Feedback demandéacknowledged(30) - Reconnuconfirmed(40) - Confirméassigned(50) - Assignéresolved(80) - Résoluclosed(90) - Fermé
Priorités
none(10) - Aucunelow(20) - Bassenormal(30) - Normalehigh(40) - Hauteurgent(50) - Urgenteimmediate(60) - Immédiate
Severités
feature(10) - Fonctionnalitétrivial(20) - Trivialetext(30) - Textetweak(40) - Ajustementminor(50) - Mineuremajor(60) - Majeurecrash(70) - Crashblock(80) - Bloquante
Niveaux d'Accès
viewer(10) - Lecteurreporter(25) - Rapporteurupdater(40) - Modificateurdeveloper(55) - Développeurmanager(70) - Manageradministrator(90) - Administrateur
⚠️ Gestion des Erreurs
Le skill gère automatiquement les erreurs HTTP :
- 401 Unauthorized - Token invalide ou expiré
- 403 Forbidden - Permissions insuffisantes
- 404 Not Found - Ressource non trouvée
- 422 Unprocessable Entity - Erreur de validation
- 500 Internal Server Error - Erreur serveur
🔒 Sécurité
Bonnes Pratiques
- Ne jamais commit les tokens - Utilisez des variables d'environnement
- Tokens à durée limitée - Définissez une date d'expiration
- Permissions minimales - Utilisez le niveau d'accès minimum requis
- Rotation des tokens - Changez régulièrement vos tokens API
Impersonation
Pour les administrateurs, l'impersonation permet d'agir au nom d'un autre utilisateur :
User: "Agis comme john.doe pour cette opération"
→ Add header: X-Impersonate-User: john.doe
→ Perform operation
📖 Ressources Supplémentaires
- Documentation API :
https://your-mantis-instance.com/api/rest/swagger.yaml - GitHub Mantis BT : https://github.com/mantisbt/mantisbt
- Documentation Mantis BT : https://mantisbt.org/documentation.php
- Postman Collection : Contactez votre administrateur Mantis
🆘 Support et Dépannage
Problème : Token invalide (401)
Solution : Vérifiez que MANTIS_API_TOKEN est correctement défini et que le token n'a pas expiré.
Problème : Permissions insuffisantes (403)
Solution : Vérifiez votre niveau d'accès. Certaines opérations nécessitent des permissions spéciales.
Problème : Ressource non trouvée (404)
Solution : Vérifiez que l'ID de la ressource existe et que vous avez accès au projet concerné.
Problème : Erreur de validation (422)
Solution : Vérifiez la structure des données envoyées. Consultez les exemples dans SKILL.md.
Problème : Instance non accessible
Solution :
- Vérifiez
MANTIS_BASE_URL(doit se terminer par/api/rest) - Testez l'accès avec curl :
curl -H "Authorization: Bearer YOUR_TOKEN" YOUR_BASE_URL/users/me - Vérifiez les pare-feu et restrictions réseau
🔍 Vérification de la Connexion
Pour tester votre configuration :
User: "Affiche mes informations utilisateur"
→ GET /users/me
Si cela fonctionne, votre configuration est correcte ! ✅
📝 Notes de Version
v1.0 - Février 2026
- ✅ Support complet de l'API REST Mantis BT
- ✅ Gestion multi-instances avec résolution contextuelle
- ✅ 60+ endpoints documentés
- ✅ Exemples complets pour tous les cas d'usage
- ✅ Gestion robuste des erreurs
- ✅ Documentation exhaustive
Auteur : OpenClaw Skill
Licence : À définir selon votre projet
Contribution : Les contributions sont les bienvenues !
Pour plus de détails, consultez SKILL.md pour la documentation complète de l'API.