Тест на оформление заказа нажимает «Оформить заказ» и видит зелёный тост. Хорошо. Но проверяет ли он, что строка действительно записалась в базу? Правильно ли добавлены позиции? Уменьшился ли инвентарь? UI может показать «подтверждено», но на уровне данных — произошёл сбой: откат транзакции, ошибка в очереди, проглоченное исключение.
Классическое решение — писать SQL-ассерты в тестах. Но это требует подключения ORM или драйвера, управления учётными данными, ручного написания запросов. Работает, но создаёт технический долг: каждый тест нужно обновлять при изменении схемы.
Сейчас есть лучший путь. И в нём вы не пишете ни строчки SQL.
Представьте AI-агента, который сначала управляет браузером, оформляя заказ, а затем переключается в базу данных, чтобы проверить, что данные записаны корректно. Всё это — через два MCP-сервера.
Идея проста: один MCP-сервер управляет Playwright для автоматизации браузера, второй — предоставляет безопасный read-only доступ к базе данных. Агент последовательно использует оба. Он завершает заказ, извлекает order ID со страницы подтверждения и проверяет данные в базе — всё по одному промпту.
Что понадобится
- Веб-приложение с флоу оформления заказа (любой стек — автоматизация на уровне браузера)
- PostgreSQL или MySQL с данными приложения
- MCP-клиент (например, Claude Desktop, Claude Code или другой совместимый)
- MCP-серверы: для Playwright и для базы данных
Шаг 1: Настройка MCP-серверов
Добавьте оба сервера в конфигурацию MCP-клиента. Например, в claude_desktop_config.json.
Два ключевых момента:
- Подключение к базе — только через read-only пользователя. Это обязательно: AI-агент не должен иметь права на запись.
- Для MySQL замените
@anthropic/mcp-postgresна@anthropic/mcp-mysql. Интерфейс инструментов идентичен.
Шаг 2: Браузерная автоматизация
Передайте агенту промпт с описанием действий:
Перейди на localhost:3000/products. Добавь «Wireless Charger» в корзину. Перейди к оформлению заказа. Заполни имя покупателя «Ada Lovelace» и email «ada@test.dev». Выбери «Credit Card» как способ оплаты и нажми «Place Order». Дождись страницы подтверждения и захвати order ID.
Агент использует Playwright MCP для выполнения шагов: навигация, клики, заполнение форм, ожидание результата.
Он читает снапшот страницы и извлекает: Order #10472.
Никаких переменных, фикстур или ручного управления состоянием. Агент просто запоминает ID и использует его дальше.
Шаг 3: Проверка базы данных — без SQL
Теперь — самое интересное. Добавьте вторую часть промпта:
Теперь проверь базу данных. Подтверди, что заказ 10472 существует в таблице orders и принадлежит ada@test.dev. Проверь, что в таблице line_items есть запись для «Wireless Charger» с количеством 1. Также проверь, что инвентарный остаток товара был уменьшен.
Агент переключается на PostgreSQL MCP. Сначала он изучает схему — не предполагает названия столбцов:
- Вызывает list_tables, чтобы найти нужные таблицы.
- Использует describe_table, чтобы узнать структуру: названия столбцов, типы, связи.
Затем агент строит и выполняет запросы автоматически. Если столбец называется qty вместо quantity, или product_title вместо name — он адаптируется, потому что сначала прочитал схему.
Результат — три проверки, выполненные без единой строки SQL с вашей стороны.
Полный промпт
Всё можно описать одним запросом:
Оформи заказ на «Wireless Charger» для Ada Lovelace (ada@test.dev), затем проверь, что заказ 10472 есть в базе, позиция добавлена, а инвентарь уменьшен.
Это весь тест. Один промпт. Два MCP-сервера. Полное покрытие стека — от UI до данных.
Как сделать production-ready
- Используйте только read-only доступ. Активным должен быть только инструмент read_query. Это исключает риск случайной модификации данных.
- Добавьте тайминг-гарды. Если приложение использует очереди или eventual consistency, агент может не найти запись сразу. Укажите: «Жди появления строки до 5 секунд с опросом каждые 500 мс».
- Делайте снапшоты до и после. Попросите агента выгрузить данные таблиц до и после действия. Сравнение покажет побочные эффекты: дубли, пропущенные audit-поля, нарушения внешних ключей.
- Расширяйте за пределы SQL. Тот же паттерн работает с другими MCP-серверами: Redis — для проверки кеша, Elasticsearch — для индексации, S3 — для загрузки файлов. Добавляйте столько слоёв, сколько нужно.
Почему это важно
Традиционная full-stack верификация требует сложной инфраструктуры: драйверы, ORM, SQL-запросы, которые ломаются при рефакторинге схемы. Это не критично, но создаёт постоянную нагрузку на поддержку.
MCP-подход устраняет это. Вы описываете, что проверить — агент сам решает, как. При изменении схемы тесты не нужно править: агент переоткроет её при следующем запуске.
Это не магия. Это перенос адаптационного слоя из кода в контекст агента. Для задач чтения и верификации — такой трейдоф почти всегда оправдан.