Provides tools to retrieve course syllabi, modules, assignments, and announcements from the Quercus learning management system using the Canvas LMS API.
Integrates with the Canvas LMS platform to access academic information, course materials, and student assignment schedules.
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., "@UofT Student Helper MCP ServerWhat assignments do I have coming up for CSC148?"
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.
UofT Student Helper MCP Server š
A Model Context Protocol (MCP) server that helps University of Toronto students access their academic information through AI assistants. This server provides tools to interact with ACORN (course enrollment system) and Quercus (learning management system) to retrieve course information and syllabi.
šÆ Features
ACORN Integration
View Enrolled Courses: Get a list of all courses you're currently enrolled in
Course Details: Access detailed information about specific courses
Course Schedule: View your class schedule and timetable
Academic History: Retrieve past course enrollments and grades
Quercus Integration
Access Syllabi: Download and view course syllabi
Course Modules: Browse course content and modules
Assignments: View upcoming assignments and due dates
Announcements: Get latest course announcements
šļø Architecture
This MCP server is built using the Cohere North MCP Python SDK and provides the following tools:
Available Tools
get_enrolled_coursesRetrieves all courses the student is currently enrolled in
Returns: Course codes, names, sections, and credits
get_course_detailsGets detailed information about a specific course
Parameters:
course_code(e.g., "CSC148H1")Returns: Course description, prerequisites, meeting times, instructor info
get_course_scheduleRetrieves the student's weekly class schedule
Returns: Day, time, location, and course for each class
get_syllabusFetches the syllabus for a specific course from Quercus
Parameters:
course_codeReturns: Syllabus content (PDF or text)
get_course_assignmentsLists all assignments for a course
Parameters:
course_codeReturns: Assignment names, due dates, and submission status
get_course_announcementsGets recent announcements from a course
Parameters:
course_code,limit(optional, default 5)Returns: Announcement titles, content, and dates
š Prerequisites
Python 3.9 or higher
University of Toronto student account
Access to ACORN and Quercus
Cohere North MCP Python SDK
š Installation
Step 1: Clone the Repository
Step 2: Install Dependencies
Step 3: Configure Credentials
Create a .env file in the project root:
ā ļø Security Note: Never commit your .env file to version control. It's already included in .gitignore.
How to Get Your Quercus API Token
Log in to Quercus
Go to Account ā Settings
Scroll down to "Approved Integrations"
Click "+ New Access Token"
Enter a purpose (e.g., "MCP Server")
Click "Generate Token"
Copy the token and paste it in your
.envfile
š® Usage
Running the Server
The server will start on http://0.0.0.0:3002 (or the port specified in your .env file).
Exposing with ngrok (Optional)
To make the server accessible from Cohere North or other remote clients:
Copy the HTTPS URL (e.g., https://abc123.ngrok.io) to use in your MCP client configuration.
Testing the Server
š Connecting to Cohere North
Start your MCP server locally
Expose it with ngrok:
ngrok http 3002Log in to Cohere North
Go to Settings ā MCP Servers
Add a new server:
Name: UofT Student Helper
URL: Your ngrok HTTPS URL
Auth Token: (if configured)
Save and test the connection
Example Conversations
Once connected, you can ask your AI assistant:
"What courses am I enrolled in this semester?"
"Show me the syllabus for CSC148"
"What assignments do I have for MAT137?"
"When is my next CSC148 class?"
"What are the recent announcements in my courses?"
š ļø Development
Project Structure
Adding New Tools
To add a new tool to the MCP server:
Open
uoft_student_helper.pyAdd a new function with the
@mcp.tool()decorator:
Restart the server
Test your new tool
API Clients
ACORN Client (acorn_client.py)
The ACORN client handles authentication and data retrieval from the ACORN system. It uses web scraping since ACORN doesn't provide a public API.
Key Methods:
login(): Authenticate with ACORNget_enrolled_courses(): Fetch current coursesget_course_details(course_code): Get course informationget_schedule(): Retrieve class schedule
Quercus Client (quercus_client.py)
The Quercus client uses the Canvas LMS API (Quercus is built on Canvas).
Key Methods:
get_courses(): List all coursesget_syllabus(course_id): Fetch course syllabusget_assignments(course_id): List assignmentsget_announcements(course_id): Get announcements
š Security & Privacy
Important Considerations
Credential Storage: Your ACORN and Quercus credentials are stored locally in the
.envfile. Never share this file or commit it to version control.API Token Security: The Quercus API token has the same permissions as your account. Keep it secure.
HTTPS Only: When exposing the server publicly, always use HTTPS (ngrok provides this automatically).
Authentication: Consider adding authentication to your MCP server to prevent unauthorized access.
Data Privacy: This server accesses your academic information. Only run it on trusted machines and networks.
Recommended Security Practices
Use environment variables for all sensitive data
Rotate your Quercus API token regularly
Use ngrok's authentication features for public exposure
Run the server in a secure, isolated environment
Regularly update dependencies for security patches
š Troubleshooting
Common Issues
"ModuleNotFoundError: No module named 'north_mcp_python_sdk'"
Solution: Install the SDK from source:
"Authentication failed" for ACORN
Possible causes:
Incorrect username/password in
.envTwo-factor authentication enabled (requires additional setup)
ACORN session expired
Solution: Verify credentials and check if 2FA is enabled.
"Invalid API token" for Quercus
Solution: Generate a new API token from Quercus settings and update your .env file.
Server won't start
Check:
Port 3002 is not already in use:
lsof -i :3002(Mac/Linux) ornetstat -ano | findstr :3002(Windows)All dependencies are installed:
pip list.envfile exists and is properly formatted
Getting Help
If you encounter issues:
Check the Issues page
Review the Documentation
Contact the maintainers
š Resources
Official Documentation
Canvas LMS API (Quercus uses Canvas)
Related Projects
š¤ Contributing
Contributions are welcome! Please follow these steps:
Fork the repository
Create a feature branch:
git checkout -b feature/your-featureCommit your changes:
git commit -m "Add your feature"Push to the branch:
git push origin feature/your-featureOpen a Pull Request
Contribution Guidelines
Follow PEP 8 style guidelines
Add tests for new features
Update documentation as needed
Ensure all tests pass before submitting
š License
This project is licensed under the MIT License - see the LICENSE file for details.
ā ļø Disclaimer
This project is not officially affiliated with, endorsed by, or connected to the University of Toronto. It is an independent project created to help students access their academic information more easily.
Use at your own risk. The developers are not responsible for any issues arising from the use of this software, including but not limited to:
Account security issues
Data loss or corruption
Violations of university policies
Service disruptions
Always ensure you comply with the University of Toronto's IT policies and terms of service when using this tool.
š„ Authors
Alice - Initial work - @Alice0416
š Acknowledgments
Cohere team for the North MCP Python SDK
University of Toronto for providing ACORN and Quercus
The MCP community for inspiration and support
All contributors who help improve this project
š Contact
For questions, suggestions, or issues:
Open an issue on GitHub
Email: your.email@mail.utoronto.ca
Discord: [Your Discord]
Made with ā¤ļø by UofT students, for UofT students
Last updated: January 2026