API Outils
Découvrir et exécuter les outils d'une organisation depuis un registre unique.
Chaque outil d'organisation est déclaré une seule fois dans convex/tools/definitions/, puis exposé sur trois surfaces : cette API REST, le serveur MCP et la commande pnpm tools. Ajouter un outil au registre le publie partout en même temps.
Points d'entrée
GET /api/v1/tools
GET /api/v1/tools/:name
POST /api/v1/tools/:name| Point d'entrée | Description |
|---|---|
GET /api/v1/tools | Liste tous les outils avec leur schéma JSON |
GET /api/v1/tools/:name | Schéma JSON d'un seul outil |
POST /api/v1/tools/:name | Exécute un outil, le corps JSON servant d'entrée |
Authentification
Créez une clé d'API d'organisation depuis les réglages de l'organisation :
/orgs/{orgSlug}/settings/api-keysEnvoyez-la dans l'en-tête x-api-key ou comme jeton porteur :
x-api-key: VOTRE_CLE_API
Authorization: Bearer VOTRE_CLE_APILa clé détermine l'organisation : aucun identifiant d'organisation n'est jamais passé dans l'entrée d'un outil.
Un jeton d'accès OAuth délivré à un client MCP s'envoie de la même façon, comme jeton porteur. Les clés d'API se reconnaissent à leur préfixe chb_, tout le reste est vérifié comme un jeton OAuth : les deux moyens d'authentification aboutissent aux mêmes gestionnaires.
Outils disponibles
| Outil | Catégorie | Accès | Entrée | Retour |
|---|---|---|---|---|
get_organization | organization | lecture | aucune | Identifiant, nom et slug de l'organisation |
list_members | members | lecture | { cursor?, limit? } | { members, count, nextCursor, hasMore } |
get_member | members | lecture | { memberId } | Un membre |
get_subscription | billing | lecture | aucune | Formule, statut, sièges et limites du plan |
Réponse de découverte
GET /api/v1/tools renvoie un schéma JSON par outil, directement exploitable par un modèle de langage ou un générateur de client :
{
"total": 4,
"tools": [
{
"name": "get_member",
"description": "Get a single organization member by member id. Use list_members to discover ids.",
"category": "members",
"access": "read",
"inputSchema": {
"type": "object",
"properties": {
"memberId": { "type": "string", "minLength": 1 }
},
"required": ["memberId"]
},
"endpoint": "/api/v1/tools/get_member",
"method": "POST",
"route": { "method": "GET", "path": "/api/v1/members/:memberId" }
}
]
}route est l'alias REST de l'outil, ou null quand il ne répond que sur /api/v1/tools/<nom>. Les deux chemins exécutent le même outil ; l'alias renvoie la charge utile sans l'enveloppe data.
Réponse d'exécution
Une exécution réussie renvoie la charge utile de l'outil sous data :
{
"data": {
"members": [{ "id": "member_123", "role": "owner" }],
"count": 1,
"nextCursor": null,
"hasMore": false
}
}Ligne de commande
export CHAMBREE_API_KEY="VOTRE_CLE_API"pnpm tools list