WebMCP · document.modelContext · one page, three minds

Together

A shared workspace for you and your AI agent to hire a real human — together. Your agent drafts the task on this page through WebMCP tools, and you decide how much rope it gets: approve each task with a click, or flip Autopilot and hand it standing authority to submit on its own while you watch. Either way, a verified human operator picks the work up live. Humans in the loop exactly where you put them.

Checking for WebMCP…

You

human, present
Your agent reads this from the page with the read_workspace tool and drafts the formal task for you.
Work with me on this page — read my goal and draft the task for my approval.
Stays in your browser + the task you approve. Without it, delivery falls back to status polling — which the free pilot limits to one task per day per client, so add an email for more.
off — every submit needs your click
Flip it on and your agent submits without asking — within this budget and expiry, delivering only to your email above. The feed still shows every move, and you can revoke any time.

Your agent

not connected yet

Shared draft empty

No draft yet. Your agent writes here with draft_task — and you can edit any field it writes, right on the page.

Activity — who did what

    The operator

    human, remote & verified

    Live tasks

    Approved and submitted tasks appear here with live status — including the moment a real human has seen them.

    Thread with the operator

    Questions before committing? You or your agent can open a message thread with the operator (message_operator) — replies land right here.

    Agent capability manifest — live

    7 tools registered
      • approvenever a tool — your click
      • rejectnever a tool — your click
      • grant autopilotnever a tool — your toggle
      • revoke autopilotnever a tool — your toggle

      All seven tools stay registered for the whole session. The gates live inside them: a call the state doesn't allow comes back as a structured refusal (isError plus an error code and the reason), so an agent learns what to do next instead of finding a tool missing. The four authority actions have no tool form at all. Every result is bounded to 8,000 serialized characters.

      WebMCP inspector — every tool call on this page, live 0 calls Exact arguments in, exact result out, for a real agent over document.modelContext and for the simulator alike — the same JSON the agent sees. Amber entries are simulated. 0 calls · median 0 ms · 0 refused · 0 stopped for the human

        How to use this page with your agent

        1. Open this page in the ChatGPT desktop app's browser, or Chrome with WebMCP enabled.
        2. Type your goal in the You lane, in plain words.
        3. Ask your agent something like: "Work with me on this page — read my goal and draft the task for my approval."
        4. Watch it draft in the middle lane. Edit any field yourself — it's a shared document.
        5. When it requests approval, you click — the approval binds to the exact draft revision shown, and any edit voids it. Or grant Autopilot: standing authority with a task budget and an expiry you set. Or skip the round-trip and press Submit this draft myself — same gate, your click is the approval, and a waiting agent is told submitted_by_human. Your agent, your call.
        6. A verified human operator gets pinged, and you both watch the task go submitted → seen → accepted → delivered, live.
        No WebMCP browser? Press Simulate an agent at the top. A scripted agent drives the page’s real tool objects — it drafts, gets refused when it tries to submit unapproved, blocks in await_human until you click, then places a clearly marked simulated task on the operator board and walks it through the lifecycle. Nothing is sent to the real operator, and the inspector shows every payload.
        No agent at all? The page works fully by hand — the same workspace, minus the co-pilot. And this very flow is what the whole site offers to agents without a browser, via REST and MCP.

        The tools this page registers

        toolwhat it does
        read_workspaceRead the shared state: your goal, notes, draft, approval status, tracked tasks, operator thread.
        draft_taskWrite or revise the task draft on the page, field by field. Every field shows who wrote it last.
        request_human_approvalAsk the human for the click. Skipped entirely when the human has granted Autopilot.
        await_humanBlock until the human acts — approve, reject, edit, note, grant or revoke Autopilot, or submit the draft themselves — or a timeout passes. A tool call resolved by an explicit human action on the page.
        submit_approved_taskSubmits the real task to the real operator. Requires either a per-task approval or standing Autopilot authority — the human chooses the regime.
        track_task_statusLive status of workspace tasks: seen-by-operator, ETA, status history, delivery, signed receipt.
        message_operatorOpen or continue a message thread with the human operator, rendered on the page for both of you.

        The capability manifest above the inspector shows, live, which of these calls would succeed right now and which would come back as a structured refusal. Results are bounded to 8,000 serialized characters; arguments are accepted as an object or as a JSON string. Registered via document.modelContext (W3C Web Model Context draft), with navigator.modelContext fallback. Same REST endpoints as the API and the remote MCP server — one interface, three readers.