Limites de débit
Chaque token API est limité en nombre d'appels par minute selon le plan souscrit. Le quota est partagé entre les appels d'outils MCP et les requêtes de l'API REST.
Limites par plan
| Plan | Requêtes / min | Note |
|---|---|---|
| Gratuit | 60 | Valeur par défaut |
| Indie | 60 | |
| Agent | 60 | |
| Scale | 60 | |
| Enterprise | 120 |
La limite est par token API, pas par adresse IP ni par compte. Côté MCP, seuls les appels d'outils (tools/call) sont comptés : initialize, tools/list et les notifications ne consomment pas ce quota.
Fenêtre glissante
Le compteur utilise une fenêtre glissante de 60 secondes (pas une fenêtre fixe). Si vous émettez 60 requêtes en 5 secondes avec le plan gratuit, vous serez limité pendant ~55 secondes — le temps que les premières requêtes sortent de la fenêtre.
Réponse HTTP 429
Lorsque la limite est dépassée, l'API retourne :
HTTP/1.1 429 Too Many Requests
Retry-After: 12
{
"error": {
"code": "rate_limited",
"message": "Rate limit exceeded. Retry in 12 s."
}
}Sur le serveur MCP, un appel d'outil au-delà de la limite ne renvoie pas d'erreur HTTP : il renvoie un résultat d'outil avec isError: true et le délai d'attente, que l'assistant peut lire pour ralentir. Aucun crédit n'est débité.
Stratégie de backoff recommandée
Implémentez un backoff exponentiel à partir de 1 seconde. 4 tentatives couvrent la plupart des cas.
import time
import requests
def call_with_backoff(url, headers, params, max_retries=4):
delay = 1
for attempt in range(max_retries):
r = requests.get(url, headers=headers, params=params)
if r.status_code == 429:
time.sleep(delay)
delay *= 2
continue
return r
raise Exception("Rate limit exceeded after retries")Limite de capacité serveur (503)
En plus des limites par plan, le serveur accepte au maximum 15 requêtes DB simultanées (toutes clés confondues). Si cette limite est atteinte, vous recevez HTTP 503 avec le code at_capacity. Contrairement au 429, il n'y a pas de file d'attente : réessayez après 2–5 secondes.