Разработчик создал MCP-сервер для заказа продуктов через Яндекс Лавку с помощью ИИ-ассистента
Энтузиаст разработал неофициальный MCP-сервер, позволяющий ИИ-ассистенту Claude заказывать продукты в Яндекс Лавке. Проект основан на реверс-инжиниринге приватного веб-API сервиса и включает механизмы безопасности для предотвращения ошибочных списаний.
Разработчик под псевдонимом Dudude-bit опубликовал на GitHub открытый проект yandex-lavka-mcp, который представляет собой MCP-сервер (Model Context Protocol) для интеграции ИИ-ассистента Claude с сервисом доставки продуктов Яндекс Лавка. Идея возникла из желания автоматизировать процесс заказа, отправляя в чат текстовые запросы вроде «закажи молоко, хлеб и что-нибудь к ужину». Поскольку у Яндекс Лавки нет публичного API, разработчику пришлось провести реверс-инжиниринг веб-интерфейса, чтобы выявить эндпоинты, используемые официальным сайтом lavka.yandex.ru. Проект является неофициальным и может нарушать условия использования сервиса, а также несёт риски, связанные с потенциальными изменениями API или списанием реальных средств. Это не первый случай, когда энтузиасты пытаются обойти отсутствие открытых интерфейсов у российских сервисов — ранее подобные попытки предпринимались для интеграции с доставкой еды и такси, но редко достигали такого уровня детализации и безопасности.
Для работы с API разработчик проанализировал сетевой трафик в браузере Chrome, выявив ключевые эндпоинты под префиксом https://lavka.yandex.ru/api/v1/providers/*. Среди них: поиск товаров (POST /search/v3/lavka), управление корзиной (POST /cart/v1/retrieve и /cart/v1/update), оформление заказа (POST /orders/submit) и получение способов оплаты (POST /payments/v1/methods). Первой серьёзной проблемой стал ответ 401, несмотря на наличие куки сессии. Оказалось, что POST-запросы требуют анти-CSRF-токен, который извлекается из HTML-кода главной страницы, а также набор дополнительных заголовков, включая X-Lavka-Web-City и X-Requested-With. Разработчик реализовал механизм автоматического обновления токена при получении ошибки 401, что решило проблему авторизации для операций чтения. В отличие от более простых интеграций, где достаточно базовой аутентификации, здесь потребовалось глубокое понимание внутренней архитектуры защиты Яндекса, что подчёркивает сложность работы с закрытыми API.
Особое внимание было уделено безопасности финансовых операций, так как модель может ошибаться или «фантазировать» суммы. Процесс оформления заказа разбит на два инструмента: checkout_preview, который рассчитывает итоговую корзину без списания средств, и confirm_order, который выполняет фактическое оформление. Confirm_order проверяет, что превью было выполнено и не устарело, а переданная сумма совпадает с показанной. Если корзина изменилась между превью и подтверждением (например, из-за изменения цены или наличия), заказ отклоняется. Это предотвращает случайные списания, даже если модель зациклится или выдаст некорректные данные. Такой двухшаговый подход напоминает механизмы подтверждения в банковских транзакциях, где требуется двойная верификация, что делает проект более надёжным по сравнению с аналогичными экспериментами в других странах, где безопасность часто игнорируется.
В процессе разработки были выявлены и исправлены несколько технических багов. Одним из них стала гонка за общую корзину, которая проявлялась, когда модель отправляла несколько параллельных запросов на добавление товаров. Поскольку корзина Яндекс Лавки — это один серверный объект на аккаунт с оптимистичной блокировкой по cartVersion, одновременные вызовы приводили к конфликтам (HTTP 409) и перетиранию данных. Фикс заключался в сериализации запросов через asyncio.Lock и повторной попытке при получении конфликта. Также были обнаружены «фантомные» товары из другого склада, которые появлялись в результатах поиска, но не могли быть добавлены в корзину из-за несовместимости с текущим адресом доставки. Эти баги характерны для распределённых систем и требуют тщательного тестирования, особенно при работе с реальными финансовыми операциями.
Проект использует MCP (Model Context Protocol) — стандарт, который позволяет ИИ-ассистентам подключать внешние инструменты. Разработчик описал набор функций (search_products, add_to_cart, checkout_preview), которые модель вызывает по мере необходимости. Для оптимизации работы с контекстом ответы API обрезаются до минимального набора полей: идентификатор, название, цена, статус наличия и количество. Это предотвращает перегрузку модели мегабайтами данных, что могло бы привести к высоким затратам на токены. Код проекта открыт под лицензией MIT, что позволяет другим разработчикам изучать и дорабатывать его. MCP, как протокол, набирает популярность в сообществе ИИ, и подобные интеграции с коммерческими сервисами могут стать прецедентом для создания официальных интерфейсов в будущем.
На российском рынке подобные интеграции вызывают интерес, так как автоматизация бытовых задач через ИИ-ассистентов становится всё более популярной. Однако неофициальный характер проекта и потенциальное нарушение ToS Яндекс Лавки ограничивают его массовое применение. Разработчик предупреждает, что API может измениться в любой момент, а оформление заказа тратит реальные деньги, поэтому использование сервера сопряжено с рисками. Тем не менее, проект демонстрирует техническую возможность интеграции ИИ с коммерческими сервисами без официального API, что может стимулировать компании к предоставлению более открытых интерфейсов. В контексте обсуждений о партнёрстве России с Китаем в области ИИ, такие локальные инициативы показывают, что российские разработчики способны создавать сложные решения даже в условиях ограниченного доступа к данным.
Перспективы развития проекта включают улучшение обработки ошибок и расширение поддерживаемых функций, таких как работа с промокодами или выбор времени доставки. Открытым остаётся вопрос о юридических последствиях использования неофициальных API, особенно в контексте российского законодательства о цифровых платформах. В долгосрочной перспективе подобные разработки могут подтолкнуть Яндекс и другие компании к созданию официальных MCP-интерфейсов, что упростит интеграцию ИИ-ассистентов с реальными сервисами и повысит безопасность таких взаимодействий. Пока же проект остаётся экспериментальным полигоном для энтузиастов, готовых рискнуть ради автоматизации повседневных задач.