Inspiration
Family caregivers manage an overwhelming amount of life-admin for a relative who can't manage it alone — medications, appointments, insurance and benefits paperwork, provider calls. Most of it is tedious. Some of it is genuinely high-stakes: a dosage change, an official form submitted to a government agency. Today, an AI agent trying to help has to either guess its way through a UI built for humans, or get locked out of anything that actually matters. We wanted to see what changes when a page can tell an agent exactly what it's allowed to do — and, just as importantly, what it has to ask a human about first.
What it does
Kinstead is a shared "care circle" dashboard for a family managing a
relative's care. It exposes seven real WebMCP tools that an agent can call:
adding tasks, logging appointments, and drafting benefits forms happen
instantly. Proposing a medication change and submitting an official form are
different — they're irreversible or safety-relevant, so those tools pause
using WebMCP's requestUserInteraction() and put the exact proposed action
in front of a real person on the page before anything actually happens.
Every action, whether a family member clicked it or an agent called it,
lands in one shared activity log, so the whole family can see what their
agent did on their behalf.
How we built it
The app is a small Express backend serving as the shared source of truth for
the care circle, paired with a vanilla HTML/CSS/JS frontend — no framework,
no build step, so the WebMCP implementation stays fully auditable in a few
files. Tools are registered via document.modelContext.registerTool() in
public/app.js. Low-risk tools call the backend and return immediately.
High-risk tools call client.requestUserInteraction() to pause for a
same-page confirmation modal, with a fallback path for hosts that haven't
implemented that part of the spec yet, so the human-in-the-loop guarantee
holds regardless of host support. We used Claude to design and build the
core app and the risk-tiered tool architecture, then Google AI Studio to
give the dashboard a warmer, more distinctive visual design without
touching the underlying tool logic. It's deployed on Render.
Challenges we ran into
WebMCP is genuinely early — the API surface, and even which global it's
exposed on, is still moving. We built in feature detection and a fallback
path so the tools work whether a host exposes document.modelContext or
navigator.modelContext. We also had to be deliberate about not letting
every tool behave the same way: it would have been easy to make everything
execute instantly, but the actual point of the project was making the
irreversible tools genuinely pause for a human, which meant designing the
confirmation flow carefully so it works the same way whether triggered by
a live agent or by someone testing the flow directly on the page.
Accomplishments that we're proud of
Every one of the three real "you can't undo this" actions in the app — medication changes and form submissions — is provably gated behind a human click, not just a prompt suggesting the agent should ask first. We also added on-page "simulate agent" triggers for every tool, so anyone (a judge, a family member, us recording the demo) can see the full tiered-risk flow without needing a specific WebMCP-capable browser or extension installed.
What we learned
The interesting design problem in agent-facing tools isn't "what can the agent do" — it's "what should never happen without a person seeing it first." WebMCP's page-defined tool model turns that from a prompt-engineering problem into an actual enforced mechanism, which feels like the right layer for it to live at.
What's next for Kinstead
Real multi-user accounts instead of a single demo care circle, a notifications layer so family members get pinged when something needs their approval instead of having to check the dashboard, and expanding the benefits-form drafting to pull from real program requirements rather than a generic template.
Built With
- anthropic
- claude
- css3
- express.js
- gemini
- github
- google-ai-studio
- html5
- javascript
- model-context-protocol
- node.js
- render
- webmcp
Log in or sign up for Devpost to join the conversation.