MyCourseVille MCP Server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MyCourseVille MCP ServerWhat's changed since my last sync?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MyCourseVille MCP Server
An MCP server that gives an AI agent access to your MyCourseVille account: new assignments with their deadlines and descriptions, course materials, and released grades — plus a "what changed since last time" feed.
Personal tool for your own account data. Keep the poll interval polite and never commit your credentials.
How it works
MCV has an official OAuth2 API (/api/v1/public/get/*), but it requires registering an
app to get a client_id/client_secret, and its endpoint names aren't publicly
documented. This server instead logs in exactly like the MCV web client does — through the
IT Chula SSO button by default, or the plain MCV form — then reads the same server-rendered
course pages the site serves to a browser: the course home for materials, /assignment for
deadlines, and /portfolio-<student id> for scores. See
docs/ENDPOINTS.md.
Fetched data lands in a local SQLite snapshot. Every sync diffs against that snapshot and
appends to an events log — that log is what whats_new reads, so the server can tell you
what appeared since you last looked. A background poller refreshes on an interval so a new
assignment is noticed even when no chat is open.
On "new": MCV doesn't reliably expose a posted-at timestamp, so first_seen — when
this server first observed an item — is the proxy. The first sync backfills everything
quietly rather than reporting your entire semester as new.
Related MCP server: UofT Student Helper MCP Server
Setup
uv sync --extra dev
cp .env.example .env # then fill in MCV_USERNAME / MCV_PASSWORD
uv run mcv-mcp --selftest--selftest logs in, syncs once, and prints how many courses, assignments, materials and
grades it found. Get that working before wiring up the agent.
Register with Claude Code:
claude mcp add mcv -- uv --directory C:\Users\velys\Documents\mcp_mcv run mcv-mcpThen ask: "What's due this week?", "Anything new on MCV since yesterday?", "Download the latest slides for Comp Prog."
Tools
Tool | What it answers |
| New/changed assignments, materials and grades since a point in time |
| What's due in the next N days, soonest first |
| Enrolled courses, optionally one semester |
| Assignments with deadline + description |
| Full detail for one assignment |
| Files posted in a course (folder, name, URL) |
| Save a file locally; extracts PDF text so it can be read |
| Released scores |
| Force a refresh ( |
| Diagnostics: login state, last sync, row counts |
Configuration
Variable | Default | Meaning |
| — | Your MCV credentials |
|
|
|
|
| Poller interval (floor 10) |
|
| Set |
|
| Where the DB, cookies and downloads live |
State is kept outside the repo. Cookies are persisted, so restarts don't re-login.
Run the poller separately (e.g. under Task Scheduler) with:
uv run python -m mcv_mcp.pollerLayout
src/mcv_mcp/
config.py settings, URLs, state paths
client.py Chula SSO login, cookie persistence, throttled AJAX transport
parsers.py HTML -> dicts (pure functions, fixture-tested)
store.py SQLite snapshot + event log
sync.py orchestration + background poller
server.py MCP tool definitionsMCV's markup is the fragile part, and it's confined to parsers.py. If something stops
returning rows, capture a fresh fixture (see docs/ENDPOINTS.md) and fix the selector there.
Status
Working against a real account: login, all four parsers, downloads and change detection are verified end to end. A representative sync pulled 9 courses, 20 assignments (every one with a parsed deadline), 112 materials and 69 graded items; the following sync reported zero changes, so the diff log stays quiet until something actually moves.
Known limits:
Grade release is detected by polling, not pushed. A score appearing shows up as a
grade_changedevent within one poll interval (default 30 min).Only the current semester is synced unless you pass
full=truetosync_now.MCV's markup is the fragile part. If a parser starts returning zero rows, capture a fixture and fix the selector — see docs/ENDPOINTS.md.
Development
uv run pytestMaintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to interact with Canvas LMS and Gradescope, allowing users to query courses, assignments, modules, calendar events, and find relevant resources using natural language.59ISC
- FlicenseNot gradedqualityNot gradedmaintenanceEnables University of Toronto students to access academic data from ACORN and Quercus via AI assistants. It provides tools to retrieve course schedules, enrollment details, syllabi, assignments, and announcements.
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to access Canvas LMS course content, including assignments, modules, announcements, and files, to help students manage their coursework.59ISC
- AlicenseNot gradedqualityDmaintenanceEnables AI to read MyCourseVille data locally, including assignments, deadlines, grades, announcements, and course materials.1MIT
Related MCP Connectors
Your memory, everywhere AI goes. Build knowledge once, access it via MCP anywhere.
Brazilian Open Finance MCP — 30+ banks (Itaú, Nubank, etc.) to Claude/Cursor. Read-only.
Cross-AI personal memory. Save once in ChatGPT, recall in Claude, Mistral, Grok, or any MCP client.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/aongzera/mcv-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server