Skip to main content
Glama

ShipCheck v0

Unabhängige Preview-URL-QA für Coding-Agenten. Ein Agent sendet per POST eine öffentliche https-Preview-URL plus Akzeptanzgeschichten. Wir führen Playwright-Heuristiken aus, machen Screenshots von jeder Geschichte und liefern ein Bestehen/Nichtbestehen-Nachweispaket. Fehlschläge bleiben needs_review, bis ein Mensch (oder dieser Agent, der sich die Seite ansieht) eine kurze Notiz hinzufügt.

Dasselbe Modell, das die UI geschrieben hat, ist ein schlechter Beurteiler der UI. Das ist das Produkt.

Playwright MCP ist kostenlos; dies ist kein gehosteter Browser. Es ist eine unabhängige Prüfung mit einem Menschen bei Fehlschlag. Screenshot-APIs liefern Pixel. ShipCheck beantwortet: „Hat Geschichte 3 tatsächlich funktioniert?“

Run

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

Die venv existiert bereits auf dieser Box. Standard: Der API-Prozess leert auch die Disk-Queue (Inline-Worker). Zum Trennen:

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

Health: GET http://127.0.0.1:8787/health

Öffentlich (Cloudflare-Quick-Tunnel, diese Box, Mi. 19. Aug. 2026): https://realtor-all-enclosed-altered.trycloudflare.com Derselbe Prozess bedient GET / (Landing), REST und POST /mcp. URL auch in PUBLIC_URL.txt. Quick-Tunnel sterben, wenn cloudflared stoppt.

Jobs liegen unter /workspace/shipcheck/queue/{job_id}.json. Berichte und Screenshots unter /workspace/shipcheck/reports/.

Beispielanfrage / -antwort

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

Antwort:

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

Endstatus: pass (alle Heuristiken grün, kein Mensch erforderlich) oder needs_review (Heuristikfehler aufgelistet; ein späterer Durchlauf fügt human_note hinzu über POST /qa_note/{job_id} oder MCP qa_note). error ist unsere Infrastruktur (Timeout, Absturz, unsichere URL) und wird nicht berechnet.

Optionale Header für spätere Abrechnung: Authorization: Bearer <key> oder X-Api-Key. v0 akzeptiert fehlende Schlüssel und belastet nicht.

Optionale Story-Schritte (sonst als Notizen behandelt): click:css=.buy, click:text=Sign in, fill:#email|user@example.com, wait:1000, see:Order total.

Siehe examples/sample_report.json für die Form des Nachweispakets.

Sicherheit

Nur https. Localhost, RFC1918, Link-Local, CGNAT, Metadaten-IPs (169.254.169.254), file://, eingebettete Anmeldedaten und Redirect-to-Private werden abgelehnt. Jede Playwright-Anfrage wird erneut geprüft. 20s Navigations-Timeout, 4-Minuten-Job-Limit. Details in PRODUCT.md.

SSRF-Tests (kein Live-Ziel erforderlich):

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

Cursor mcp.json

Streamable-HTTP-MCP wird unter POST /mcp bereitgestellt (gleicher Prozess wie REST). Tools: qa_preview, qa_status, qa_get_report, qa_note. Fügen Sie dies zu .cursor/mcp.json oder ~/.cursor/mcp.json hinzu (lassen Sie type weg; Cursor behandelt eine url als streamable HTTP):

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

v0 akzeptiert einen fehlenden Schlüssel und belastet nicht. Dieselbe Datei liegt unter examples/mcp.json. Der Server muss laufen (python -m shipcheck serve --host 127.0.0.1 --port 8787). Die öffentliche URL ist ein Cloudflare-Quick-Tunnel vor diesem Prozess.

Landingpage: GET / (HTML in shipcheck/landing.html). Öffentliches Preview-Ratenlimit: 20 qa_preview-Jobs/Tag/IP (Loopback unbegrenzt). SHIPCHECK_PREVIEW_LIMIT_PER_IP überschreibt; 0 deaktiviert.

Preisgestaltung

Absicht, noch nicht berechnet: $6 Desktop / $10 beide Viewports (oder 5–8 Stories) pro Lauf. Prepaid-Polar-Credits später. Hook: shipcheck/billing.py.

Nächste Schritte

  1. Polar-Credit-Pakete + Lizenzschlüssel als Authorization: Bearer; nur bei Erfolg belasten.

  2. Slack/Telegram-Ping, wenn Status needs_review ist; Mensch schreibt human_note (REST POST /qa_note/{job_id} und MCP qa_note akzeptieren die Notiz bereits).

  3. Auflistung auf PulseMCP / Glama / offiziellem MCP-Registry (Entdeckung, kein Marktplatz).

  4. Öffentlicher Beispielbericht + eine 30-zeilige llms.txt.

Fügen Sie kein Dashboard, keine GitHub-App und keine Krypto-Schiene hinzu.

-
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