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>
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。