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 official CHED 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 task database."
60 seconds. six course pages. task databases. competency tags. done.
Ghost Commons — the Library of Alexandria
not the piracy site. and also 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 seeded from official CHED CMO PDFs. the vision: a big library of topics, syllabi, and study paths. filis for now. in the end, for everyone.
structured and queryable — depending on the ETL pipeline I plan to build. when I decide to build it.
the spicy part: it's lazily seeded. nobody pre-loads anything. first time someone asks for BSCPE curriculum, SAGE fires a background job:
Gaffa searches Google for "CHED CMO BS Computer Engineering filetype:pdf"
→ finds PDF on a university site
→ downloads it
→ parse_json extracts structured curriculum data
→ upserts to Supabase
→ next student asking the same thing? instant.
user gets told "seeding in progress, try again in 30 seconds. get rekt." second request hits cache. the commons grows every time someone new uses it.
planned to expand to international curricula and user-uploaded syllabi too. someday. maybe.
Video Demo
Show us the code
github.com/kuya-carlo/sage-mcp
the MCP server exposing 6 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
the agentic loop — every inference call repeats EVERYTHING. 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
the bug that haunted me until 1am: agent says BSCpE. database has BSCPE. SQL doing SQL things. query returned nothing. seeding kept retriggering, became an easy footgun.
fix:
program_code = program_code.upper()
one line. I want those hours back. 😭
CMO 87 for BS CpE is 81 pages. old code parsed through all of it. yikes. max_pages: 15 fixed it.
How I Used Notion MCP
this is the actual core of SAGE. a hosted MCP server (FastAPI) that the agent connects to, reads tool schemas from via tools/list, and calls autonomously.
when a student sends a message, the agent doesn't follow a hardcoded script. it reads the available tools, reasons about what to call, calls them, reads the results, and decides what to call next. the Notion workspace gets built because the agent decided to build it — not because I told it to in order.
the MCP tools directly manipulate the student's Notion workspace via the Notion API — creating pages, databases, calendar blocks, sub-items. Notion isn't just the output. it's the interface, the storage, and the frontend all at once.
without MCP, this is just a chatbot that gives study advice. with MCP, it's an agent that actually does the work.
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
- 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 (students don't have time to manually track digital money)
- v2.0 — Federated Ghost Commons with Tagalog/English bridges
built solo in under a week. 28 units. part-time job. submitted at 1am on hungarian sausages and chaos energy. 🇵🇭
college is shit. life is also shit. but at least the factory grows — and the workspace builds itself now. probably.







Top comments (0)