Подключить поиск в интернете к LM Studio можно двумя маршрутами одного стороннего проекта multi-search: как плагин LM Studio с панелью настроек в чате или как отдельный MCP-сервер, прописанный в mcp.json. В обоих случаях поиск выполняет сторонний код, а LM Studio выступает хостом инструментов. Ниже — требования, установка, настройка, учебный запрос и диагностика.
Граница локальной модели, LM Studio и стороннего поиска
LM Studio запускает модель на вашем железе и отдаёт ей чат. Веб-поиск в этой схеме — отдельная программа, которую модель вызывает как инструмент. Локальная модель сама по себе не ходит в интернет: она генерирует текст на основе весов и того, что попало в контекст.
В официальной документации LM Studio описана роль хоста: начиная с версии 0.3.17 приложение работает как Model Context Protocol (MCP) Host, то есть к нему можно подключать MCP-серверы и делать их доступными моделям. Документация отдельно предупреждает: часть MCP-серверов умеет запускать произвольный код, читать локальные файлы и пользоваться сетевым соединением, поэтому устанавливать их стоит только из доверенных источников.
Проект multi-search, который мы разбираем, — сторонний. Его README описывает два варианта поставки из одной кодовой базы: плагин LM Studio с панелью настроек для каждого чата и автономный MCP-сервер, который вставляется в mcp.json любого MCP-хоста. Автор заявляет, что для работы не нужны браузер, Playwright и API-ключи: используются встроенный в Node 22 fetch и небольшой преобразователь HTML в текст.
Отсюда первая граница ответственности. LM Studio отвечает за загрузку модели, чат и подключение серверов. Сторонний проект отвечает за сам поиск, ранжирование и извлечение страниц. Модель отвечает за то, вызовет ли она инструмент и как использует результат. Если ответ пришёл без ссылок, искать причину нужно на всех трёх уровнях.
| Уровень | Что делает | Где настраивается |
|---|---|---|
| Локальная модель | Генерирует текст, решает вызвать инструмент | Выбор модели в LM Studio |
| LM Studio | Хостит чат и MCP-серверы | mcp.json, вкладка Program |
| multi-search | Ищет, ранжирует, читает страницы | Панель плагина или переменные окружения |
Требования выбранного плагина и MCP из README
README проекта задаёт жёсткое требование к среде: Node 22 и выше. Причина указана прямо — используются встроенные глобальные fetch и AbortController. На более старой версии Node сборка и запуск не пройдут.
Дальше README перечисляет состав. Проект несёт 14 поисковых движков: duckduckgo, brave, bing, qwant, ecosia, startpage, metager, wikipedia, arxiv, reddit, stackoverflow, github, google-scholar, devdocs. Автор выделяет наиболее надёжные: duckduckgo, brave, bing, wikipedia, arxiv, reddit, stackoverflow, github. Про скрейпинговые движки вроде ecosia и startpage сказано, что они иногда упираются в ограничение частоты, а многодвижковый режим это переживает и оставляет то, что вернулось.
Установка описана так: клонировать репозиторий, перейти в каталог проекта, выполнить npm install и npm run build. После сборки появляется каталог dist/. Для режима MCP хост указывает на dist/mcp.js. Для режима плагина есть команды npm run dev (запуск с горячей перезагрузкой через lms dev) и npm run push (установка плагина в LM Studio через lms push).
Инструменты, которые проект отдаёт модели, перечислены в README отдельной таблицей:
| Инструмент | Что делает |
|---|---|
list_search_engines |
Возвращает доступные идентификаторы движков, текущий режим и значения по умолчанию |
web_search |
Ищет, отбрасывает мусор, дедуплицирует по URL, ранжирует и возвращает top K со score и host |
fetch_page |
Забирает одну страницу и возвращает извлечённый основной текст |
web_search_full |
Поиск плюс параллельная загрузка верхних страниц с извлечением, учитывающим запрос |
Отдельно упомянут get_weather — погода через wttr.in без API-ключа; README советует использовать его для погодных вопросов, поскольку сниппеты поиска почти не содержат фактических температур. Лицензия проекта — MIT.
Подключение выбранного маршрута по документам
Выбранный маршрут — локальный MCP-сервер. Установите Node подходящей версии и Git, затем получите код проекта. Название каталога в команде задано явно:
git clone https://github.com/potkolainen/LM-Multi-Online-Search-plugin.git multi-search
cd multi-search
npm install
npm run build
После сборки найдите абсолютный путь к dist/mcp.js. В LM Studio откройте Program → Install → Edit mcp.json. Добавьте объект в существующий mcpServers, сохранив другие серверы:
{
"mcpServers": {
"multi-search": {
"command": "node",
"args": ["/absolute/path/to/multi-search/dist/mcp.js"],
"cwd": "/absolute/path/to/multi-search",
"env": {
"MULTI_SEARCH_MODE": "multi",
"MULTI_SEARCH_MULTI_ENGINES": "duckduckgo,brave,bing,wikipedia"
}
}
}
}
Оба абсолютных пути замените своими. На Windows в JSON используйте прямые слеши или экранируйте обратные; если node отсутствует в PATH приложения, укажите путь к исполняемому файлу. Поля command/args/cwd/env и переменные взяты из README автора. Редакция этот сервер не запускала. После сохранения проверьте инструменты в LM Studio, затем отправьте учебный запрос ниже.
Альтернативный маршрут — плагин через npm run push. В нём используется панель настроек каждого чата: searchEnabled, mode, singleEngine, topK, snippetMaxChars, cacheTtlSec. Настройки панели относятся к плагину; у MCP-сервера соответствующие параметры передаются через env.
Проверка, что сервер поднялся, для MCP-варианта описана в README как дымовой тест: на стандартный ввод подаются два JSON-RPC запроса — initialize и tools/list, — и на стандартный вывод должны прийти два ответа, а на стандартный поток ошибок строка о готовности сервера на stdio.
Настройка доступного модели инструмента по документации LM Studio
Подключённый сервер сам по себе не гарантирует, что модель увидит инструмент. В режиме плагина первым делом проверяется searchEnabled: README называет это поле выключателем, при котором инструменты не отдаются модели вообще. Второй параметр — mode. README уточняет: в каждый момент модели отдаётся один инструмент web_search, соответствующий выбранному режиму.
Полезный для отладки переключатель — includeScoreBreakdown. README описывает, что при его включении в ответе появляется разбор оценки по каждому результату: host_trust, title_overlap, snippet_overlap, snippet_length_bonus. Это позволяет понять, почему конкретная ссылка оказалась в выдаче, а другая нет.
Кэш тоже настраивается. README описывает небольшой кэш LRU с TTL на 100 поисковых записей и 50 записей web_search_full, по умолчанию TTL 5 минут; значение cacheTtlSec равное 0 отключает кэширование. В ответах при попадании в кэш приходит from_cache: true.
Учебный запрос с требованием URL и признаками реального поиска
Возьмём пример. В чате LM Studio с включённым инструментом отправляем запрос, который требует ссылку и проверяемое утверждение. Формулировка ниже — наш учебный пример.
Найди в интернете официальную страницу документации LM Studio про MCP-серверы.
Верни: точный URL, заголовок страницы, одну фразу о том, с какой версии LM Studio
работает как MCP-хост, и дату, если она указана на странице.
Если поиск не сработал, скажи прямо, что инструмент не вызвался.
Признаки того, что поиск действительно состоялся, наблюдаемы. В интерфейсе появляется отметка о вызове инструмента. В ответе приходит URL. Для web_search README описывает поля ответа: returned, dropped_as_noise, from_cache, per_engine_counts.
Ещё один наблюдаемый признак — поле note. README указывает: когда лучший результат имеет очень низкую оценку (меньше 0.35) или после фильтрации не осталось результатов, в ответ добавляется поле с подсказкой модели переформулировать запрос или выбрать более конкретный инструмент. Появление такого поля — сигнал, что поиск работал, но ничего подходящего не нашёл.
Полезно сравнить поведение режимов. В single-режиме запрос уходит в один движок, по умолчанию duckduckgo. В multi-режиме README описывает разветвление: один и тот же запрос параллельно уходит во все отмеченные движки, результаты перемежаются по кругу — первый из каждого, затем второй из каждого, — дедуплицируются по URL с игнорированием ?query и #fragment и помечаются источником. Для фактических вопросов это даёт более широкое покрытие.
Ручная проверка возвращённой ссылки и совпадения фактов
Ссылка в ответе — ещё не доказательство. Порядок проверки простой и занимает минуту.
Сначала откройте URL в браузере и убедитесь, что страница существует и её заголовок совпадает с тем, что вернула модель. Редирект-обёртки поисковиков проект отбрасывает на этапе фильтрации: README перечисляет среди мусора пустые заголовки, обёртки вида duckduckgo.com/l/? и google.com/url? и не-http адреса. Если в ответе всё же оказалась обёртка, это повод перепроверить настройки.
Затем найдите на странице то утверждение, которое модель приписала источнику. Совпадение формулировки с текстом страницы — подтверждение. Расхождение означает, что модель дополнила ответ своими знаниями.
Отдельно проверьте содержимое страницы, если использовался web_search_full. README честно предупреждает: извлекатель не является полной реализацией Readability, и на тяжёлых одностраничных приложениях, лениво подгружаемом контенте и страницах с проверкой Cloudflare он вернёт меньше, чем браузерный скрапер. Компромисс — отсутствие нативных зависимостей и мгновенный холодный старт. Если текст страницы выглядит обрезанным, ограничение задаётся параметром maxContentLength, по умолчанию 10000 символов.
Диагностика отсутствующего вызова инструмента и ошибок
Модель ответила текстом без вызова инструмента. Первое, что проверяется, — searchEnabled в панели плагина: при выключенном состоянии инструменты не отдаются модели. Второе — режим: README уточняет, что модели доступен один инструмент web_search, соответствующий текущему режиму, так что ожидать одновременного появления обоих не стоит.
Инструмент вызвался, но вернул пусто. Посмотрите на поля ответа. dropped_as_noise показывает, сколько результатов отсеяла фильтрация, per_engine_counts — сколько дал каждый движок. Нулевые значения могут означать отсутствие результатов, сетевую ошибку или ограничение частоты запросов. README советует для устойчивости держать в multi-режиме duckduckgo, brave, bing и wikipedia.
Сервер не поднимается. Для MCP-варианта прогоните дымовой тест из README: два JSON-RPC запроса на стандартный ввод, ожидаются два ответа на стандартном выводе и строка готовности на стандартном потоке ошибок. Пустой вывод означает, что сборка не выполнена или путь в mcp.json указан неверно. Проверьте версию Node — требуется 22 и выше.
Ответ приходит, но контекст переполняется. Уменьшите topK, snippetMaxChars и fetchTopN. Документация LM Studio предупреждает, что некоторые MCP-серверы могут расходовать слишком много токенов для локальной модели.
Модель путает инструменты. Если задан погодный вопрос, README советует get_weather для погодных вопросов: поисковые сниппеты редко содержат фактическую температуру. Для остальных случаев помогает явная формулировка запроса с требованием ссылки и запретом отвечать по памяти.
Частые вопросы
Что такое lm studio web search?
Это подключение внешнего поискового инструмента к чату LM Studio. Само приложение запускает модель на вашем железе, а поиск выполняет сторонний сервер или плагин, который модель вызывает как инструмент. В официальной документации LM Studio описана роль хоста MCP-серверов начиная с версии 0.3.17.
Как подключить поиск в интернете к LM Studio через плагин?
Соберите проект командой npm install и npm run build, затем установите плагин в приложение командой lms push. После установки в чате появится панель настроек с полями режима, движка, лимитов и кэша. Выключатель searchEnabled управляет тем, отдаются ли инструменты модели.
Какой плагин для веб-поиска в LM Studio выбрать?
В разборе используется сторонний проект multi-search с двумя вариантами поставки: плагин LM Studio и автономный MCP-сервер. Он несёт 14 движков и режим параллельного опроса нескольких движков. Требование к среде одно — Node 22 и выше.
Почему модель не вызывает инструмент поиска?
Проверьте searchEnabled в панели плагина: при выключенном состоянии инструменты не отдаются модели вовсе. Убедитесь, что сервер поднялся, а в режиме MCP — что путь к dist/mcp.js в mcp.json указан верно. Формулируйте запрос с явным требованием ссылки.
Нужен ли API-ключ для поиска в LM Studio?
Для разобранного стороннего маршрута README заявляет работу без API-ключей: используются встроенный в Node 22 fetch и преобразователь HTML в текст. Это свойство конкретного проекта. Другие поисковые MCP-серверы могут требовать собственный ключ.
