MCP-сервер
Подключите Claude Code, Cursor, Claude Desktop или любой MCP-клиент к инструментам данных и браузерному агенту с помощью одного URL и вашего API-ключа.
MCP-сервер Lovely Router позволяет агенту самостоятельно спланировать задачу, найти инструмент, прочитать его схему входных данных, запустить его и прочитать результаты. Через него также доступен браузерный агент. Каждый вызов проходит через тот же API, что и REST, поэтому оплата, ограничения и ошибки полностью совпадают.
| Параметр | Значение |
|---|---|
| URL | https://lovelyrouter.com/mcp |
| Транспорт | Streamable HTTP (JSON-RPC поверх POST, ответы в JSON) |
| Аутентификация | Authorization: Bearer lr-..., тот же ключ, что и для REST API |
Подключение клиента#
Сначала создайте ключ в разделе API-ключи. Для агентов разумно использовать ключ с лимитом расходов: см. контроль расходов.
Добавьте сервер одной командой:
claude mcp add --transport http lovely-tools https://lovelyrouter.com/mcp \
--header "Authorization: Bearer $LOVELY_API_KEY"Так сервер добавляется только в текущий проект. Добавьте --scope user, чтобы использовать его во всех проектах. Выполните claude mcp list, чтобы проверить подключение.
Чтобы поделиться сервером с командой, вместо этого закоммитьте .mcp.json в корень проекта. Claude Code подставляет ${LOVELY_API_KEY} из окружения каждого участника, так что ключ не попадает в файл:
{
"mcpServers": {
"lovely-tools": {
"type": "http",
"url": "https://lovelyrouter.com/mcp",
"headers": { "Authorization": "Bearer ${LOVELY_API_KEY}" }
}
}
}Проверка подключения#
Сервер работает по обычному JSON-RPC, поэтому его можно вызвать через cURL. Этот запрос выводит список доступных инструментов:
curl https://lovelyrouter.com/mcp \
-H "Authorization: Bearer $LOVELY_API_KEY" \
-H "content-type: application/json" \
-d '{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}'Инструменты сервера#
Два инструмента ищут и читают веб-страницы. Сервер подсказывает агенту использовать их для всего, что нужно найти или прочитать, а браузерного агента оставлять для страниц, с которыми нужно взаимодействовать.
| Инструмент | Что делает | Аргументы |
|---|---|---|
web_search | Ищет в интернете: до 50 результатов, у каждого — заголовок, URL, дата и краткое содержание, написанное для модели. Операторы в запросе: site:, -site:, "exact phrase", -word, lang:, after:, before:. $0.0009 за поиск; поиск без результатов ничего не стоит. | query (обязательно), count, need_content, question |
web_fetch | Читает одну страницу в виде чистого Markdown: заголовок и текст, без меню и рекламы. $0.0009 за страницу; страница, которую не удалось прочитать, ничего не стоит. Длинная страница приходит частями, и чтение продолжения бесплатно. | url либо run_id и offset для продолжения |
Два инструмента создают изображения с помощью GPT Image 2.5 (или GPT Image 2, если 2.5 недоступна) и оплачиваются как Images API: $0.04 за изображение любого размера, при неудаче — ничего.
| Инструмент | Что делает | Аргументы |
|---|---|---|
generate_image | Создаёт изображение по описанию, при необходимости — по референсам (URL, data: URL или ссылка на ранее созданное изображение). Возвращает ссылку для скачивания, которая 24 часа работает без ключа, и команду curl для сохранения. Если изображение не готово за время ожидания, возвращается идентификатор задания. | prompt (обязательно), size, images |
get_image | Дожидается изображения, которое ещё создавалось, и возвращает ссылку на него. Бесплатно. | job_id (обязательно) |
Пять инструментов работают с каталогом данных. Сервер подсказывает агенту планировать через suggest_tools (или search_tools, если нужен один инструмент), читать схему через get_tool, а затем вызывать run_tool.
| Инструмент | Что делает | Аргументы |
|---|---|---|
suggest_tools | Планирует задачу: инструмент, который запускается первым, необязательный второй инструмент и альтернативы — каждый с примером входных данных и оценкой стоимости. Бесплатно. | task (обязательно), limit |
search_tools | Поиск по каталогу по ключевым словам. Возвращает идентификаторы инструментов с ценами. Бесплатно. | query (обязательно), limit |
get_tool | Схема входных данных инструмента, пример входных данных и цена. В описаниях полей указан синтаксис запросов инструмента, например операторы поиска X. Бесплатно. | tool (обязательно) |
run_tool | Запускает инструмент и возвращает результаты; оплата списывается с баланса. | tool (обязательно), input (обязательно), max_results, fields |
get_run | Статус и результаты запуска. Дожидается его завершения. | run_id (обязательно), offset, fields |
Четыре инструмента управляют браузерным агентом. Он нужен для страниц, с которыми агенту приходится взаимодействовать: вход в аккаунт, формы, многошаговые сценарии. Чтобы просто прочитать содержимое страницы, web_fetch быстрее и дешевле. Браузер работает в облаке и не может открывать localhost или частные адреса.
| Инструмент | Что делает | Аргументы |
|---|---|---|
browser_run | Запускает браузерный запуск по цели и стартовому URL и возвращает его состояние примерно через 45 секунд. | goal (обязательно), start_url (обязательно), mode, max_steps, output_schema, model, secrets, profile, save_profile, files, approve, human_timeout_minutes |
browser_status | Статус браузерного запуска. Ждёт продвижения до 45 секунд. | run_id (обязательно) |
browser_reply | Отвечает запуску, ожидающему человека: answer на его вопрос, approve со значением true или false (с необязательным reason) или done после перехвата управления. | run_id (обязательно), одно из answer, approve, done |
browser_takeover | Немедленно передаёт браузер пользователю. После этого в статусе запуска появляется URL живого просмотра. | run_id (обязательно), instructions |
Каждый аргумент браузера описан в руководствах по браузерному агенту: режимы, структурированный вывод, вход в аккаунты и профили, файлы и участие человека. Пароли и одноразовые коды не передаются через MCP: агент обращается к секретам из хранилища по имени, а коды человек отправляет через API.
Что возвращают инструменты#
Ответы рассчитаны на чтение моделью и намеренно короткие, потому что агенты обрезают или теряют длинные результаты инструментов:
web_searchвозвращает пронумерованные результаты с заголовком, сайтом, датой, URL и кратким содержанием.web_fetchвозвращает страницу частями примерно по 12 000 символов вместе сrun_idиoffsetдля чтения продолжения.run_toolиget_runвозвращают строку с идентификатором запуска, инструментом, статусом, числом результатов и списанной суммой, а затем по строке на каждый результат — без пустых полей и с обрезанным длинным текстом. В один ответ помещается около 12 000 символов, а последняя строка подсказывает, как получить остальное:get_runсoffsetилиfields, чтобы оставить только нужные ключи. Полный JSON по-прежнему доступен черезGET /v1/tools/runs/{run_id}.- Остальные инструменты возвращают в виде текста тот же JSON, что и соответствующий REST-эндпоинт:
POST /v1/tools/suggest,POST /v1/tools/discoverиGET /v1/tools/{id}. - Ошибки возвращаются как результат инструмента с
isError: trueи сообщением, чтобы агент мог скорректировать действия. Еслиrun_toolотклоняет входные данные, в ответе перечислены входные поля инструмента и приведён пример. generate_imageиget_imageвозвращают строку с идентификатором задания, размером изображения, размером файла и списанной суммой, ссылку для скачивания и командуcurlдля неё. Это такое же задание, как созданное черезPOST /v1/images/jobs, поэтому оно видно в логах, а изображение 7 дней доступно поGET /v1/images/jobs/{id}/contentс вашим ключом.- Долгие запуски.
run_toolждёт до 50 секунд, потому что большинство клиентов прерывают вызов инструмента примерно через минуту. Запуск, который всё ещё идёт после этого, возвращается какStill running. Call get_run with this run id to get the results.вместе с данными запуска. Клиент, допускающий более долгие вызовы инструментов, может добавить?wait=к URL сервера (от 10 до 280 секунд).
Без ключа#
suggest_tools, search_tools и get_tool работают без ключа, поэтому агент может просматривать каталог ещё до того, как вы подключите ключ. run_tool, get_run и инструменты браузера возвращают ошибку аутентификации, пока ключ не добавлен.
Как выглядит сессия агента#
Подключите сервер и попросите Claude Code: «Найди веганские рестораны в Остине и расскажи, на что жалуются в отзывах о них». Типичная сессия:
- План. Агент вызывает
suggest_toolsс задачей. План предлагает сначала запуститьgoogle-maps-places, затемgoogle-maps-reviews, с оценкой $0.0585 при лимитах по умолчанию. - Чтение схемы. Агент вызывает
get_toolс{"tool": "google-maps-places"}, чтобы увидеть входные поля. - Поиск мест. Агент вызывает
run_tool:JSON{ "tool": "google-maps-places", "input": {"searchTerms": ["vegan restaurant"], "location": "Austin, Texas, USA"}, "max_results": 10 }Возвращаются десять мест с их
placeId. Стоимость: $0.00075 + 10 × $0.000238 = $0.00313. - Получение отзывов. Агент снова вызывает
run_toolс идентификаторами мест, по пять отзывов на место:JSON{ "tool": "google-maps-reviews", "input": {"placeIds": ["ChIJ...", "ChIJ..."], "maxReviews": 5, "reviewsSort": "newest"}, "max_results": 50 }Возвращаются пятьдесят отзывов. Стоимость: 50 × $0.000675 = $0.03375.
- Ответ. Агент читает отзывы и обобщает жалобы. Вся задача стоила около $0.08, а оба запуска видны в разделе Инструменты панели управления.
Цены выше — текущие. get_tool и suggest_tools всегда возвращают актуальную цену.
Контроль расходов#
- Выдайте агенту отдельный ключ с лимитом расходов. Запуск, который может превысить лимит ключа, отклоняется с кодом
402до какого-либо списания. См. API-ключи. - Требуйте
max_resultsв каждом запуске. Лимит ограничивает стоимость: плата за вызов плюс плата за результат, умноженная наmax_results. Без него применяется значение инструмента по умолчанию. Достаточно строки в промпте или инструкциях проекта: «Всегда задавай max_results и спрашивай меня перед любым запуском, который может стоить больше $0.50». - Сначала планируйте.
suggest_toolsиget_toolбесплатны и показывают цену, так что агент может проверить максимальную стоимость запуска до его начала. - Проверяйте расходы. Каждый запуск и списание по нему перечислены в разделе Инструменты. Неудачные запуски без результатов ничего не стоят.
В вашей учётной записи одновременно может идти не больше 10 запусков. Как оплачиваются запуски, см. в разделе Запуск инструмента.