Inspiration
Kids learn more when there's something to work toward — and parents want to know the learning really happened, not just that a video played. We wanted to see what a voice assistant can do here if it remembers the whole story across days and if the proof of learning can't be faked by simply asking the assistant.
What it does
The parent sets a goal by voice: "Set aside 50 dollars for Ali to learn Python." The reward (simulated — no real money moves) is split into milestones: 10% after 2 lessons, 15% after 4, 25% after all 5, and 50% for passing an oral quiz. The child reports each lesson in his own words: "I finished lesson two, variables are labelled boxes." When a milestone is reached, Alexa tells the parent money is waiting; the parent approves every release. Memory across sessions: goals, lessons, money and quiz attempts live in the MCP server. Close the session, restart the server, come back the next day — Alexa still knows where things stand. An oral quiz the AI is not part of: in quiz mode the child's answers go straight to the MCP server, which grades them; the language model is out of the loop and can't give hints. Answers are timed by the server (20 s after the question is read), asked in order, 3 attempts max. Saying "Alexa, what is the answer?" simply counts as a wrong answer. The parent sees everything: the quiz report lists every answer word for word with its time, and flags answers that took much longer than the child's usual time — a timer can't stop someone looking an answer up, but looking up takes time. Speaker rights: who is speaking comes from the device (a request header), never from the model. Only the parent can fund, release, cancel or read the report; only the child can log lessons and take the quiz. A live progress card rendered inline as an MCP App.
How we built it
MCP server (TypeScript, official @modelcontextprotocol/sdk): protocol 2025-11-25 over Streamable HTTP, stateless, 10 tools (create_learning_goal, log_lesson_done, start_oral_quiz, submit_quiz_answer, release_reward, get_quiz_report, …). All rules live in one pure domain module over SQLite (Node's built-in node:sqlite), so state survives restarts. MCP App: the progress card is a ui:// resource built with @modelcontextprotocol/ext-apps, hosted in a sandboxed iframe through the official app bridge. Alexa simulator: official Alexa+ developer tooling is available to select partners only, so — as the hackathon FAQ allows — a React page plays the Alexa device and is a real MCP client (initialize, tools/list, tools/call, resources/read), with voice in and out (Web Speech API) and a live protocol trace. Language model: the agent loop sends the tools to the model, validates every tool call against tools/list, and runs it with the device's speaker identity. A deterministic mock model drives the demo with no AWS account; an Amazon Nova (Bedrock Converse API, tool use) provider is included behind a local proxy so AWS keys never reach the browser. Tests: 20 server tests (milestones, quiz timing, speaker rights, memory across restarts), 11 web tests (Bedrock Converse mapping, mock model), an HTTP smoke test, and a script that restarts the server four times and checks nothing is lost.
Challenges we ran into
Keeping the language model honest: amounts, scores and progress must come from tool results, and the quiz must not depend on the model at all — hence quiz mode and server-side grading. Making cheating harder than learning in a home quiz: ordered, server-timed answers, limited attempts, verbatim report, and slow-answer flags. A new AWS account on the Free plan is pinned to one Region and started with Bedrock quotas at 0; AWS Support fixed it within about a day (details in our friction log). Making npm install work on a clean Windows machine without a C++ toolchain (we moved to Node's built-in SQLite).
Accomplishments that we're proud of
The whole flow works end to end, by voice or by typing, across real server restarts. The quiz is a real check: the AI can't be talked into helping, and the parent can see how each answer was given. It runs from a fresh clone with two commands and no AWS account.
What we learned
MCP is a clean boundary: the server owns the rules and the state; any assistant can be the voice on top. MCP Apps make a voice flow much easier to follow — the card shows what Alexa just said.
What's next for Kodra — learning goals for Alexa+
Trying the server with Alexa+ itself once the developer tooling opens up, and more courses for the quiz bank.
Built With
- api
- context
- express.js
- mcp
- model
- node.js
- react
- speech
- sqlite
- typescript
- vite
- web
Log in or sign up for Devpost to join the conversation.