Ошибка Stream failed в Android Studio при подключении к LM Studio возникает из-за клиентского таймаута в 10 минут. Вы отправляете сложный запрос модели Gemma или Qwen, генерация идёт, но ровно через 600 секунд соединение рвётся. Сервер LM Studio при этом продолжает работать - проблема локализована на стороне IDE. Решение: изменить параметр timeout в конфигурационном файле MCP.json.
Эта ошибка воспроизводится на локальной машине, где оба приложения запущены на одном хосте. Сетевые задержки исключены. Стандартное ограничение Android Studio для длительных операций через Model Context Protocol составляет 600000 миллисекунд. Для задач, требующих генерации тысяч токенов, этого недостаточно. После правки конфигурации вы сможете держать соединение открытым 30 минут, час или бесконечно - в зависимости от выбранного значения.
Если вы работаете с мультиагентными пайплайнами, где модели обмениваются данными через MCP-сервер, стабильность соединения критична. Разрыв на середине цепочки вызовов ломает всю логику. В материале Gemma3-31B vs Qwen3.6-27B: выбор основной модели агента-кодера разбирается, как распределение ролей влияет на скорость отладки - и там таймауты становятся узким местом при длинных итерациях.
Почему Android Studio обрывает соединение с LM Studio: диагностика проблемы
Типичный сценарий выглядит так. Вы запускаете LM Studio с загруженной моделью на 30+ миллиардов параметров. В Android Studio через MCP-плагин отправляете запрос на генерацию сложного кода или рефакторинг большого файла. Модель начинает отвечать, токены идут в потоке. Через 10 минут появляется Stream failed. Соединение разорвано. При этом в интерфейсе LM Studio видно, что генерация продолжается, сервер не падал и не перезагружался.
Корень проблемы - клиентский таймаут на стороне Android Studio. IDE ожидает ответ от MCP-сервера в течение заданного интервала. Если за это время сервер не вернул финальный результат, клиент разрывает соединение. Это стандартное поведение для защиты от зависших запросов. Но для LLM-генерации 10 минут - это часто середина процесса, особенно на CPU-инференсе или при работе с моделями вроде Qwen3.5 122B.
Сетевые факторы исключены: оба приложения работают на localhost. Проблема воспроизводится стабильно при запросах, требующих более 600 секунд обработки. В логах Android Studio можно увидеть сообщение о превышении таймаута непосредственно перед ошибкой Stream failed.
Где прячется таймаут: роль файла MCP.json в Android Studio
Android Studio взаимодействует с LM Studio через протокол MCP (Model Context Protocol). Это стандартизированный способ подключения IDE к языковым моделям. Конфигурация MCP-клиента хранится в файле MCP.json. Именно там задаётся параметр, ограничивающий время ожидания ответа от сервера.
В официальной документации Android Studio этот параметр описан скупо. Разработчики IDE ориентировались на быстрые API-вызовы к облачным провайдерам, где ответ приходит за секунды. Локальные модели с длительной генерацией оказались edge-кейсом. Но сам механизм таймаута - это стандартная практика для любого HTTP-клиента, и он поддаётся настройке.
Для агентных сценариев с каскадными вызовами стабильное соединение ещё важнее. В статье Практические стратегии управления промптами для LLM разбираются цепочки вызовов, где разрыв на одном звене рушит всю последовательность. Настройка таймаута - это базовая гигиена для таких сценариев.
Структура MCP.json: где искать параметр timeout
Файл MCP.json находится в директории проекта Android Studio. Типичный путь: .idea/MCP.json или mcp/MCP.json в корне проекта. Если файла нет, он создаётся автоматически при первой настройке MCP-подключения через интерфейс IDE.
Базовая структура файла выглядит так:
{
"mcpServers": {
"lmstudio": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-lmstudio"],
"timeout": 600000
}
}
}
Параметр timeout задаётся в миллисекундах. Значение по умолчанию - 600000, что соответствует 10 минутам. Если поле отсутствует, клиент использует именно этот лимит. Чтобы увеличить таймаут, нужно явно прописать большее число.
Важный нюанс: параметр timeout может находиться на уровне конкретного сервера (как в примере выше) или на верхнем уровне конфигурации. Проверьте оба варианта. Если поле дублируется, приоритет имеет значение на уровне сервера.
Пошаговая инструкция: увеличиваем таймаут для работы с Gemma, Qwen и другими LLM
Порядок действий - четыре шага. Первый: найдите файл MCP.json в проекте. Используйте поиск по директории проекта или проверьте путь .idea/MCP.json. Второй: откройте файл в любом редакторе. Третий: добавьте или измените параметр timeout. Четвёртый: сохраните файл и перезапустите Android Studio.
Рекомендуемые значения таймаута зависят от сценария. Для моделей уровня Gemma-4-26B или Qwen3.6-27B на GPU с 16 ГБ видеопамяти хватает 20-30 минут - это 1200000 или 1800000 миллисекунд. Для CPU-инференса или моделей с 70+ миллиардами параметров ставьте 3600000 (час). Значение 0 отключает таймаут полностью - соединение будет ждать ответ бесконечно.
При установке бесконечного таймаута помните о риске: если сервер действительно зависнет, IDE заблокируется навсегда. Для production-пайплайнов лучше задать явный лимит с запасом, чем отключать таймаут совсем. Практика показывает, что час покрывает 99% сценариев даже для тяжёлых моделей.
Пример конфигурации MCP.json с увеличенным таймаутом
Конфигурация до изменений (стандартный таймаут 10 минут):
{
"mcpServers": {
"lmstudio": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-lmstudio"],
"timeout": 600000
}
}
}
Конфигурация после изменений (таймаут 30 минут):
{
"mcpServers": {
"lmstudio": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-lmstudio"],
"timeout": 1800000
}
}
}
Если вы используете несколько MCP-серверов, настройте таймаут для каждого индивидуально. Сервер для быстрых операций может сохранить стандартное значение, а сервер для тяжёлых генераций - получить увеличенный лимит. Это гибче, чем глобальная настройка.
После сохранения файла обязательно перезапустите Android Studio. Без перезапуска изменения не вступят в силу - IDE кэширует конфигурацию MCP при старте.
Проверка решения: как убедиться, что Stream failed больше не появится
Методика проверки проста. Отправьте заведомо длинный запрос, который раньше гарантированно вызывал ошибку. Например, запросите генерацию полного класса на 500+ строк кода или рефакторинг большого модуля. Засеките время. Если соединение держится дольше 10 минут и ответ приходит полностью - проблема решена.
Мониторьте логи Android Studio. Откройте вкладку Run или Debug, фильтруйте по ключевому слову MCP. При нормальной работе вы увидите сообщения о получении чанков ответа. Если таймаут всё ещё срабатывает, в логах будет явное указание на превышение лимита с указанием заданного значения.
В LM Studio отслеживайте статус генерации на вкладке Server. Там отображается количество отправленных токенов и состояние соединения. Если сервер продолжает генерировать после того, как IDE показала ошибку - таймаут точно на стороне клиента и требует дальнейшей настройки.
Для воспроизводимости теста используйте один и тот же промпт и одну модель. Сравните поведение до и после изменения MCP.json. Разница должна быть очевидной: раньше соединение рвалось на 10-й минуте, теперь держится до конца генерации.
Что делать, если увеличение таймаута не помогло: альтернативные причины и решения
Если ошибка Stream failed сохраняется после правки timeout, проверьте другие факторы. Первый кандидат - нехватка оперативной памяти. Когда LM Studio упирается в лимит RAM, сервер может аварийно завершить процесс, и клиент получит разрыв соединения независимо от настроек таймаута. Мониторьте потребление памяти через диспетчер задач или htop.
Второй фактор - ограничения на стороне LM Studio. Проверьте настройки сервера: параметр request_timeout в конфигурации LM Studio, лимиты на длину контекста, доступную память. Если сервер сам обрывает соединение по внутреннему таймауту, клиентские настройки не помогут.
Третий момент - конфликты версий. Убедитесь, что версия MCP-плагина для Android Studio совместима с версией LM Studio. После обновления любого из компонентов проверяйте совместимость. В статье Structured outputs в LLM: подводные камни strict-режима разбирается похожая проблема несовместимости между клиентом и сервером при работе с JSON-схемами - принцип диагностики аналогичен.
Альтернативный подход - разбиение длинных запросов на чанки. Если модель поддерживает потоковую генерацию, отправляйте запросы порциями по 200-300 токенов. Это снижает нагрузку на соединение и позволяет обойти таймаут без изменения конфигурации. Для агентных сценариев такой подход описан в сравнении провайдеров Qwen и Gemma для кодинга - там потоковая обработка используется для обхода ограничений на длину ответа.
Проверьте также файрвол и антивирус. На Windows некоторые защитные решения блокируют длительные соединения на localhost, принимая их за подозрительную активность. Временно отключите защиту для теста - если проблема исчезла, добавьте Android Studio и LM Studio в исключения.
Краткий итог: стабильная работа с локальными LLM в Android Studio
Основная причина ошибки Stream failed - клиентский таймаут в 10 минут, заданный в MCP.json. Изменение параметра timeout на значение от 1800000 (30 минут) до 3600000 (час) решает проблему для большинства сценариев. Файл находится в директории проекта, редактируется вручную, изменения применяются после перезапуска IDE.
Теперь вы можете комфортно работать с большими моделями на локальном сервере: отправлять сложные запросы, генерировать объёмный код, запускать многошаговые агентные цепочки. Соединение держится стабильно, сервер LM Studio успевает завершить генерацию, а вы получаете полный ответ без разрывов.
Если проблема возвращается - проверьте память, версии компонентов и настройки сервера. Таймаут в MCP.json - это первый и самый вероятный виновник, но не единственный возможный.