Реверс-инжиниринг API Яндекс Лавки для создания MCP-сервера заказа продуктов через ИИ
Яндекс
Anthropic
Разработчик создал MCP-сервер на Python, позволяющий ИИ-ассистенту (например, Claude) искать товары, собирать корзину и оформлять заказы в Яндекс Лавке. Для этого ему пришлось проанализировать приватный API сервиса, решить проблемы с CSRF-защитой, гонками за корзину и фантомными товарами, а также внедрить механизмы безопасности для предотвращения случайных списаний.
Автор столкнулся с отсутствием публичного API у Яндекс Лавки и решил создать неофициальный MCP-сервер, через который ИИ-ассистент мог бы заказывать продукты. В процессе реверс-инжиниринга веб-версии он выявил основные эндпоинты API, включая поиск, корзину и оформление заказа. Первой проблемой стал 401 ответ при запросах из Python: оказалось, что требуются CSRF-токен, который извлекается из HTML главной страницы, и специфические заголовки. Затем автор столкнулся с гонками за общую корзину — одновременные вызовы add_to_cart приводили к конфликту версий (HTTP 409), что было решено с помощью asyncio.Lock и повторных попыток. Другая проблема — фантомные товары из другого склада («Большая Лавка») или якобы раскупленные, которые на самом деле были доступны, но не принадлежали текущей лавке; это потребовало проброса флагов недоступности и текстовых предупреждений модели. Чтобы избежать ошибочных списаний, оформление заказа сделано двухшаговым: сначала preview, затем confirm с проверкой версии корзины и суммы. Также был реализован OAuth для удалённого доступа, а сервер отказывается запускаться без настроенной аутентификации. В итоге получился сервер с 17 инструментами, код открыт на GitHub.
- Сокращения
- MCP = Model Context Protocol — протокол контекста модели
- API = Application Programming Interface — интерфейс программирования приложений
- CSRF = Cross-Site Request Forgery — межсайтовая подделка запроса
- HTTP = HyperText Transfer Protocol — протокол передачи гипертекста
- JWT = JSON Web Token — JSON-веб-токен
- JWKS = JSON Web Key Set — набор JSON-веб-ключей
- OAuth = Open Authorization — открытая авторизация
- OIDC = OpenID Connect — OpenID Connect
- TTL = Time To Live — время жизни
Источник: Habr — хаб ИИ —
оригинал
