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
uncertaininstead 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
NULLand 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
- fastmcp
- groq
- langchain
- langgraph
- next.js
- postgresql
- python
- sqlalchemy
- typescript
Log in or sign up for Devpost to join the conversation.