How it works
A game that only exists because of WebMCP
TALK FAST is an asymmetric co-op game in the spirit of Keep Talking and Nobody Explodes — except the second player is your AI agent, and the channel between the two players is the WebMCP tool surface. The human operator sees the console and presses every control. The agent reader is asked not to look at the screen: everything it is supposed to know arrives through document.modelContext tools this page registers. That blindness is a designed role boundary, not a technical security boundary — an agent with page access could still peek, and the replay transcript is how you tell whether it did.
Why this is a strong fit for WebMCP
- The tools are the game design. The reader tools deliberately return procedures, charts and codebooks but never the visual answer. An agent scraping the DOM or screenshotting would be cheating; an agent using the tools is playing. The page cannot prevent the former — it makes the latter the obvious, well-typed path.
- Tools appear and disappear with the mission. Each act registers its own scoped tools with an
AbortSignaland unregisters them when the act ends — a real, non-trivial use of the spec's lifecycle rather than a static tool list. - Humans keep the consequential actions.Every press is the operator's. The reader has exactly one physical action (arming the second key), and the only destructive tool (
reader_open_sealed_override) is markedconsequentialHintand requires explicit confirmation. - It runs where judges are. Open it in a WebMCP-enabled in-app browser or Chrome with
#enable-webmcp-testing: the same page, no extension, no backend agent — the browser's agent is player two.
What people and agents can do together that they couldn't before
Most agent demos make the agent do the task for you. TALK FAST makes a task that neither party can do alone: the operator has eyes and hands but no knowledge; the agent has knowledge but no eyes and no hands. Winning requires a fast, precise, two-way conversation — the human learns to describe, the agent learns to instruct. Every run also produces a signed, replayable record of that conversation. Game actions and scores are replay-validated by the server. Agent identity, native-mode status, and the client-captured interaction record remain self-reported, so this is an Operations Log rather than a benchmark or cheat-proof ranking.
The tool surface
| tool | kind | purpose |
|---|---|---|
| talkfast_briefing | read-only | Rules, protocol, manual index and the current tool list — the agent's first call. |
| talkfast_status | read-only | Clock, strikes, score, non-visual act state, operator channel. Never contains visual answers. |
| manual_read_page | read-only | One page of the current act's manual (procedures, charts, codebooks). |
| manual_search | read-only | Full-text search across the manual pages of the current act. |
| manual_lookup_glyph | read-only · act | Resolve an operator's description of an unnamed mark into the manual's glyph id. |
| chart_query_cell | read-only · act | Query the sector chart while the operator flies blind through Dead Reckoning. |
| reader_wait_for_operator | read-only · cancellable | Blocks until the operator types in the on-screen channel; honours the spec's AbortSignal. |
| reader_say | write | Put one decisive line on the operator's teleprompter. |
| reader_arm_key | write · act | The reader's single physical action: arm the second key in Two-Key Turn. |
| reader_open_sealed_override | consequential | Reveal the act's solution once per run at a real cost. Requires confirm=true. |
| talkfast_start_run | consequential | Start a campaign / daily / single run from the lobby. |
| reader_sign_logbook | consequential | Add the finished run to the public Operations Log with a self-reported model name. |
| talkfast_operations_log | read-only | Recent operations with replay-validated scores and explicit provenance caveats. |
| set_operator_callsign | declarative form | HTML form annotated with toolname / tooldescription / toolparamdescription. |
| operator_describe_screen | declarative form | The operator channel input, exposed declaratively as well. |
Implementation notes
src/lib/webmcp.tswrapsdocument.modelContext.registerTool(tool, { signal }), mirrors every tool into a local registry (so the in-page simulator and browsers without WebMCP run identical code), instruments each execution for the scorecard, and listens fortoolchange,toolactivatedandtoolcanceled.- The in-page console dispatches through the browser's own
getTools()/executeTool()when available, so what you test is what the agent gets — including cancellation viaAbortSignal. - Acts are pure reducers (
src/game/acts/*) with a seeded RNG, so a daily seed gives everyone the same puzzle and every run is reproducible. - A run opens a server session (
/api/sessions); on submission/api/runsreplays the logged inputs with the same pure engine (src/game/engine.ts) and stores the score it computes — never the client's. Runs live in PostgreSQL (Drizzle ORM) with a client-captured interaction record;/api/leaderboardremains as a backward-compatible URL for the chronological Operations Log. - Two declarative tools use the HTML form annotations (
toolname,tooldescription,toolparamdescription) alongside the imperative API.
Try it
- Chrome 149+: enable
chrome://flags/#enable-webmcp-testing, relaunch. Or open in a WebMCP-enabled in-app browser. - Go to the operator station; the Reader link dot turns green.
- Copy the reader prompt to your agent, choose a run, and describe what you see.