Inspiration
Healthcare conversations contain some of the most valuable information about a patient's condition, but much of that knowledge is lost after every consultation. A patient may explain their symptoms, previous experiences, concerns, and medical journey to one doctor, only to repeat the same story when they visit another provider. Doctors often spend valuable consultation time collecting information and documenting notes instead of focusing on care.
We were inspired by a simple question: what if healthcare could remember every conversation? Noa was created to build a continuous memory layer for healthcare, preserving patient stories and transforming them into actionable clinical context.
When the WebMCP Challenge launched, we saw an obvious next step. Noa already had structured clinical memory. What it didn't have was a way for agents to reach that memory directly.
What it does
Noa is a voice-first medical intelligence platform with two core experiences. Before a consultation, patients open a simple web interface and speak naturally about their symptoms, having an AI-guided conversation instead of filling out forms, while Noa asks adaptive follow-up questions and captures their medical story. During consultations, doctors record their conversation with the patient, and Noa converts it into structured clinical documentation, including SOAP notes, patient summaries, triage scores, red flag indicators, and doctor briefings.
With WebMCP added, that same clinical intelligence is now reachable by agents directly. A doctor working inside an agent-enabled browser can ask for a patient's history and get a real answer pulled from Noa's records instead of switching tabs and searching manually. An agent can draft a follow-up care plan from an existing SOAP note and hand it to the doctor for review. Voice intake data a patient recorded before their visit can be summarized and surfaced the moment a doctor needs it, cutting the time spent re-explaining a story that was already told.
How we built it
Noa's core platform runs on AWS. Amazon Bedrock Nova 2 Sonic handles real-time voice conversations and contextual interaction, Amazon Bedrock Nova 2 Lite handles clinical reasoning and structured summaries, Amazon DynamoDB stores patient profiles, consultation sessions, transcripts, and medical memory records, Amazon Cognito manages authentication, and Amazon S3 stores session recordings and generated files. The application is built with Next.js, TypeScript, Tailwind CSS, and WebSocket-based real-time communication.
For the WebMCP integration, we built a full agent-facing tool layer on top of that platform. On the server, a spec-compliant JSON-RPC 2.0 endpoint at /api/mcp handles tools/list, tools/call, resources/list, resources/read, prompts/list, and prompts/get, with support for both single-turn requests and SSE streaming for external agents. On the browser side, we implemented the native WebMCP standard directly on document.modelContext, with aliases on window.webmcp and navigator.modelContext, so any page in Noa auto-registers its tools on load and agents in a WebMCP-aware browser can discover and call them without a server round trip. Noa's clinical AI functions, patient and session data, and clinical templates are exposed as MCP tools, resources, and prompts respectively. We used synthetic patient data throughout development and demo to keep the focus on the integration itself.
What we built during the challenge
- A JSON-RPC 2.0 MCP server at /api/mcp, supporting standard MCP methods and SSE streaming for external agents and MCP clients
- A browser-native WebMCP runtime on document.modelContext (aliased to window.webmcp and navigator.modelContext), letting agents in a WebMCP-enabled browser list and call Noa's tools directly on the page
- A registry exposing Noa's clinical AI functions as callable tools, including SOAP note generation, clinical insight generation, triage priority scoring, and patient-friendly summary generation
- Structured clinical resources addressable by URI, covering patient records, consultation sessions, transcripts, and SOAP notes
- A set of clinical prompt templates exposed through MCP, covering SOAP note generation, triage assessment, and follow-up care planning
- A React provider that safely attaches the WebMCP runtime across the app and bridges it to Noa's live session state, so an agent can query things like the active consultation or current transcript in real time
None of this tooling layer existed before the hackathon. Noa's voice-to-SOAP pipeline and dashboard were already live; the agent-facing protocol, tool registry, and browser runtime were built during the challenge window.
Challenges we ran into
Designing a system that handles natural human conversation while producing structured clinical information was already hard before WebMCP, since patients describe symptoms differently, give incomplete information, and explain problems in their own words. Adding an agent-facing layer on top raised the stakes on that structure, since a tool an agent calls needs a predictable schema every time, not just an output that reads well to a person. We also had to think carefully about exposing patient data through MCP resources: we used synthetic data throughout and kept access scoped to what a specific tool call needs, rather than exposing broad record dumps.
What we learned
Building Noa showed us that the future of healthcare AI is not only about generating answers, it's about preserving context. Adding WebMCP showed us the next layer of that: context is only useful if something can act on it. By exposing Noa's structured clinical memory through a standard agent protocol, we saw firsthand how an agent and a doctor can split the work of a consultation, with the agent handling retrieval and drafting while the human keeps clinical judgment.
What's next for Noa
We want to expand the WebMCP tool surface to cover longitudinal care planning across multiple visits, add scoped permission tiers so different agents can be granted different levels of access to a patient's record, and pursue formal HIPAA compliance review now that clinical data is reachable through an external protocol.
Built With
- amazon-dynamodb
- bedrock
- nextjs
- webmcp
Log in or sign up for Devpost to join the conversation.