coursera
Enables browsing your Coursera courses, viewing library maps and course outlines, and downloading transcripts and readings as text via MCP tools.
README
coursera-cli
Your own Coursera courses, from the terminal — and from Claude Code, over MCP.
Downloads the transcripts and readings of courses you are enrolled in, through Coursera's internal API. No HTML scraping, no gigabytes of video.
coursera courses --search pricing find the course
coursera map see what you actually studied
coursera transcript <slug> pull the content as text
Install
Requires Bun.
cd klipso_reverse/Cli-propios/coursera-cli
bun install
Session
The CLI needs your account's CAUTH cookie. It looks in three places, in order:
- The
COURSERA_CAUTHenvironment variable - Its own store, under the platform config directory
- The store written by the Python recon repo (
~/.config/coursera_recon/session.json)
If you have none, capture one with capture_session.py from the coursera_recon repo: it
opens a visible Chromium, you log in by hand, and it saves the cookie. Logging in is not
automated — typing credentials from a script is what triggers the CAPTCHA.
coursera session # is it alive, where did it come from, how old is it
coursera doctor # session + routes + paths, all at once
[OK] version: coursera-cli 0.2.0 on win32, bun 1.3.11
[OK] session-present: found via legacy, 108.2 h old
[OK] session-alive: 215 courses visible
[OK] endpoints: 10 routes declared, domains.v1 alive
[OK] paths: state C:\Users\you\AppData\Local\coursera-cli
5/5 checks passed
Commands
| Command | What it does |
|---|---|
coursera session |
Session state: source, age, alive or dead |
coursera doctor |
Diagnoses session, live routes and writable paths |
coursera courses [filters] |
Your courses |
coursera map [--detail] |
Branches, levels, institutions, unfinished specializations |
coursera course <slug> |
Syllabus, institution, instructors, declared level |
coursera transcript <slug> |
Downloads transcripts and readings |
Filters
Filters compose with AND, and multi-word values need no quotes:
coursera courses --search machine learning
coursera courses --level intermediate --domain data-science
coursera courses --lang es --hours 5 # short courses in Spanish
coursera courses --university duke
| Flag | Example |
|---|---|
--search <text> |
name or slug |
--level |
beginner, intermediate, advanced |
--domain <id> |
branch or sub-branch, e.g. data-science, machine-learning |
--lang <code> |
primary language, e.g. es |
--hours <n> |
at most n estimated hours |
--university <name> |
e.g. duke |
Global flags
| Flag | Default | Purpose |
|---|---|---|
--json |
off | Structured output. Implied when stdout is piped |
--out <dir> |
platform data dir | Where to write |
--limit <n> |
all | Stop after n items |
--lang es,en |
es,es-LA,en |
Subtitle preference order |
--quiet |
off | No progress output |
Library map
coursera map cross-references your library against Coursera's own taxonomy:
215 courses in your library
levels: beginner 99 intermediate 66 advanced 7 undeclared 43
business 158 ████████████████████████ 1366 h
data-science 90 ██████████████ 735 h
computer-science 35 █████ 255 h
SPECIALIZATIONS (15)
✓ AI Product Management 3/3 complete
○ Digital Product Management 3/5 2 missing
Two caveats it prints itself, because both are real: a course filed under two branches counts in both, and hours come from Coursera's free-text workload field, which 78 of 215 courses do not state readably.
MCP for Claude Code
Register the server with the absolute path to the Bun binary — the process that
launches MCP servers does not inherit your PATH, so "command": "bun" fails with
"Failed to connect":
{
"mcpServers": {
"coursera": {
"command": "C:/Users/you/.bun/bin/bun.exe",
"args": ["C:/Users/you/klipso_reverse/Cli-propios/coursera-cli/src/mcp/index.ts"]
}
}
}
| Tool | Returns |
|---|---|
session_status |
Whether the session is alive, where it came from, how many courses it sees |
list_courses |
Your courses, with the same filters as the CLI |
get_library_map |
Branches, levels, institutions, specialization progress |
get_course_outline |
The course tree plus institution and instructors |
fetch_transcripts |
Downloads a course, returns the index of what landed |
read_transcript |
The text of one item |
fetch_transcripts returns paths, not text: a course is ~130 KB (≈35k tokens) and sending
it whole would blow up the conversation. To read, use read_transcript.
What it downloads
Text, by default: a .txt transcript per video and a .reading.md per reading. No video —
a course is gigabytes as MP4 against ~130 KB as text, and for studying or summarizing the
text carries the same signal.
Files are organized per module, numbered in order, with a manifest.json index.
Locked modules
When a course is in preview or has locked weeks, the aggregating API censors the item type: it returns them empty, and extractors that filter by type skip 75% of the syllabus believing it is empty.
This CLI does not filter. It asks the video and reading microservices about every item directly and keeps whatever answers.
Docs
| File | Contents |
|---|---|
SPEC.md |
The spec: problem, decisions, scope, verification |
CONTEXT.md |
Domain glossary |
RESEARCH.md |
Portal recon: endpoints, gotchas, what is alive |
CHANGELOG.md |
What changed in each version |
endpoints.json |
The routes. A deprecation is fixed here, not in the code |
Tests
bun test # 76 tests against responses captured live from the API
bun run typecheck
Legal
Reaches your own account with your own session, for courses you are already enrolled in. Downloaded material is copyrighted by Coursera and its universities: it is for your personal study. Do not redistribute it.
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.
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.
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.
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.
Neon Database
MCP server for interacting with Neon Management API and databases
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.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.
E2B
Using MCP to run code via e2b.