Skip to main content
Glama

ShipCheck v0

QA independiente de URL de vista previa para agentes de codificación. Un agente envía una URL de vista previa pública https más historias de aceptación. Ejecutamos heurísticas de Playwright, capturamos cada historia y devolvemos un paquete de evidencia con aprobado/reprobado. Las fallas permanecen needs_review hasta que un humano (o este agente mirando la página) añade una nota breve.

El mismo modelo que escribió la interfaz es un mal juez de la interfaz. Ese es el producto.

Playwright MCP es gratuito; esto no es un navegador alojado. Es una verificación independiente con un humano en las fallas. Las APIs de capturas dan píxeles. ShipCheck responde "¿la historia 3 realmente funcionó?"

Ejecutar

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

El venv ya existe en esta máquina. Por defecto: el proceso de la API también drena la cola de trabajos (worker en línea). Para dividir:

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

Salud: GET http://127.0.0.1:8787/health

Público (túnel rápido de Cloudflare, esta máquina, mié 19 ago 2026): https://realtor-all-enclosed-altered.trycloudflare.com El mismo proceso sirve GET / (página de aterrizaje), REST y POST /mcp. La URL también está en PUBLIC_URL.txt. Los túneles rápidos mueren si cloudflared se detiene.

Los trabajos viven en /workspace/shipcheck/queue/{job_id}.json. Los informes y capturas en /workspace/shipcheck/reports/.

Ejemplo de solicitud / respuesta

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"
  }'

Respuesta:

{
  "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

Estados terminales: pass (todas las heurísticas en verde, sin necesidad de humano) o needs_review (fallas de heurísticas listadas; una pasada posterior añade human_note vía POST /qa_note/{job_id} o MCP qa_note). error es nuestra infraestructura (tiempo de espera agotado, fallo, URL no segura) y no se factura.

Cabeceras opcionales para facturación posterior: Authorization: Bearer <key> o X-Api-Key. v0 acepta claves faltantes y no hace cargos.

Pasos opcionales (tratados como notas): click:css=.buy, click:text=Sign in, fill:#email|user@example.com, wait:1000, see:Order total.

Ver examples/sample_report.json para la forma del paquete de evidencia.

Seguridad

Solo https. Localhost, RFC1918, enlace-local, CGNAT, IPs de metadatos (169.254.169.254), file://, credenciales incrustadas y redirección a privado son rechazados. Cada solicitud de Playwright se re-verifica. Tiempo de espera de navegación de 20s, límite de trabajo de 4 minutos. Detalles en PRODUCT.md.

Pruebas SSRF (sin objetivo en vivo requerido):

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

Cursor mcp.json

MCP Streamable-HTTP se sirve en POST /mcp (mismo proceso que REST). Herramientas: qa_preview, qa_status, qa_get_report, qa_note. Añade esto a .cursor/mcp.json o ~/.cursor/mcp.json (omite type; Cursor trata una url como streamable HTTP):

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

v0 acepta una clave faltante y no hace cargos. El mismo archivo vive en examples/mcp.json. El servidor debe estar ejecutándose (python -m shipcheck serve --host 127.0.0.1 --port 8787). URL pública es un túnel rápido de Cloudflare delante de ese proceso.

Página de aterrizaje: GET / (HTML en shipcheck/landing.html). Límite de tasa de vista previa pública: 20 trabajos qa_preview/día/IP (loopback ilimitado). SHIPCHECK_PREVIEW_LIMIT_PER_IP lo anula; 0 lo desactiva.

Precios

Intención, aún no cobrado: $6 escritorio / $10 ambas vistas (o 5–8 por ejecución) por historia. Créditos prepagados de Polar más adelante. Gancho: shipcheck/billing.py.

Próximos pasos

  1. Créditos de Polar + paquetes de licencia como Authorization: Bearer; cargo solo al éxito.

  2. Ping de Slack/Telegram cuando el estado sea needs_review; el humano escribe human_note (REST POST /qa_note/{job_id} y MCP qa_note ya aceptan la nota).

  3. Listar en PulseMCP / Glama / registro oficial de MCP (descubrimiento, no un mercado).

  4. Informe de muestra público + un llms.txt de 30 líneas.

No añadir un tablero, una app de GitHub ni un riel de cripto.

-
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