Inspiration

I'm a university student, and my problem was never a lack of planners — it was that the information was scattered. A deadline hides in an email, an announcement sits unread in the LMS, and the plan I wrote last week is silently wrong. Acadra answers two questions in one place: what changed since I last checked? and what should I do today? Voice is the lowest-friction way to ask that between classes, so I built it for the Alexa+ track.

What it does

Acadra is an AI academic assistant exposed to Alexa+ over MCP and to the browser through a Next.js app; both read and write the same server state.

  • Unified academic inbox. Gmail and manual text, HTML, or PDF become one set of facts: assignments, announcements, readings, and events.
  • Evidence, not guesses. Every item links to its source revision and excerpt; missing or contradictory fields stay unknown and are flagged uncertain instead of invented.
  • What changed? An append-only change feed marks items as new or edited.
  • A plan you can start. Selected-day tasks, a backlog, kanban-by-day, tags, steps, and estimated minutes.
  • Conversation. "Alexa, I have 45 minutes before class — what should I study?" → 30 minutes of SQL exercises and 15 of review, and the reading moves to tomorrow when I say yes.

How we built it

Python, MCP SDK, Pydantic v2, SQLAlchemy 2, PostgreSQL, and Next.js. The MCP server owns the state; Alexa+ and the web app are thin clients over the same services.

  • Pipeline: source envelope → sanitize → content hash → restricted extraction → validation → identity resolution → item, evidence, and change event committed together. Re-processing is idempotent.
  • Powerless extraction: a restricted Groq graph sees only clean text and a fixed schema and returns candidates, never writes — so a prompt-injected email cannot authorize anything.
  • Contract: 27 typed, paginated study_* tools and 13 read-only resources, shared by both clients.
  • Alexa+ bridge: a server-side MCP client in the Next.js simulator calls /mcp, so credentials never reach the browser; a deterministic router stands in until the real client is connected.

Challenges we ran into

  • Making the model untrustworthy on purpose. It invented deadlines and grade weights, so unconfirmed facts now stay NULL and carry field-level evidence and a review state.
  • Dates. "Due Wednesday" is not a timestamp — date-only precision, UTC storage, and an explicit current-date context (models kept assuming 2012).
  • Real change detection. Provider timestamps lie, so a normalized content hash decides whether anything changed.
  • Evaluation. An LLM cannot grade an LLM, so I built a hand-labelled dataset of real inputs with expected.json — including empty cases — plus a visualizer that scores updates without model integration.
  • Client reliability. Long multi-step requests hit the MCP round limit and errored mid-task; sequential realistic conversations exposed it.

Accomplishments that we're proud of

  • A working vertical slice: a real email or PDF becomes a versioned, evidenced item and a visible change event.
  • Trust enforced in code, not just documented — no fabricated deadlines, and corrections cannot be silently overwritten.
  • A deterministic evaluation harness built on real, hand-labelled data and negative cases.
  • A demoable Alexa+ experience (simulator plus bridge) before the real integration exists.
  • Design docs precise enough to review the schema, pipeline, and contract without the code.

What we learned

  • Provenance is a feature. Once facts point at their sources, uncertainty and "what changed?" become cheap.
  • Facts and estimates must never share a field, or the assistant states its guesses as truth.
  • Authority, not intelligence, is the hard part of agentic systems.
  • MCP rewards restraint: thin tools, bounded outputs, honest annotations.
  • Evaluation shaped the extractor more than any prompt did.

What's next for Acadra - Your AI academic assistant

A Google Classroom connector, availability-aware planning, alerts with targeted replanning, a correction UI, more connectors (LMS, WhatsApp, Telegram, Discord), PERSONAL.md for advanced preferences, and an authorization boundary before hosting.

Built With

Share this project:

Updates

Submission history