Inspiration

I'm a first-year engineering student with final exams coming up. Every evening I lose time deciding what to study, and every study app wants me to open it and type. I wanted to just ask out loud: "I've got an hour — what should I study?" and get a real answer based on my actual exams and what I've already covered.

What it does

Study Pilot is a self-hosted MCP server for the Alexa+ track. You tell Alexa about your exams once, and it remembers them across conversations:

  • add_exam — "My Calculus exam is on 16 November: limits, derivatives, integration, series."
  • log_study_session — "I did 45 minutes of Calculus and finished limits."
  • what_should_i_study — "I've got an hour, what should I study?" → picks the most urgent subject and the next topic.
  • plan_revision — "Plan the next 5 days, 2 hours a day." → a day-by-day timetable in 15-minute blocks; the day before an exam is reserved for that subject.
  • progress_report — "How am I doing?" → days left, topics done, minutes studied.
  • remove_exam — clean up after an exam.

Every tool returns structured output plus a short speech field written to be read aloud, so the answer works on a speaker and the full timetable can go to a screen.

How I built it

  • Python with the official MCP Python SDK (pinned to 1.30.0) and FastMCP.
  • MCP spec 2025-11-25 over Streamable HTTP at /mcp, plus a /health route.
  • Six tools with tool annotations (readOnlyHint, destructiveHint, idempotentHint) so an agent knows which calls are safe; remove_exam is the only destructive one.
  • A resource (studypilot://exams) and a prompt (daily_checkin).
  • State is stored in a small JSON file with atomic writes and a lock, so memory survives new sessions and server restarts.
  • The ranking is simple and explainable: urgency = (topics left + 1) / (days left + 1) / (1 + minutes studied in the last 3 days / 60). Subjects you just studied drop down, so they rotate.
  • Because Alexa+ device access for MCP integrations is in preview, demo_alexa.py plays the Alexa+ orchestrator with scripted turns using the official MCP client. The server is real: it negotiates protocol 2025-11-25, and the second conversation opens a brand-new MCP session to prove the memory carries over.
  • I used AI coding assistance (Claude) while building.

Challenges I ran into

The current MCP Python SDK (2.x) removed mcp.server.fastmcp and defaults to a newer protocol version than the one this hackathon requires, so the quickstart code I found didn't run. I pinned SDK 1.30.0, whose latest protocol is exactly 2025-11-25. Writing replies that sound natural when spoken (short, no lists, "in 3 days" instead of dates) took more iteration than the logic did.

Accomplishments that I'm proud of

State that genuinely persists across separate MCP sessions, a recommendation you can explain in one sentence, and voice-first responses with a structured version for screens.

What I learned

How MCP separates tools, resources and prompts; how Streamable HTTP sessions work; and that designing for voice means designing the answer, not the interface.

What's next

Multi-user support with Alexa account linking, a calendar export of the revision plan, spaced-repetition reminders, and an MCP Apps card that shows the timetable on Echo Show and Fire TV.

Built With

Share this project:

Updates

Submission history