-
-
The last click stays human: Confirm demo introduction moves the state to v9. Demo confirmed. No real message was sent.
-
compare_shortlist lays two people side by side across six dimensions of daily life. Warm is the chosen tone for the first hello.
-
Public proof: MIT license, public repository, immutable tag, and the live footer's exact deployed revision ba55c557358a.
-
Six WebMCP tools registered on one page: five change what the person sees, one is read-only. READY · v1 is the state both of them share.
-
prepare_introduction drafts a first hello from facts already on the page. The person edits every word; no site tool can confirm or send.
-
Synergy Lens: explain_synergy_match opens Maya's 92 read, 88% profile evidence, and three practical reasons the household rhythms fit.
-
Approval is not a tool. The agent stages the living plan; only the person clicks Yes, use these choices. State moves v2 to v3.
-
find_compatible_rooms brings Maya, Jordan, and Sam onto the page, person first, home as context. Whole-card selection stays human.
Inspiration
Finding a roommate is easy. Finding someone you can actually live well with is hard, and it shapes daily life for a lot of people: traveling nurses, single parents, new graduates, retirees, interns. Rooms are easy to list. Compatibility is what nobody helps with.
CoHabby puts the person first and the room second. I also believe good technology should make people more human, not more mechanical. WebMCP made that concrete: the page can hand an agent real tools and still keep the meaningful decisions on the human side of the screen.
CoHabby is already a live product with real users on the web, iOS, and Android. This challenge build is a separate, new codebase, but the problem it targets and the people it serves are the same.
What people and agents do together
Six small WebMCP tools share one page with the person:
get_living_contextreads the visible state (the only read-only tool)stage_living_briefstages a living plan from everyday habitsfind_compatible_roomsbrings Maya, Jordan, and Sam onto the page, person firstexplain_synergy_matchopens the Synergy Lens: a 92 score, 88% evidence, three practical reasonscompare_shortlistlays two people side by side across six dimensions of daily lifeprepare_introductiondrafts an editable first hello from facts already on the page
Three actions are deliberately not tools: approving the plan, editing the hello, and confirming the introduction. The public tests assert that apply_living_brief and confirm_introduction do not exist. The agent prepares everything. The last click stays with the person.
Why WebMCP fits
Roommate matching is structured work with a few consequential decisions in between. WebMCP lets the page describe each step precisely, so the agent completes it reliably instead of guessing at the UI, and every result renders where the person can see it. Agent and human read the same state, which advances visibly from v1 to v9.
How I built it
Next.js and TypeScript. Every tool has a strict JSON Schema input (bounded enums, patterns, additionalProperties: false) and a separate output schema, so nothing reaches the agent that a person could not see. Each call runs under a combined abort signal: cancel it and it rolls back to its checkpoint and commits nothing. A tool resolves only after the page acknowledges the new state has rendered, so "done" always means "visible." The live footer prints the deployed revision, the repo is MIT, and the judged source is pinned to an immutable tag. Fixtures and Synergy scores are fictional demo data, and the film says so.
This WebMCP app is entirely new work created during the submission period (repository started Sept 1, 2026; every commit is dated inside the window). It shares no code with CoHabby's existing web and mobile products. Only the brand, the mission, and the roommate-compatibility concept pre-date the challenge; CHALLENGE_WORK.md in the repo documents the separation.
Challenges and what I learned
The hardest call was the human boundary. Making everything a tool would have looked more autonomous. It also would have let an agent introduce you to a stranger without asking. The hardest engineering was render acknowledgement: agents move faster than browsers paint, and a tool that returns before its result is on screen creates a page the person and the agent disagree about.
The lesson: small, bounded tools with visible results beat one clever tool, and the best agent-native page is the one where you can tell exactly what the agent did and what you decided.
Built With
- chatgpt
- chrome
- claude
- code
- codex
- json-schema
- nextjs
- react
- tailwindcss
- typescript
- vitest
- webmcp

Log in or sign up for Devpost to join the conversation.