DEV Community

John Carlo Santos
John Carlo Santos

Posted on

SAGE — A Notion MCP Academic Co-Pilot for Filipino University Students

Notion MCP Challenge Submission 🧠

SAGE: The Notion MCP Academic Co-Pilot Built for Filipino Students Who Are Tired of Having 7 Tabs Open

Cover Image showing SAGE Homepage

This is a submission for the Notion MCP Challenge

notes in Google Keep. also in GDocs. also in Obsidian. also in Notion. tasks in Teams. also Google Classroom. also Canvas. also the blackboard in the room that gets erased before you can photo it — and if you did take a pic, you'd forget about it til it's too late anyway. rip bozo.

six, seven different apps, each going their own way, far from what I actually need. advanced studying? researching ahead? a completely different beast on top of all that chaos.

I'm a 2nd year BS CpE student at BulSU. my academic life was a mess. still kind of is. but I built SAGE anyway.

(college is shit. life is also shit. but at least the workspace builds itself now. probably.)


What I Built

your program, year, and semester. that's it. SAGE hooks into Notion via MCP, pulls your curriculum from Ghost Commons, and builds your entire workspace automatically.

Me: "I am a 2nd year BS CpE student, semester 1. Build my workspace."

SAGE: "We built your 2nd Year BS CpE — Semester 1 workspace! 🎉

- COE201 — Differential Equations
- COE202 — Engineering Data Analysis
- CPE201 — Discrete Mathematics
- CPE202L — Object Oriented Programming
- CPE203 — Fundamentals of Electrical Circuits
- CPE204L — Computer Aided Drafting

Each course has its own page with a Topics database and a Tasks database."
Enter fullscreen mode Exit fullscreen mode

60 seconds. six course pages. topic breakdowns. task databases. done.

SAGE starting to build workspace

Notion showing courses under the program

Notion showing topics under a course

Notion showing topics table

Ghost Commons — the Library of Alexandria

not the piracy site. and not the one that burned down. the noble one — the one that was supposed to hold all human knowledge.

Ghost Commons is a curriculum registry pre-seeded from official CHED CMO data. full topic sets, summaries, and study prompts for all six BSCPE Year 2 Semester 1 courses — structured, cached, and queryable. no scraping at runtime. no broken government links. no Cloudflare walls.

the spicy part: building this taught me exactly how painful Philippine education data is. some state universities follow CHED Memorandum Orders like a strict rulebook. others treat it more like... a suggestion. same course code, completely different content. same course name, different units. revisions on top of revisions, branches on top of branches. government websites: archaic, half behind Cloudflare, half with dead links.

normalization was its own beast — GE courses, electives, specific majors, shared majors, all overlapping across institutions. I now deeply understand the pain of anyone who's ever had to build an education system in this country.

Ghost Commons is the answer I built instead. deterministic. instant. no broken links. and it grows.


Video Demo


Show us the code

github.com/kuya-carlo/sage-mcp

the MCP server exposes tools to the agent:

"get_commons_tree"      # fetch curriculum from Ghost Commons
"create_semester_tree"  # build the actual Notion pages
"breakdown_task"        # split overwhelming tasks into micro-steps
"get_weekly_load"       # detect burnout-level weeks
"block_calendar_slot"   # protect recovery time on calendar
"get_dismissed_blocks"  # track dismissed burnout warnings
Enter fullscreen mode Exit fullscreen mode

the agentic loop — every inference call replays the full conversation. every tool result. every message. the model's memory is too shite to do otherwise — keeping it all in the messages array is the footgun you accept to make agents work.

for iteration in range(max_iterations):
    response = await call_model(messages, tools)

    if response has tool_use:
        result = await call_mcp_tool(tool_name, params)
        messages.append(tool_result)
        # loop again
    else:
        return response.text  # done
Enter fullscreen mode Exit fullscreen mode

the bug that haunted me until 1am: agent says BSCpE. database has BSCPE. SQL doing SQL things. query returned nothing. seeding kept retriggering.

fix:

program_code = program_code.upper()
Enter fullscreen mode Exit fullscreen mode

one line. I want those hours back. 😭


How I Used Notion MCP

Notion MCP is the core of SAGE — not a wrapper, not an afterthought. every workspace action goes through it: creating the root page, spinning up course databases with full property schemas, inserting topic rows, querying workspace state for the load monitor.

the hardest part was making it stable at scale. building a full semester workspace means dozens of concurrent MCP calls — course pages, Topics databases, Tasks databases, individual topic entries — all in parallel. I implemented a global semaphore, persistent SSE connection pooling via an async context manager, and inter-course delays to keep the MCP server from choking.

what Notion MCP unlocks here is genuine multi-tenant isolation: every student authorizes their own Notion workspace via OAuth, and SAGE writes only to the pages they explicitly grant access to. tokens are AES-encrypted at rest. no shared state, no data leakage.

the result is a workspace that feels like it was built by hand — because structurally, it was. SAGE just does it in one shot.


Stack

  • FastAPI — MCP server + Ghost Commons API
  • Notion MCP — workspace orchestration
  • Qwen2.5-Coder-32B via Vultr Serverless Inference (Thanks MLH)
  • Supabase PostgreSQL — curriculum registry + token store
  • Gaffa — CMO PDF scraping + extraction (THANKS MLH!!!)
  • Docker + Podman — works on my machine AND in prod. probably.
  • Cloudflare Tunnel — free HTTPS, no ingress pain
  • asyncpg + Pydantic v2 — async all the things

Roadmap

  • v1.1 — pgvector semantic search ("find courses related to embedded systems")
  • v1.2 — Chrome extension LMS bridge (Google Classroom, Canvas, BulSU eLMS)
  • v1.3 — Gmail scraper for GCash/Maya burn-rate dashboard
  • v2.0 — Federated Ghost Commons with Tagalog/English bridges

built solo in under a week. 28 units. part-time job. submitted on hungarian sausages and chaos energy. 🇵🇭

college is shit. life is also shit. but at least the workspace builds itself now. probably.

THE FACTORY MUST GROW

Top comments (0)