Руководство

Таймаут MCP? Проверьте запись, прежде чем повторять

7 мин чтенияОт команды Delta MCP

Ваш ИИ отправляет изменение в инструмент, а путь ответа оборван и помечен знаком вопроса. Рядом метки No reply и Check first.

Короткий ответ

Когда у вызова MCP выходит таймаут, невозможно понять, произошло ли изменение. Возможно, ваш ИИ потерял ответ, но не саму работу. Прежде чем повторять, проверьте в инструменте, что он пытался сделать. Повторяйте, только если этого там нет. Отправку никогда не повторяйте самостоятельно.

В этом руководстве

Почему таймаут не говорит, произошло ли изменение?

Ваш ИИ попросил инструмент сделать изменение и стал ждать. Ответа не пришло, и ИИ-приложение перестало ждать и сообщило об ошибке. Эта метка описывает ожидание, а не изменение. Если повторить уже сделанное изменение, появятся два тикета, две страницы или два сообщения.

Разработчики называют такое изменение записью. Возможны три варианта.

Что могло произойти, когда у вызова MCP вышел таймаут, и что даёт повтор в каждом случае
Что произошлоЕсть ли изменение в инструменте?Если повторить
Запрос так и не дошёл. Нет. Правильный вызов: изменение сделано один раз.
Инструмент ещё работает. Пока нет. Оно появится после того, как ваш ИИ сдался. Изменение сделано дважды, если повтор не безвреден.
Инструмент закончил, а ответ потерялся. Да. Изменение сделано дважды, если повтор не безвреден.

Спецификация MCP это предполагает. Клиент должен задавать таймаут для каждого запроса и, когда он истекает, отменить запрос и перестать ждать. Но отмена не даёт гарантии: сервер может её проигнорировать, если работа уже сделана или её нельзя остановить. Отмена может прийти и после отправки ответа.

В руководстве Stripe по API сказано то же: после сбоя соединения вы можете не знать, выполнился ли запрос. Там же советуют считать и ошибку сервера результатом с неизвестным исходом.

Что делать после таймаута, по порядку?

Делайте по порядку. Первые два шага занимают минуту.

  1. Остановите повторСейчас

    Скажите ИИ не повторять вызов: «Не повторяйте. Сначала проверьте, было ли сделано изменение.» Повтор сам по себе — так изменение и делается дважды.

  2. Смотрите в инструменте, а не в чате1 минута

    Откройте сам инструмент: страницу Notion, тикеты GitHub, папку. Поищите название или идентификатор, который вы запрашивали. Чат знает только, что вызов не удался.

  3. Прочитайте, что нашли2 минуты

    Нашли, всё готово: изменение сделано. Продолжайте и не повторяйте его.
    Нашли, но сделано наполовину: доделайте недостающее обновлением, а не новым созданием.
    Не нашли: оно не дошло или всё ещё выполняется. Подождите минуту и посмотрите снова.

  4. Повторите один раз и только безопасный вызовЗатем

    Если его всё ещё нет, повторите один раз. Таблица ниже показывает, какие вызовы безопасно повторять. Перед отправкой посмотрите, куда она попадёт.

  5. Если таймаут повторяется, устраните причинуПотом

    Вызов, который всегда выходит по таймауту, упёрся в слишком короткий лимит или слишком большую задачу. Увеличьте лимит для этого сервера или просите за один вызов меньше.

Какие вызовы безопасно повторять?

Вызов безопасно повторять, когда два выполнения дают тот же результат, что и одно. Чтение подходит. Многие изменения — нет. Стандарт HTTP считает безопасными для повтора PUT (задать значение) и DELETE, и таблица ниже следует ему. Подсказка idempotentHint инструмента или его описание важнее них.

Какие вызовы инструментов MCP безопасно повторять после таймаута и как проверить их перед повтором
ВызовПовторять как есть?Сначала проверить
Чтение: поиск, список, открытие Да. Ничего не меняется. Проверять нечего.
Задать значение: статус, название, метку Обычно да. Задать одно и то же значение дважды — тот же результат, как у HTTP PUT. Прочитать поле. Если его уже поменял человек, повтор перезапишет его правку.
Добавить к чему-то: комментарий, строку таблицы, строку текста Нет. Два раза — значит, добавлено дважды. Открыть элемент и найти там своё добавление.
Создать: страницу, тикет, файл Нет. Повтор создаст второй. Поискать по названию или идентификатору, который вы дали. Повторять, только если ничего не нашлось.
Удалить Обычно да, если вызов называет один конкретный элемент, как у HTTP DELETE. Но не «последний»: второй вызов попадёт в другой элемент. Поискать элемент. Нет его — значит, готово.
Отправить: сообщение, письмо, уведомление Никогда самостоятельно. Отправку нельзя взять назад. Посмотреть, куда она попала: список отправленного, канал, другая сторона. Если понять не можете, спросите, прежде чем отправить снова.

Может ли ключ идемпотентности остановить дубликат?

Иногда. Ключ идемпотентности — уникальная метка, которая отправляется вместе с запросом. Если одна и та же метка приходит дважды, сервис выполняет работу один раз и повторяет свой первый ответ. Его делают для запроса, на который не пришёл ответ.

  • Как работает ключ в Stripe. Его API версии v1 принимает ключ в запросах POST. Он сохраняет первый результат, даже ошибку, и возвращает его снова при повторе с тем же ключом. Ключи хранятся не меньше 24 часов. Тот же ключ с другими параметрами отклоняется.
  • Что должен делать повтор. Отправить тот же ключ и те же параметры. Stripe советует не повторять с новым ключом, пока вы не знаете исход первой попытки. Новый ключ на каждую попытку не защищает.
  • Что даёт MCP. Запрос tools/call несёт имя инструмента и его аргументы. Схема спецификации не определяет для него ключ идемпотентности. Но инструмент может принять такой ключ как собственный аргумент, поэтому читайте его аргументы.
  • Что может заявить инструмент. idempotentHint говорит, что повторный вызов с теми же аргументами не даёт дополнительного эффекта. Это только подсказка. Спецификация говорит, что клиенты никогда не должны опираться на подсказки от недоверенных серверов.

Поэтому ключ — бонус, а не план. Если инструмент его не предлагает, защищает проверка выше.

Как изменить таймаут MCP?

Слишком короткий лимит обрывает честную работу. Слишком длинный заставляет ждать. Где его задать, зависит от вашего ИИ-приложения. Вот настройки Claude Code.

Настройки Claude Code, которые ограничивают вызов инструмента MCP: что каждая из них ограничивает и значение по умолчанию
НастройкаЧто ограничиваетПо умолчанию
MCP_TOOL_TIMEOUT Сколько может идти один вызов инструмента, в миллисекундах. 100 000 000 мс, примерно 28 часов
timeout в .mcp.json То же для одного сервера. Перекрывает переменную для этого сервера. Жёсткий лимит: уведомления о прогрессе его не продлевают. Значение переменной
CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT Сколько вызов может молчать, без ответа и без прогресса, прежде чем прервётся. 0 отключает проверку. 5 минут для сетевых серверов, 30 минут для stdio
MCP_TIMEOUT Запуск сервера. Для удалённого сервера учитывается и в таймере на каждый запрос ниже. 30 000 мс, 30 секунд
CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS Когда вызов, который всё ещё идёт в основном разговоре, переходит в фоновую задачу. 0 отключает переход. Версия 2.1.212 или новее. 120 000 мс, 2 минуты

60 секунд по умолчанию для удалённых серверов. Сервер, к которому подключаются по HTTP, SSE или как коннектор claude.ai, имеет второй таймер. Он работает на каждый запрос до первого байта ответа сервера. Длится 60 секунд, если только MCP_TOOL_TIMEOUT, timeout сервера или MCP_TIMEOUT не заданы больше. У локальных серверов stdio таймера на запрос нет.

Чтобы задать его для одного сервера, добавьте "timeout": 600000 в его запись в .mcp.json. Это десять минут.

Медленный вызов не всегда неудачный. С версии 2.1.212 Claude Code переводит вызов MCP в основном разговоре в фоновую задачу через две минуты. Результат он доставит, когда вызов закончится.

В документации MCP для Cursor настройки таймаута нет. Спецификация MCP не называет числа. Она говорит, что SDK должны позволять задавать таймауты для каждого запроса, а клиент всегда должен держать максимум.

Для работы, которая идёт минутами, сервер может использовать MCP Tasks. Он сразу возвращает дескриптор, а клиент опрашивает результат, даже после переподключения. Нужна поддержка с обеих сторон, а клиенты поддерживают её по-разному.

Что делает Delta MCP, когда ответ потерялся?

Delta MCP — бесплатное приложение на вашем компьютере, между вашим ИИ и его инструментами. Когда на изменение не приходит ответ, оно не угадывает и не повторяет вслепую. Оно перечитывает инструмент.

Прежде чем изменение уйдёт, Delta MCP выбирает чтение, которое может показать, произошло ли оно. Это чтение объекта или повторное чтение списка. Если ответа нет, он сразу выполняет это чтение. Решает то, что показало чтение:

Что делает Delta MCP, когда на изменение нет ответа, в зависимости от того, что показало чтение
Что показало чтениеDelta MCP
Изменение сделано. Задача продолжается, а ответ говорит, что это проверено.
Изменение не сделано. Оно отправляет изменение ещё раз с теми же аргументами. Для сообщений и других отправок оно никогда не делает этого само. В таких случаях ответ говорит, что отправка не замечена, что она ещё может появиться, и задача останавливается.
Неясно, или по ним ничего не прочитать. Ответ говорит «исход неизвестен» и почему. Задача останавливается. Посмотрите в инструменте, прежде чем делать изменение снова.

Delta MCP не может откатить вызов, сделанный как есть. Если более ранний вызов удался, он остаётся сделанным, и ответ его перечисляет, чтобы ваш ИИ не повторил его. Каждая задача, которая что-то меняет, хранится в Activity с каждым изменением до и после.

Как задача проверяется и применяется

Вопросы

Безопасно ли повторять вызов MCP после таймаута?

Чтение безопасно. Изменение — нет, пока вы его не проверили. Таймаут говорит только, что ответ не пришёл: инструмент мог всё равно сделать изменение. Посмотрите в инструменте, есть ли оно, и повторяйте, только если его нет. Отправку никогда не повторяйте сами.

Прошла ли моя запись MCP, если запрос вышел по таймауту?

По таймауту этого не определить. Запрос мог так и не дойти, инструмент может ещё работать, или он закончил, а ответ потерялся. Откройте инструмент и найдите изменение.

Как увеличить таймаут вызова MCP в Claude Code?

Задайте MCP_TOOL_TIMEOUT в миллисекундах или добавьте поле timeout в запись сервера в .mcp.json. Для удалённого сервера задайте значение больше 60 000, чтобы снять 60-секундный таймер на каждый запрос. MCP_TIMEOUT — это ожидание запуска, а не лимит вызова инструмента.

Как изменить таймаут MCP в Cursor?

В документации MCP для Cursor настройки таймаута нет. Там сказано, что неудачный вызов помечается в чате как неудачный, и его можно повторить или посмотреть в журналах. Сначала проверьте, что уже сделал инструмент.

Есть ли у MCP ключи идемпотентности?

Нет. Вызов инструмента несёт имя инструмента и аргументы, а схема спецификации не определяет для него ключ идемпотентности. Инструмент может принимать свой ключ как аргумент. Он также может задать idempotentHint, который лишь подсказка.

Что делает Delta MCP, когда вызов инструмента не получает ответа?

Он сразу читает инструмент, чтобы понять, произошло ли изменение. Сделано: задача продолжается. Не сделано: изменение отправляется ещё раз. Сообщение или другая отправка никогда не уходит повторно сама. Неясно: ответ говорит «исход неизвестен», и задача останавливается.

Источники

  1. Model Context Protocol, Cancellation Клиенты должны задавать таймауты, отменять запрос и перестать ждать; отмена может прийти, когда работа уже сделана (редакция 2026-07-28).
  2. Model Context Protocol, Schema Reference Вызов инструмента несёт имя и аргументы, без ключа идемпотентности; аннотация idempotentHint; аннотации — только подсказки (редакция 2026-07-28).
  3. Model Context Protocol, Tasks Долговечный дескриптор для долгих операций: его опрашивают и получают после переподключения; нужна поддержка с обеих сторон.
  4. Claude Code, Connect Claude Code to tools via MCP Таймаут для каждого сервера, таймер 60 секунд на запрос для удалённых серверов, окно простоя и перевод в фон через две минуты.
  5. Claude Code, Environment variables MCP_TOOL_TIMEOUT, MCP_TIMEOUT, CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT и CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS со значениями по умолчанию.
  6. Cursor, Model Context Protocol (MCP) Неудачный вызов MCP помечается в чате как неудачный; можно повторить или посмотреть журналы; настройки таймаута не описано.
  7. Stripe, Idempotent requests Как работает ключ идемпотентности: первый результат сохраняется и возвращается снова; ключи хранятся не меньше 24 часов; другие параметры отклоняются.
  8. Stripe, Advanced error handling После сбоя соединения можно не знать, выполнился ли запрос; ошибка сервера — результат с неизвестным исходом; новый ключ не ставят, пока исход не известен.
  9. IETF, RFC 9110: HTTP Semantics Идемпотентные методы (безопасные, PUT и DELETE) и правило не повторять неидемпотентный запрос, если нельзя убедиться, что первый не был применён.
  10. Delta MCP, Writing a task Что Delta MCP делает, когда на изменение нет ответа: сделано, не сделано или исход неизвестен; отправка сама по себе не повторяется.
  11. Delta MCP, Activity and Undo Каждая задача, которая что-то меняла, хранится в Activity с каждым изменением до и после.

Читайте дальше

Попробуйте Delta MCP на своих задачах

Бесплатно, настройка за две минуты, и всё можно вернуть на место одним щелчком.

Бесплатно · Без аккаунта · Чип Apple или Intel

Бесплатно · Без аккаунта

Бесплатно · Без аккаунта

Следить за запуском

Для Mac, Windows и Linux. Аккаунт не нужен.

Скоро

Delta MCP совсем скоро

Бесплатное приложение для Mac, Windows и Linux скоро выйдет. Оставьте почту, и вы узнаете о выходе в ту же минуту. Аккаунт не нужен.

Адрес нужен лишь для одного письма о выходе Delta MCP. Без рассылок. Конфиденциальность