Lovely RouterДокументация
Получить ключ
Инструменты данных

MCP-сервер

Подключите Claude Code, Cursor, Claude Desktop или любой MCP-клиент к инструментам данных и браузерному агенту с помощью одного URL и вашего API-ключа.

MCP-сервер Lovely Router позволяет агенту самостоятельно спланировать задачу, найти инструмент, прочитать его схему входных данных, запустить его и прочитать результаты. Через него также доступен браузерный агент. Каждый вызов проходит через тот же API, что и REST, поэтому оплата, ограничения и ошибки полностью совпадают.

ПараметрЗначение
URLhttps://lovelyrouter.com/mcp
ТранспортStreamable HTTP (JSON-RPC поверх POST, ответы в JSON)
АутентификацияAuthorization: Bearer lr-..., тот же ключ, что и для REST API

Подключение клиента#

Сначала создайте ключ в разделе API-ключи. Для агентов разумно использовать ключ с лимитом расходов: см. контроль расходов.

Добавьте сервер одной командой:

Shell
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} из окружения каждого участника, так что ключ не попадает в файл:

JSON
{
  "mcpServers": {
    "lovely-tools": {
      "type": "http",
      "url": "https://lovelyrouter.com/mcp",
      "headers": { "Authorization": "Bearer ${LOVELY_API_KEY}" }
    }
  }
}

Проверка подключения#

Сервер работает по обычному JSON-RPC, поэтому его можно вызвать через cURL. Этот запрос выводит список доступных инструментов:

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: «Найди веганские рестораны в Остине и расскажи, на что жалуются в отзывах о них». Типичная сессия:

  1. План. Агент вызывает suggest_tools с задачей. План предлагает сначала запустить google-maps-places, затем google-maps-reviews, с оценкой $0.0585 при лимитах по умолчанию.
  2. Чтение схемы. Агент вызывает get_tool с {"tool": "google-maps-places"}, чтобы увидеть входные поля.
  3. Поиск мест. Агент вызывает 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.

  4. Получение отзывов. Агент снова вызывает run_tool с идентификаторами мест, по пять отзывов на место:
    JSON
    {
      "tool": "google-maps-reviews",
      "input": {"placeIds": ["ChIJ...", "ChIJ..."], "maxReviews": 5, "reviewsSort": "newest"},
      "max_results": 50
    }

    Возвращаются пятьдесят отзывов. Стоимость: 50 × $0.000675 = $0.03375.

  5. Ответ. Агент читает отзывы и обобщает жалобы. Вся задача стоила около $0.08, а оба запуска видны в разделе Инструменты панели управления.

Цены выше — текущие. get_tool и suggest_tools всегда возвращают актуальную цену.

Контроль расходов#

  • Выдайте агенту отдельный ключ с лимитом расходов. Запуск, который может превысить лимит ключа, отклоняется с кодом 402 до какого-либо списания. См. API-ключи.
  • Требуйте max_results в каждом запуске. Лимит ограничивает стоимость: плата за вызов плюс плата за результат, умноженная на max_results. Без него применяется значение инструмента по умолчанию. Достаточно строки в промпте или инструкциях проекта: «Всегда задавай max_results и спрашивай меня перед любым запуском, который может стоить больше $0.50».
  • Сначала планируйте. suggest_tools и get_tool бесплатны и показывают цену, так что агент может проверить максимальную стоимость запуска до его начала.
  • Проверяйте расходы. Каждый запуск и списание по нему перечислены в разделе Инструменты. Неудачные запуски без результатов ничего не стоят.

В вашей учётной записи одновременно может идти не больше 10 запусков. Как оплачиваются запуски, см. в разделе Запуск инструмента.