429 Rate Limited: исправление ошибок «слишком много запросов»
Устраните ошибки лимита запросов MCP 429 с помощью стратегий повторов, решений для пакетной обработки и экспоненциальной задержки. Узнайте об уровнях лимитов запросов и лучших практиках, позволяющих не достигать лимитов.
Что такое лимиты запросов
Лимиты запросов предотвращают злоупотребления и обеспечивают справедливое использование API MCP. При превышении лимита вы получаете ошибку 429 и должны подождать, прежде чем делать новые запросы.
Что вызывает срабатывание лимитов
- Слишком большое количество запросов за короткий промежуток времени
- Превышение квот запросов в минуту или в час
- Достижение лимитов одновременных запросов
- Повторное выполнение ресурсоёмких запросов (большие наборы результатов)
Уровни лимитов запросов
Бесплатный уровень
- Запросов в минуту: 60
- Запросов в час: 1 000
- Одновременных запросов: 5
- Подходит для: личного использования, тестирования, небольших рабочих процессов
Стандартный уровень
- Запросов в минуту: 300
- Запросов в час: 10 000
- Одновременных запросов: 20
- Подходит для: команд, регулярной автоматизации, умеренного использования
Корпоративный уровень
- Запросов в минуту: 1 000+
- Запросов в час: индивидуальные лимиты
- Одновременных запросов: 100+
- Подходит для: больших команд, интенсивной автоматизации, интеграций
Частые причины
1. Плотные циклы без задержек
Вызов инструментов MCP в цикле без какой-либо паузы между запросами:
Проблемный код
// ❌ ПЛОХО: нет задержки между запросами
for task_id in task_ids:
update_task(task_id, status="done")
// Сразу достигает лимита после 60 запросовРешение: добавьте задержки
// ✅ ХОРОШО: добавьте задержку между запросами
for task_id in task_ids:
update_task(task_id, status="done")
sleep(100) // задержка 100 мс = макс. 10 запр./сек2. Параллельные запросы, превышающие лимит
Одновременное выполнение слишком большого числа параллельных запросов:
Проблема
Запуск 50 параллельных запросов, когда лимит составляет 5 одновременных.
Решение: ограничьте параллелизм
- Обрабатывайте пакетами (по 5 для бесплатного уровня, по 20 для стандартного)
- Используйте очередь с максимальным числом обработчиков
- Реализуйте семафор или ограничитель запросов в своём коде
3. Отсутствие логики повторов
Когда вы достигаете лимита, немедленный повтор только ухудшает ситуацию:
Проблема
Немедленный повтор после ошибки 429 вызывает ещё больше ошибок.
Решение: экспоненциальная задержка
Ждите всё дольше между повторами: 1 с, 2 с, 4 с, 8 с, 16 с...
Решения и лучшие практики
1. Реализуйте экспоненциальную задержку
Стратегия повторов
def call_with_retry(func, max_retries=5):
retry_count = 0
base_delay = 1 // Начинаем с 1 секунды
while retry_count 2. Пакетные операции
Схема пакетной обработки
Объедините несколько обновлений в меньшее число вызовов API:
- Соберите все изменения, которые хотите внести
- Сгруппируйте в пакеты по 10–20 элементов
- Обрабатывайте каждый пакет с задержкой между пакетами
- Добавьте экспоненциальную задержку для повторов
Подробные примеры см. в руководстве по пакетной обработке.
3. Используйте заголовок Retry-After
Умный повтор
Ответ 429 включает заголовок Retry-After, который сообщает, как долго нужно ждать:
response = make_request()
if response.status == 429:
retry_after = response.headers.get('Retry-After', 60)
print(f"Rate limited. Waiting {retry_after}s...")
sleep(retry_after)
// Повторить запрос4. Оптимизируйте шаблоны запросов
Сократите количество запросов
- Используйте фильтры: получайте только нужные задачи, а не все
- Пагинация: получайте меньшие страницы вместо огромных наборов результатов
- Кэширование: при необходимости кэшируйте результаты чтения на несколько минут
- Агрегированные запросы: получайте данные один раз и обрабатывайте локально вместо повторных запросов
Пример: массовое обновление с защитой от лимитов
Полная реализация
import time
def bulk_update_tasks(task_ids, status):
BATCH_SIZE = 10
DELAY_BETWEEN_BATCHES = 1 // 1 секунда
MAX_RETRIES = 5
for i in range(0, len(task_ids), BATCH_SIZE):
batch = task_ids[i:i+BATCH_SIZE]
retry_count = 0
while retry_count Мониторинг и предотвращение
Лучшие практики
- Отслеживайте количество запросов: ведите учёт того, сколько запросов вы делаете
- Добавляйте задержки заранее: не ждите ошибок 429, чтобы замедлиться
- Используйте ограничители запросов: реализуйте ограничение запросов на стороне клиента
- Следите за заголовками ответов: проверяйте заголовок
X-RateLimit-Remaining - При необходимости повысьте уровень: если регулярно достигаете лимитов, рассмотрите повышение
Чек-лист быстрого исправления
- ✅ Добавлены задержки между запросами (минимум 100–200 мс)
- ✅ Реализована экспоненциальная задержка для повторов
- ✅ Одновременные запросы ограничены лимитом вашего уровня
- ✅ Используется заголовок
Retry-Afterиз ответов 429 - ✅ Операции обрабатываются пакетами вместо отдельных запросов
- ✅ Используются фильтры и пагинация для сокращения количества запросов
- ✅ Отслеживаются заголовки лимитов запросов в ответах
Когда повышать уровень
Рассмотрите повышение, если:
- Регулярно достигаете лимитов запросов, несмотря на оптимизации
- Вашим рабочим процессам требуется более 60 запросов в минуту
- Вы запускаете автоматизированные системы, которым нужна более высокая пропускная способность
- Размер команды растёт, и несколько человек используют MCP
- Вы создаёте интеграции, которые часто выполняют запросы
Свяжитесь с отделом продаж для получения цен корпоративного уровня и индивидуальных лимитов.