Inspiration

I spend a lot of time in red CI. Vercel, Helm schema jobs, Cloudflare extraEnv — the graph is on one tab, ChatGPT is on another. I paste a log, lose the timeline, and the agent starts guessing through the DOM. WebMCP is the missing surface: the same console I already stare at, with named tools so an agent can diagnose and patch on that page, and I still Confirm anything irreversible.

Dashboards are for humans. Chat is for logs. Afterfail is the deploy graph both can drive.

What it does

Afterfail is a failed preview/deploy console. Four canned runs (Vercel Helm --defaultdb, Netlify Next OOM, Cloudflare missing HTTP_PROXY, Render $PORT health check) plus New run / create_run so you can paste a real log.

A person and ChatGPT (or Chrome WebMCP) share:

  • the job timeline and log
  • get_failed_jobs / get_log_slice instead of scraping
  • set_retry_policy (the editor updates before the tool returns)
  • redeploy, which stops on an on-page confirm
  • an honesty case: workers-edge-preview stays red. Retries do not set env vars.

How I built it

Next.js App Router, TypeScript, Tailwind, Zustand. No backend, no auth, no in-page chatbot.

Tools register on the top-level /console document with document.modelContext.registerTool (native first; @mcp-b/webmcp-polyfill only if registerTool is missing). Execute is (input, { signal }). Results are JSON objects, not MCP content arrays — ChatGPT site tools stringify JSON. Sensitive actions share the same confirm modal as the Redeploy button. readOnlyHint / untrustedContentHint on the log tool.

What I learned

WebMCP is not “wrap every button.” Five sharp outcome tools beat twenty. requestUserInteraction is not in the shipping IDL, so confirm had to be our modal. ChatGPT ignores iframe and declarative form tools. And a tool that always “succeeds” on retry is a lie — the Cloudflare fixture is the feature.

Challenges

Getting a green redeploy meant applying policy on the failing job (schema-job, not helm-lint) before Confirm. Hosting on Render wanted a credit card even with credits, so the live URL is Vercel. Cursor’s cursor-ide-browser MCP is not WebMCP; judges use ChatGPT’s in-app browser or Chrome with chrome://flags/#enable-webmcp-testing (Sol or Terra, not Luna).

Live: afterfail.vercel.app
Repo: github.com/kriyanshii/afterfail

Built With

Share this project:

Updates

Submission history