awesome-monash
Provides read-only tools for Gmail, including retrieving profile information, listing labels, searching messages with Gmail query syntax, fetching message bodies and attachments, and reading full message threads.
Provides read-only tools for Moodle, including checking session health, listing enrolled courses, retrieving deadlines with optional submission checks, viewing course sections/activities/files, and checking submission status for an activity.
This server does not currently have a deployable release on Glama. Follow the repository's setup instructions to install and configure it for your MCP client, including any required credentials and local dependencies.
Awesome Monash Tools
Agent-native MCP servers for Monash University β Ed, Moodle, Gmail and OnTrack, exposed as 22 read-only tools your agent can call.
English Β· δΈζ
Monash students work across four systems that never talk to each other: Ed for discussion, Moodle for deadlines and materials, Gmail for official mail, OnTrack for FIT task feedback. None of them offers a student-facing API. This repository turns all four into small, typed, read-only MCP tools so an agent can answer "what is due, what did my tutor say, and what did I miss?" with real data instead of guesses.
Unofficial. Not affiliated with Monash University, Ed, Moodle, Google or Doubtfire. Use your own account, at your own risk, and respect each service's terms.
π€ Built for agents, not for humans
This repository ships no app, no dashboard and no chat UI. The only interface is a set of MCP tools. Every design choice targets the model on the other side of the protocol:
Decision | Why it exists |
Tools, not pages | An agent cannot "browse" Moodle. It can call |
Descriptions written for models | Each tool states when to use it, what it returns, and what the next step is. |
Errors are instructions | A dead session returns "Moodle rejected the saved session. Run |
Deterministic output | Stable field names, ISO timestamps, nearest-first sorting. Nothing the model has to re-derive. |
Read-only by construction | No write path exists in the codebase. Every tool is annotated |
One credential, many calls | Login is a CLI step; the agent never sees or asks for a password. |
Local stdio only | No server, no telemetry, no account to create. The host spawns a process. |
Works with any MCP host: Claude Code, Claude Desktop, Cursor, Codex, DeepSeek Harness, or your own agent loop.
Related MCP server: induslms-academics
π Table of Contents
π‘ Why this exists
Ask a Monash student a simple question β "what's due this week?" β and the real answer requires four logins, four UIs and a mental join. The information exists, but it is optimized for humans clicking around, not for an agent answering.
Existing tools stop halfway:
moodle-cli,edstem-cliandontrack-cliare excellent terminal tools. They print tables for a person and assume a person runs them.Scraping libraries return HTML. A model then burns context re-reading a Moodle theme.
Each service authenticates differently (API token, SSO cookie, OAuth, refresh cookie). Doing that per question is impossible.
This project does the boring part once β authentication, normalization, and error recovery β and exposes the result as 22 MCP tools with consistent shapes. The agent does the thinking; the repository does the plumbing.
What this is not: not a Monash client, not a notification app, not a scraper you point at arbitrary URLs, and not a way to automate submissions. There is deliberately no write access.
π¦ What's inside
Component | What you get |
4 MCP servers |
|
1 combined server |
|
1 CLI |
|
22 tools | typed inputs, JSON output, actionable errors |
Docs | Auth guide Β· Tool reference Β· llms.txt |
Server | Bin | Tools | Auth captured by |
Ed |
| 7 | API token from https://edstem.org/settings/api-tokens |
Moodle |
| 5 | Monash SSO cookie jar (Chrome, one login) |
Gmail |
| 5 | Google OAuth, |
OnTrack |
| 5 | Monash SSO refresh cookie |
All |
| 22 | whichever sources you connected |
π― What agents can do
Real questions, and the tools that answer them:
Ask your agent | Tools it calls |
"What is due in the next 14 days, and which ones have I already submitted?" |
|
"Summarize this week's Ed threads in FIT1045; skip anything already answered." |
|
"Did my tutor leave feedback on P1? Quote the part about the data model." |
|
"Find the enrolment email from Monash and tell me the payment deadline." |
|
"What's in week 8 of FIT1047, and is there a lab sheet?" |
|
"Build my week: deadlines first, then unread Ed threads, then tutor feedback." | all four servers |
Because everything is scoped to your own account, the answers are yours: your submissions, your feedback, your inbox. Nothing is shared or cached remotely.
π Quick start
Requires Node.js 20.11+ and Google Chrome (only for the two SSO logins).
# Until the npm release lands, install from source (30 seconds):
git clone https://github.com/jackdsjk/awesome-monash-tools.git
cd awesome-monash-tools
npm install
npm run build
npm link # exposes the `awesome-monash` command
# Connect the sources you actually use.
awesome-monash login ed
awesome-monash login moodle
awesome-monash login ontrack
awesome-monash login gmail --client-id <id> --client-secret <secret>
# See what is connected.
awesome-monash status
# Start a server.
awesome-monash serve alllogin moodle and login ontrack open a Chrome window: finish the normal Monash SSO login, wait for the dashboard, and the session is saved automatically. Nothing is typed into this tool.
After the npm release:
npx -y awesome-monash-tools@latest <command>works identically.
π MCP configuration
Claude Code
claude mcp add monash -- awesome-monash serve allClaude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json)
{
"mcpServers": {
"monash": {
"command": "awesome-monash",
"args": ["serve", "all"]
}
}
}Prefer one server per source (smaller tool list, clearer permissions):
{
"mcpServers": {
"ed": { "command": "awesome-monash", "args": ["serve", "ed"] },
"moodle": { "command": "awesome-monash", "args": ["serve", "moodle"] },
"gmail": { "command": "awesome-monash", "args": ["serve", "gmail"] },
"ontrack": { "command": "awesome-monash", "args": ["serve", "ontrack"] }
}
}Cursor uses the same JSON in .cursor/mcp.json.
Codex (~/.codex/config.toml):
[mcp_servers.monash]
command = "awesome-monash"
args = ["serve", "all"]π§° Tool catalogue
Full parameters and return shapes: docs/tools.md.
Ed β discussion threads and lessons
Tool | Description |
| Account and courses behind the token |
| Course ids and codes |
| Threads of one course, newest/top/unanswered |
| Search titles and bodies across courses |
| Full thread with nested replies and staff answers |
| Weekly lesson modules |
| Every slide as text/Markdown, files and video URLs |
Moodle β deadlines and materials
Tool | Description |
| Session health check |
| Enrolled courses |
| Due dates nearest first, optional submission check |
| Sections, activities, label text, file links |
| submitted / graded / none for one activity |
Gmail β the official inbox
Tool | Description |
| Address and counts |
| Labels and ids |
| Gmail query syntax, metadata results |
| Plain-text body, recipients, attachments |
| Every message in a thread |
OnTrack β FIT task feedback
Tool | Description |
| Account behind the refresh cookie |
| Units and project ids |
| Status, weighting, due dates |
| Tutor comments and grade rationale |
| Save a task sheet or submission PDF locally |
π§± Design principles
Normalize at the edge. Moodle is scraped internally and returned as structured sections β the model never sees HTML.
One job per tool.
moodle_deadlinesdoes deadlines;moodle_submission_statuschecks one submission. No mega-tools.Verb + noun names, prefixed by source.
ed_get_threadis unambiguous in a 22-tool list.Fail with the fix. Every
AmtErrorcarries ahint; the tool result includes the exact command to run.Read-only by construction. No write code path exists.
ontrack_downloadwrites a local file and is the only non-read-only annotation.Stable shapes. Field names, ISO timestamps, deterministic ordering β agents can rely on them between calls.
Local and quiet. stdio transport, no server component, no analytics, no remote cache.
π Security and privacy
Credentials live in
~/.config/awesome-monash-tools/credentials.json, mode0600;AMT_CONFIG_DIRrelocates them.No password is ever entered into this tool. Moodle and OnTrack logins happen in a real Chrome window.
Gmail requests only
gmail.readonly; revoke at https://myaccount.google.com/permissions.No telemetry, no remote logging, no third-party service in the middle.
Output is sensitive by definition (grades, feedback, email). Treat transcripts accordingly.
Environment overrides exist for advanced users:
ED_API_TOKEN,MOODLE_COOKIE,ONTRACK_REFRESH_TOKEN,GOOGLE_CLIENT_ID,GOOGLE_CLIENT_SECRET.
π Repository layout
src/core/ config, credential store, HTTP retries, MCP helpers
src/ed/ Ed client, tools, server bin
src/moodle/ Moodle client (AJAX + scraping), tools, server bin
src/gmail/ Gmail client + OAuth loopback, tools, server bin
src/ontrack/ OnTrack client (refresh-cookie auth), tools, server bin
src/all.ts combined server
src/cli.ts login / logout / status / serve
docs/ auth guide and tool reference (EN + δΈζ)
scripts/ protocol-level smoke testπ Development
npm install
npm run check # tsc --noEmit + vitest
npm run build # emit dist/
npm run smoke # start every server over stdio and call one tool
npm run dev -- statusThe test suite uses a fake fetch; no real account is required to develop. See AGENTS.md for conventions.
π€ Contributing
New tools: keep them read-only, add a zod schema, annotate with
readOnlyHint, and make the error hint actionable.New sources: follow
src/ed/(client β tools β server) and add a credential section in docs/auth.md.Docs: update both
README.mdandREADME.zh-CN.md, and both language versions ofdocs/.Run
npm run check && npm run smokebefore opening a PR.
π Related projects
Other community work in the Monash Γ agents space. Some of it taught this project how the APIs behave; none of it is bundled here.
Project | What it does | License |
Ed CLI + MCP server, the closest prior art | MIT | |
Moodle CLI covering deadlines, grades and forums | MIT | |
OnTrack tasks and submissions from the terminal | MIT | |
OnTrack watcher with real-time feedback | Apache-2.0 | |
Self-hosted campus memory layer (Cove) | Apache-2.0 |
Built something else for Monash students? Open a PR and add it to the table.
π License
MIT Β© 2026 jackdsjk
Built for agents that need to know what is due.
This server cannot be deployed
Maintenance
Related MCP Connectors
Nifty's MCP server β exposes tasks, projects, messages, and files as tools for AI agents.
Your Gmail, Calendar, Drive, GitHub, Oura, wallet and confirmed profile facts in any MCP client.
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
214 tools for AI agents over one MCP endpoint: image, video, audio, 3D, data, storage, mail, GPUs.
Related MCP Servers
- AlicenseBqualityCmaintenanceEnables natural-language, read-only access to a user's own learning-management account for courses, assignments and deadlines, lecture attendance, notices, grades, and syllabus evidence, including reading page/slide/cell locations inside PDF, Office, HWP/HWPX, HTML, and ZIP attachments. Runs locally over stdio or remotely over OAuth-protected Streamable HTTP for desktop and mobile clients, and can compare changes against a locally encrypted baseline.19MIT
- AlicenseCqualityAmaintenanceProvides read-only access to Indus LMS academic data, letting agents browse courses, announcements, assignments, shared resources, notifications, attendance records, and school email inboxes. It exposes these capabilities as MCP tools over stdio, with no login, mark-read, or submission operations.2236 PyPIGPL 3.0
- AlicenseNot gradedqualityBmaintenanceEnables MCP-compatible agents to access privacy-redacted document reading, deadline tracking, memory, drafting, and privacy-checked model and web-search tools over stdio.MIT
- AlicenseNot gradedqualityCmaintenanceA local stdio MCP server exposes 19 tools, one resource, and one prompt so compatible AI assistants can query a student's disciplines, assessments, deadlines, and study materials, then explain questions and save practice exams as local drafts. It reuses the app's local API and SQLite store, keeping credentials and academic data on the student's own computer.MIT