Coursera MCP
Enables AI agents to programmatically interact with Coursera, including enrolling in courses, completing lectures, solving quizzes, submitting assignments, earning certificates, and pushing them to LinkedIn.
README
<p align="center"> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://img.shields.io/badge/COURSERA-MCP-0056D2?style=for-the-badge&logo=coursera&logoColor=white&labelColor=0056D2"> <img alt="Coursera MCP" src="https://img.shields.io/badge/COURSERA-MCP-0056D2?style=for-the-badge&logo=coursera&logoColor=white&labelColor=0056D2"> </picture> </p>
<p align="center"> <b>The most advanced MCP server for Coursera.</b><br> <sub>87 tools · 8 integration layers · full course automation · Obsidian export</sub> </p>
<p align="center"> <a href="#setup"><img src="https://img.shields.io/badge/setup-guide-blue?style=flat-square" alt="Setup"></a> <a href="#tools-87"><img src="https://img.shields.io/badge/tools-87-green?style=flat-square" alt="Tools"></a> <a href="#architecture"><img src="https://img.shields.io/badge/architecture-8_layers-purple?style=flat-square" alt="Architecture"></a> <a href="https://github.com/VoidChecksum/coursera-mcp/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-yellow?style=flat-square" alt="License"></a> </p>
<p align="center"> <img src="https://img.shields.io/badge/python-3.11+-3776AB?style=flat-square&logo=python&logoColor=white" alt="Python"> <img src="https://img.shields.io/badge/node.js-22+-339933?style=flat-square&logo=nodedotjs&logoColor=white" alt="Node.js"> <img src="https://img.shields.io/badge/MCP-stdio-black?style=flat-square" alt="MCP"> <img src="https://img.shields.io/badge/scrapling-adaptive-FF6B35?style=flat-square" alt="Scrapling"> <img src="https://img.shields.io/badge/stealth-rebrowser-red?style=flat-square" alt="Stealth"> </p>
██████╗ ██████╗ ██╗ ██╗██████╗ ███████╗███████╗██████╗ █████╗ ███╗ ███╗ ██████╗██████╗
██╔════╝██╔═══██╗██║ ██║██╔══██╗██╔════╝██╔════╝██╔══██╗██╔══██╗ ████╗ ████║██╔════╝██╔══██╗
██║ ██║ ██║██║ ██║██████╔╝███████╗█████╗ ██████╔╝███████║█████╗██╔████╔██║██║ ██████╔╝
██║ ██║ ██║██║ ██║██╔══██╗╚════██║██╔══╝ ██╔══██╗██╔══██║╚════╝██║╚██╔╝██║██║ ██╔═══╝
╚██████╗╚██████╔╝╚██████╔╝██║ ██║███████║███████╗██║ ██║██║ ██║ ██║ ╚═╝ ██║╚██████╗██║
╚═════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝╚═╝
Give any AI agent — Claude, GPT, or your own — full programmatic access to Coursera. Enroll in courses, speedrun lectures, solve quizzes, submit assignments, earn certificates, and push them to LinkedIn. All from a single MCP server.
Highlights
| Feature | How | |
|---|---|---|
| 🚀 | Speedrun entire courses | speedrun_course completes lectures, quizzes, discussions, and graded exams in one call |
| 🔓 | Freemium bypass | Auto-detects enrolledViaFreemiumAt restrictions and re-enrolls without the flag |
| 🧠 | Solve quizzes via GraphQL | Elimination-learning solver: submits, learns from feedback, retries until passing |
| 📝 | Submit everything | Written, peer review, discussion prompts, programming assignments — all automated |
| 📊 | Full analytics | Learner stats, XP, streaks, goals, module progress, detailed grades, timelines |
| 🔗 | LinkedIn integration | Auto-add certificates to your profile with duplicate detection |
| 🕷️ | Scrapling scraping | Adaptive parser (1775× faster than BeautifulSoup) + JS rendering |
| 🛡️ | Stealth browser | rebrowser-puppeteer + fingerprint injection defeats Cloudflare/bot detection |
| 🔑 | Cookie-based auth | No passwords stored — session cookies via Cookie-Editor |
| 📓 | Obsidian export | Summarize courses into structured study notes and write directly to your Obsidian vault |
Prerequisites
1. Install Cookie-Editor
All authentication uses browser session cookies. Install Cookie-Editor to export them:
| Browser | Install |
|---|---|
| <img src="https://img.shields.io/badge/Chrome-4285F4?style=flat-square&logo=googlechrome&logoColor=white"> | Chrome Web Store |
| <img src="https://img.shields.io/badge/Firefox-FF7139?style=flat-square&logo=firefoxbrowser&logoColor=white"> | Firefox Add-ons |
| <img src="https://img.shields.io/badge/Edge-0078D7?style=flat-square&logo=microsoftedge&logoColor=white"> | Edge Add-ons |
2. Export Coursera Cookies
- Log into coursera.org
- Click Cookie-Editor icon → Export → copy
CAUTHandCSRF3-Tokenvalues - Paste into
.env(see Setup)
3. Export LinkedIn Cookies (optional)
- Log into linkedin.com
- Click Cookie-Editor icon → Export → copy
li_atandJSESSIONIDvalues - Paste into
.env
Setup
git clone https://github.com/VoidChecksum/coursera-mcp.git
cd coursera-mcp
uv venv .venv
uv pip install -p .venv/bin/python mcp curl_cffi skipera requests "scrapling[fetchers]"
.venv/bin/scrapling install
npm install rebrowser-puppeteer puppeteer-extra puppeteer-extra-plugin-stealth \
fingerprint-generator fingerprint-injector
cp .env.example .env
chmod 600 .env
.env format
COURSERA_CAUTH=<paste CAUTH cookie value>
COURSERA_CSRF3=<paste CSRF3-Token cookie value>
LINKEDIN_LI_AT=<paste li_at cookie value>
LINKEDIN_JSESSIONID=<paste JSESSIONID value, without quotes>
[!NOTE] When Coursera or LinkedIn logs you out, re-export cookies with Cookie-Editor and update
.env.
Connect to Your AI Client
<details> <summary><b>Claude Desktop / Claude Code</b></summary>
Add to your MCP config (claude_desktop_config.json or via CLI):
{
"mcpServers": {
"coursera": {
"command": "/path/to/coursera-mcp/run.sh"
}
}
}
Or via CLI:
claude mcp add coursera /path/to/coursera-mcp/run.sh
</details>
<details> <summary><b>Other MCP Clients</b></summary>
Any MCP-compatible client that supports stdio transport works.
Point it at run.sh which loads .env and starts the server.
</details>
Tools (87)
Course Discovery & Enrollment
| Tool | Description |
|---|---|
whoami |
Verify session, return user ID |
my_courses |
List enrolled courses (name, slug, role) |
search |
Search Coursera catalog via GraphQL |
course_details |
Full course metadata by slug |
enroll_course |
Enroll in a course, auto-bypassing freemium restrictions |
unenroll_course |
Delete course enrollment |
batch_enroll |
Enroll in multiple courses at once with freemium bypass |
reset_course_deadlines |
Reset/extend deadlines to unlock expired submissions |
Speedrunning
| Tool | Description |
|---|---|
speedrun_course |
Complete an entire course in one call: freemium bypass → lectures → quizzes → discussions → graded exams with elimination learning |
speedrun_all |
Speedrun every enrolled course, skipping 100% courses |
complete_course_lectures |
Mark all lectures, readings, widgets, and labs as completed in parallel |
Progress, Grades & Certificates
| Tool | Description |
|---|---|
get_course_grades |
Grades, outcomes, and passing state for all graded items |
get_course_progress |
Overall progress % and per-item completion status |
get_detailed_grades |
Full grade breakdown with item outcomes and assignment group grades |
get_module_progress |
Per-module completion status (completed/in-progress/not-started) |
get_home_progress |
Modules completed and modules passed counts |
get_certificates |
All certificates with codes and verification URLs |
get_certificate_details |
Certificate grade, grant date, verification URL, preview image |
get_certificate_image |
Certificate preview image URL |
Learner Analytics (Reverse-Engineered GraphQL)
| Tool | Description |
|---|---|
get_learner_stats |
Total XP, items completed, learning minutes, active days, weekly stats |
get_weekly_streaks |
Current and target weekly learning streaks |
get_weekly_goals |
Day-by-day goal tracking and progress status |
get_course_timeline |
Start/end dates, ahead/behind/overdue schedule status |
get_profile |
User ID, full name, locale, timezone, profile photos |
get_subscription_status |
Coursera Plus/trial/payment status and subscription details |
check_product_ownership |
Enrollment type (freemium/paid/Plus), ownership status |
send_learning_heartbeat |
Send learning time heartbeat (registers active time on a course item) |
get_cohorts |
Social learning cohorts the user belongs to |
get_item_deadlines |
Per-item content deadlines (more granular than session deadlines) |
Skill & Career Intelligence
| Tool | Description |
|---|---|
get_skill_xp |
Skill area XP breakdown per course (gained vs potential) |
get_item_xp |
XP earned vs potential for a specific course item |
get_learning_plan |
AI-generated personalized learning plan (role, skills, courses) |
get_related_courses |
Related course recommendations |
get_interested_careers |
User's interested career roles |
get_career_roles |
Career role recommendations for a specialization |
get_specialization_progress |
Progress across all courses in a specialization |
get_course_info |
Course description, partners, instructors, workload, primary specialization |
Quiz & Assessment (GraphQL — no browser)
| Tool | Description |
|---|---|
get_quiz_questions_api |
Fetch questions + option IDs via GraphQL, handles START_NEW_ATTEMPT |
submit_quiz_answers_api |
Submit answers, get instant grade + per-question feedback |
get_quiz_state |
Check quiz attempt status, grade, and rate-limit info without starting |
get_discussion_prompt |
Get discussion prompt content and metadata |
submit_discussion_prompt_answer |
Post answer to discussion prompt |
Content Extraction
| Tool | Description |
|---|---|
get_video_transcript |
Clean text transcript of any lecture video (VTT dedup) |
get_supplement_content |
Clean text of any reading/supplement |
get_lecture_assets |
Downloadable slides, PDFs, and supplementary files |
get_course_references |
Glossary and reference materials |
get_instructor_notes |
Module-level instructor notes |
get_learning_objectives |
Module learning objectives |
get_user_notes |
Personal study notes for a course item |
create_user_note |
Create study notes on lectures/readings with video timestamps |
Course Structure & Navigation
| Tool | Description |
|---|---|
course_materials |
Full course syllabus: modules, lessons, items |
module_items |
Items in a specific module (lectures, quizzes, readings) |
get_course_navigation |
Full navigation with deadline status per module |
get_course_schedule |
Session deadlines per module and item |
get_forum_structure |
Full forum hierarchy (IDs, types, descriptions) |
get_specialization_info |
Specialization courses, partners, pricing |
get_career_roles |
Career role recommendations for specializations |
get_ai_grading_eligibility |
Check if AI peer review grading is available |
Browser Automation (stealth Chromium)
| Tool | Description |
|---|---|
get_quiz_attempt |
Start/resume quiz in browser, extract all questions |
submit_quiz_attempt |
Answer quiz, sign honor code, submit |
get_assignment_instructions |
Extract assignment instructions + form fields |
submit_assignment |
Submit written/peer assignment (text + files) |
get_workspace_url |
Get Jupyter/lab workspace URL |
mark_item_completed |
Trigger completion by loading item page |
get_forum_threads |
Extract discussion forum threads |
post_forum_thread |
Post new thread in forums |
get_peer_review_questions |
Get peer review criteria + rubrics |
submit_peer_review_evaluation |
Submit peer review grading |
get_programming_assignment_instructions |
Get programming assignment schema |
submit_programming_api |
Submit code to Coursera autograder |
Scrapling (adaptive web scraping)
| Tool | Description |
|---|---|
scrapling_api_fetch |
Fast API call via Scrapling (stealth httpx) |
scrape_course_page |
Scrape authenticated pages with JS rendering (Playwright) |
scrape_url |
General-purpose scraper with CSS selectors |
LinkedIn Integration
| Tool | Description |
|---|---|
get_linkedin_certifications |
Fetch existing certs on LinkedIn profile |
add_certificate_to_linkedin |
Add cert to LinkedIn (auto-skips duplicates) |
add_all_certificates_to_linkedin |
Batch-add all Coursera certs (dedup) |
Study & Planning
| Tool | Description |
|---|---|
course_content_digest |
Bundle a module's transcripts + readings into one study document |
search_course_transcripts |
Full-text search across a course's lecture transcripts |
learning_dashboard |
Progress %, certificate, and grade across all enrolled courses |
get_upcoming_deadlines |
Session end dates across enrolled courses, soonest first |
export_deadlines_ics |
Export deadlines as an importable .ics calendar |
get_specialization |
Specialization details + its course list |
Obsidian Integration
| Tool | Description |
|---|---|
summarize_module |
Summarize a module's lectures and readings into concise study notes |
summarize_course |
Summarize an entire course organized by module |
export_course_to_obsidian |
Summarize + write to Obsidian vault with frontmatter, wiki-links, callouts, and tags |
export_module_to_obsidian |
Export a single module to Obsidian |
export_all_courses_to_obsidian |
Batch export all enrolled courses to Obsidian |
Reverse Engineering
Several tools were built by intercepting live browser traffic and reverse-engineering Coursera's internal APIs:
Freemium Bypass — Coursera sets enrolledViaFreemiumAt on free enrollments, which causes all opencourse.v1 video-event and supplement-completion endpoints to return 403. The bypass deletes the enrollment via DELETE /api/openCourseMemberships.v1/{uid}~{courseId} (with an empty {} body — Akka backend requires it) and re-creates it via POST without the freemium flag.
GraphQL Gateway — 48+ operations captured from graphql-gateway, including GetLearnerStats, WeeklyStreaks_QueryWeeklyStreaks, GetLearnerWeeklyGoals, GetCourseBranchModuleProgressByCourse, GetLearnerCourseTimeline, GetMyCertificateByProduct, CourseNavigation, GetAiGradingEligibilityByCourse, CareerRolesQuery, and GetProductOwnership.
REST APIs — 61+ endpoints mapped from browser network traffic, including onDemandCourseViewGrades.v1, onDemandReferences.v1, onDemandLectureAssets.v1, onDemandInstructorNotes.v1, userNotes.v1, onDemandCourseForums.v1, onDemandLearningObjectives.v2, and subscriptions.v1.
Quiz Solver — Elimination-learning algorithm: submits first-option answers, gets per-question feedback marking options correct/incorrect, persists learned answers to ~/.skipera/gradedData/, and retries with improved answers until passing (≥70%). Handles START_NEW_ATTEMPT, rate limits, and MultipleChoiceReflectQuestion types.
Architecture
coursera-mcp/
├── server.py Python MCP server — all 87 tools
├── automation.mjs Stealth browser automation (Node.js)
├── run.sh Launcher (loads .env, starts stdio)
├── .env Your cookies (gitignored)
├── .env.example Template
└── .gitignore
┌──────────────────────────────────────────────────────────────────────┐
│ MCP Clients (Claude / GPT / Custom) │
├──────────────────────────────────────────────────────────────────────┤
│ server.py · FastMCP stdio │
├─────────┬─────────┬──────────┬───────────┬──────────┬────────┬───────┤
│ REST │ GraphQL │ Scrapling│ Browser │ LinkedIn │ gRPC │Obsidi-│
│ API │ Gateway │ │ Stealth │ Voyager │ API │an API │
│ │ │ │ Puppeteer │ + Browser│ │ │
├─────────┴─────────┤ ├───────────┤ │ │ │
│ curl_cffi │ Fetcher │automation │automation│ │ REST │
│ skipera │ Dynamic │ .mjs │ .mjs │ │:27123 │
│ requests │ Fetcher │ (Node.js) │ (Node.js)│ │ │
└───────────────────┴──────────┴───────────┴──────────┴────────┴───────┘
Security
| No passwords stored | Cookie-based auth only — session tokens from your browser |
.env is gitignored |
Secrets never enter version control |
| No hardcoded credentials | All secrets read from os.environ at runtime |
| No secret logging | Cookies are never printed or logged to stdout/stderr |
.env.example is safe |
Contains only empty placeholders |
[!CAUTION] Never commit your
.envfile. If you accidentally expose cookies, log out of Coursera/LinkedIn immediately to invalidate them.
License
<p align="center"> <sub>Built for agents that learn faster than humans.</sub> </p>
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.