Inspiration
Students understand material once and then lose most of it within days. Spaced retrieval is the best-evidenced fix, but tools like Anki need hand-written cards, a screen and daily discipline. The spare minutes of a student's day happen in the kitchen, the car, the bedroom, where an Echo already sits. It just knows nothing about your course, your weak spots, or when you will forget.
What it does
Say "review with Scholia". Scholia picks the concepts you are about to forget from your own forgetting model, asks one question at a time by voice, grades your free-form spoken answer 0-5, explains a miss from the course notes with a citation (MIT OCW 6.0001 lecture and textbook chapter), and reschedules each concept with SM-2. A miss today comes back first next time; a strong answer waits longer. At the end it shows a session summary card; "how am I doing?" shows a progress card with mastery, streak, weak spots and the next review.
Every question and explanation comes from the course material, never from the open web.
How we built it
- MCP server (TypeScript, official MCP SDK), spec 2025-11-25 over Streamable HTTP. Six tools:
start_review,next_question,submit_answer,end_review,progress,explain, with zod schemas and structured content. - Learner memory in Amazon DynamoDB, one table: per-concept SM-2 state, answer history, review sessions. State carries across sessions and devices.
- Amazon Nova Pro on Bedrock (Converse API) writes each question plus a hidden reference answer from that concept's notes, adapting to past grades, and grades the spoken answer against it with feedback written to be heard.
- Course grounding: our own study notes per concept, cited to MIT 6.0001, chunked per section and indexed in-process at cold start, so there is no vector service bill.
- MCP Apps cards: progress and session summary as
ui://resources (text/html;profile=mcp-app), linked via_meta.ui.resourceUri, self-contained HTML with the postMessage bridge. Hosts without MCP Apps get text. - Simulated Alexa+: a web page streams push-to-talk mic audio to Amazon Transcribe, Amazon Nova Pro with tool use drives the Scholia server through a real Streamable HTTP MCP client, Amazon Polly speaks the reply, and cards render in a sandboxed iframe through an MCP Apps host bridge.
- Deployment: AWS CDK, one Lambda behind a Function URL with Lambda Web Adapter so the Express MCP server runs unchanged, MCP stateless JSON mode, bearer token required. DynamoDB provisioned 5/5. Free-tier footprint.
- 51 tests (vitest), including MCP client tests of the full review flow and a DynamoDB Local integration test.
Challenges we ran into
- Nova Pro stopped calling tools when a tool result carried a separate JSON block; it then invented the rest of the review. A single text block with the data appended fixed it.
- Nova Pro put
<thinking>text into replies that would have been spoken aloud. - Nova Pro sometimes restated a question as its answer, which gives the answer away. The simulator now speaks the tool text verbatim when a turn fetches a question.
- The Alexa+ docs show one
_meta.uiexample and no bridge contract, so we followed the MCP Apps spec (SEP-1865) and built a host simulator to verify cards. - CDK local bundling needs bash, which the alpine image lacks.
Accomplishments that we're proud of
- State across sessions that changes what Alexa asks: day 3 brings back exactly what you missed on day 1.
- Grounded, cited answers in a voice loop.
- A real MCP client in the simulator, so the demo exercises the same protocol path Alexa+ would.
- Zero fixed monthly cost.
What we learned
- Voice changes the grading problem: feedback has to be short and spoken, and answers are messy transcripts.
- Tool-result shape matters as much as the prompt for reliable multi-step tool use.
What's next
- Live Alexa+ add-on with OAuth 2.1 account linking, one learner per Amazon account.
- Learners bring their own course (PDF or slides) and Scholia builds the concept map.
- Nightly agent that rewrites questions for chronically weak concepts and sends a weekly digest.
Try it
- Code (MIT): https://github.com/SumonMSelim/scholia-alexa
- Offline, no AWS account:
TUTOR=keyword docker compose up dev dynamodb - Full stack with Nova, Transcribe and Polly:
AWS_PROFILE=<your profile> docker compose up, then open http://localhost:3001 - Deploy:
npx cdk deploy(see README);/mcprequiresAuthorization: Bearer <token>.
Status
The MCP server was deployed on AWS Lambda and verified with an MCP client (initialize, tools/list, every tool, 401 without a token), then taken down after submission so no open endpoint is left running; the CDK stack in the repo recreates it with one command. It is not registered as a live Alexa+ add-on, which needs OAuth 2.1 account linking; the demo uses the simulated Alexa+ in the repo.
Built With
- amazon-bedrock
- amazon-dynamodb
- amazon-nova
- amazon-polly
- amazon-transcribe
- aws-cdk
- aws-lambda
- docker
- express.js
- lambda-web-adapter
- mcp-apps
- model-context-protocol
- typescript
- vitest