login_to_lmsLABSCO SUMMARY
Built for one portal, and honest about it.
This is scraping a specific university's LMS through a real browser, which means it works exactly as well as that site's markup allows and will need attention when the site changes. The parts worth borrowing regardless are the session handling — persisted, encrypted, with an expiry — and the two-tier CAPTCHA approach that falls back to OCR when no vision key is configured. Your student credentials sit in a local file, so treat the machine accordingly.
What it is
A browser-automation server for one university's learning management system. It logs in on your behalf, solving the CAPTCHA on the way, keeps the session, and exposes the student pages — attendance, marks, timetable and applications — as tools.
What you get
login_to_lmssigns in with your stored credentials and handles the CAPTCHA;logout_lmsends the sessioncheck_attendancereturns attendance records broken down by subjectget_marksreturns exam scores and assessmentsget_timetablereturns the class schedulecreate_applicationsubmits a university application andview_application_statuschecks where it got tosolve_captchafor the case where the automatic pass needs help- Sessions persist and restore between runs, stored encrypted, with an expiry you set
Requirements
Python 3.11 or higher, Git and a Chrome installation, since the work is done by driving a real browser. Install with uv sync or pip install -e ., then put your portal credentials in a .env as LMS_USERNAME and LMS_PASSWORD. GEMINI_API_KEY is optional and improves CAPTCHA accuracy through vision; without it the fallback is OCR. BROWSER_HEADLESS controls whether you watch it work, SESSION_EXPIRY_HOURS defaults to 24 and ENCRYPT_SESSIONS keeps the stored session encrypted.
Setup effort
Build from source — git clone https://github.com/QaziAbsaar/LMS_MCP.git LMS-MCP
USE CASES
Checking whether your attendance is still safe
Ask for the per-subject attendance instead of logging into the portal and clicking through it.
Seeing new marks as soon as they post
Pull the current scores and assessments in one question.
Knowing what class is next
Read today's schedule from the timetable without opening the site.
Following an application you submitted
Submit through the assistant and check the status later in the same way.
8 tools
Listed in project docs. Your client may show a different list.
logout_lmscheck_attendanceget_marksget_timetablecreate_applicationview_application_statussolve_captchaBEFORE YOU INSTALL
What to know first
Tools you get
8 tools named in the project's documentation.
Requires
- Python 3.11+
- LMS_PASSWORD in your environment
- LMS_USERNAME in your environment
Where it runs
Both documented clients run the server on your machine.
INSTALLATION
Connect your client
Server setup
git clone https://github.com/QaziAbsaar/LMS_MCP.git LMS-MCP
cd LMS-MCP
pip install -e .
# Copy the example environment file, then edit it with your credentials
cp .env.example .envMCP Clients
Claude Desktop
{
"mcpServers": {
"lms-automation": {
"command": "python",
"args": [
"<YOUR_PATH_TO_LMS_MCP>/main.py"
],
"env": {
"PYTHONPATH": "<YOUR_PATH_TO_LMS_MCP>"
}
}
}
}The configuration on this page does not set LMS_PASSWORD and LMS_USERNAME; the project's instructions put them in a .env file. To supply them without depending on where the server looks for that file, use the block's "env" section.
Cursor
{
"mcpServers": {
"LMS Automation": {
"command": "python",
"args": [
"./main.py"
],
"cwd": "<YOUR_PATH_TO_LMS_MCP>",
"env": {
"PYTHONPATH": "<YOUR_PATH_TO_LMS_MCP>"
}
}
}
}The configuration on this page does not set LMS_PASSWORD and LMS_USERNAME; the project's instructions put them in a .env file. To supply them without depending on where the server looks for that file, use the block's "env" section.