UpGrad LXP MCP Server
An MCP (Model Context Protocol) server that controls a Firefox browser via Playwright to automate navigating UpGrad's learning platform, extracting class transcripts, and downloading resources.
Setup
npm install
npx playwright install firefox
Usage
With Claude Code / Claude Desktop
Add to your MCP configuration:
{
"mcpServers": {
"upgrad-lxp": {
"command": "npx",
"args": ["tsx", "/path/to/upgrad-lxp-mcp/src/index.ts"],
"env": {
"UPGRAD_EMAIL": "your-email@example.com",
"UPGRAD_PASSWORD": "your-password",
"OUTPUT_DIR": "./output",
"HEADLESS": "false"
}
}
}
}
Run directly
npm start
Available Tools
| Tool | Description | |------|-------------| | launch_browser | Launch Firefox browser instance | | close_browser | Close the browser | | login | Log into UpGrad LXP | | check_login_status | Check if currently logged in | | list_courses | List available courses | | select_course | Navigate into a course | | list_tracks | List tracks/modules in a course | | select_track | Navigate into a track | | list_past_classes | List past classes in a track | | view_class_details | Open a specific class's details | | extract_transcript | Extract transcript from class details | | extract_resources | Extract resource links from class details | | download_resource | Download a resource file | | save_transcript | Save transcript to disk | | screenshot | Take a page screenshot | | get_page_content | Get page text content | | navigate | Navigate to a URL | | click | Click an element | | scrape_all_past_classes | Bulk scrape all past classes |
Output Structure
output/
├── transcripts/ # Saved transcript files (.md, .txt, .json)
├── resources/ # Downloaded resource files (organized by class)
├── screenshots/ # Page screenshots
├── errors/ # Error screenshots for debugging
└── index.json # Manifest from bulk scraping
Selector Updates
The CSS selectors in src/helpers/selectors.ts are initial guesses. After first launch:
- Run the browser in headed mode (
headless: false) - Log in and navigate to the target pages
- Use browser DevTools to inspect the actual DOM
- Update
selectors.tswith the real selectors











