Skip to main content
Glama

ShipCheck v0

Независимый QA по preview URL для агентов, пишущих код. Агент отправляет POST-запросом публичный https preview URL и приёмочные сценарии. Мы запускаем эвристики Playwright, делаем скриншот каждого сценария и возвращаем комплект доказательств с результатом pass/fail. Неудачные результаты остаются в статусе needs_review, пока человек (или этот агент, просматривающий страницу) не добавит короткое примечание.

Модель, написавшая UI, — плохой судья для этого UI. В этом и заключается продукт.

Playwright MCP бесплатен; это не облачный браузер. Это независимая проверка с участием человека при неудаче. Screenshot API дают пиксели. ShipCheck отвечает на вопрос: «действительно ли сработал сценарий 3?»

Запуск

cd /workspace/shipcheck
python3 -m venv .venv
.venv/bin/pip install -e ".[dev]"
.venv/bin/playwright install chromium
.venv/bin/python -m shipcheck serve --host 0.0.0.0 --port 8787

venv уже существует на этой машине. По умолчанию процесс API также обрабатывает дисковую очередь (встроенный воркер). Чтобы разделить:

SHIPCHECK_INLINE_WORKER=0 .venv/bin/python -m shipcheck serve --port 8787
.venv/bin/python -m shipcheck worker
.venv/bin/python -m shipcheck run-job sc_xxxxxxxxxxxx

Проверка состояния: GET http://127.0.0.1:8787/health

Публичный URL (быстрый туннель Cloudflare, эта машина, среда, 19 августа 2026): https://realtor-all-enclosed-altered.trycloudflare.com Тот же процесс обслуживает GET / (лендинг), REST и POST /mcp. URL также указан в PUBLIC_URL.txt. Быстрые туннели перестают работать, если cloudflared останавливается.

Задачи хранятся в /workspace/shipcheck/queue/{job_id}.json. Отчёты и скриншоты — в /workspace/shipcheck/reports/.

Пример запроса / ответа

curl -sS -X POST https://realtor-all-enclosed-altered.trycloudflare.com/qa_preview \
  -H 'Content-Type: application/json' \
  -d '{
    "url": "https://example.com/",
    "stories": [
      {"id": "home", "steps": ["open homepage"], "expect": "Example Domain"}
    ],
    "viewport": "desktop"
  }'

Ответ:

{
  "job_id": "sc_ab12cd34ef56",
  "status": "queued",
  "price_usd": 6,
  "billed": false,
  "message": "queued. poll GET /qa_status/{job_id}; fetch GET /qa_get_report/{job_id} when status is pass or needs_review."
}
curl -sS https://realtor-all-enclosed-altered.trycloudflare.com/qa_status/sc_ab12cd34ef56
curl -sS https://realtor-all-enclosed-altered.trycloudflare.com/qa_get_report/sc_ab12cd34ef56

Итоговые статусы: pass (все эвристики зелёные, человек не требуется) или needs_review (перечислены ошибки эвристик; последующий проход добавляет human_note через POST /qa_note/{job_id} или MCP qa_note). error — проблема нашей инфраструктуры (таймаут, сбой, небезопасный URL) и не тарифицируется.

Опциональные заголовки для будущего биллинга: Authorization: Bearer <key> или X-Api-Key. v0 принимает отсутствующие ключи и не списывает средства.

Опциональные шаги сценария (в противном случае трактуются как примечания): click:css=.buy, click:text=Sign in, fill:#email|user@example.com, wait:1000, see:Order total.

См. examples/sample_report.json — там описан формат комплекта доказательств.

Безопасность

Только https. Localhost, RFC1918, link-local, CGNAT, IP-адреса метаданных (169.254.169.254), file://, встроенные учётные данные и redirect-to-private отклоняются. Каждый запрос Playwright перепроверяется. Таймаут навигации — 20 секунд, лимит задачи — 4 минуты. Подробности в PRODUCT.md.

SSRF-тесты (живая цель не требуется):

cd /workspace/shipcheck
python -m pytest tests/test_ssrf.py tests/test_api.py -q

Cursor mcp.json

Streamable-HTTP MCP доступен на POST /mcp (тот же процесс, что и REST). Инструменты: qa_preview, qa_status, qa_get_report, qa_note. Добавьте это в .cursor/mcp.json или ~/.cursor/mcp.json (опустите type; Cursor рассматривает url как streamable HTTP):

{
  "mcpServers": {
    "shipcheck": {
      "url": "https://realtor-all-enclosed-altered.trycloudflare.com/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}

v0 принимает отсутствующий ключ и не списывает средства. Тот же файл лежит в examples/mcp.json. Сервер должен быть запущен (python -m shipcheck serve --host 127.0.0.1 --port 8787). Публичный URL — это быстрый туннель Cloudflare перед этим процессом.

Лендинг: GET / (HTML в shipcheck/landing.html). Лимит публичных preview-задач: 20 qa_preview задач/день/IP (loopback без ограничений). SHIPCHECK_PREVIEW_LIMIT_PER_IP переопределяет лимит; 0 отключает.

Цены

Задумано, но пока не взимается: $6 десктоп / $10 оба вьюпорта (или 5–8 сценариев) за один прогон. Предоплаченные кредиты Polar — позже. Хук: shipcheck/billing.py.

Следующие шаги

  1. Кредитные пакеты Polar + лицензионный ключ в качестве Authorization: Bearer; списание только при успехе.

  2. Пинг в Slack/Telegram, когда статус — needs_review; человек пишет human_note (REST POST /qa_note/{job_id} и MCP qa_note уже принимают примечание).

  3. Разместить в PulseMCP / Glama / официальном реестре MCP (обнаружение, а не маркетплейс).

  4. Публичный пример отчёта + llms.txt из 30 строк.

Не добавляйте дашборд, GitHub App или криптовалютный платёжный канал.

-
license - not tested
-
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

  • Website QA for your coding agent: audit SEO, performance, security, accessibility over MCP.

  • Browser-backed QA with evidence and fix-ready reports for coding agents.

  • Verifies AI agent work end to end: real artifacts and outcomes checked, not self-reported success.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/wtaylorwilson/shipcheck-preview-qa'

If you have feedback or need assistance with the MCP directory API, please join our Discord server