penn-course-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@penn-course-mcpsearch for CIS-1200"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
penn-course-mcp
An MCP server for University of Pennsylvania course planning, built on the open-source Penn Courses (Penn Course Plan / Penn Course Review) public API.
It lets an LLM (Claude Desktop, Claude Code, or any MCP client) search the Penn course catalog, inspect sections and meeting times, read ratings, and do real planning work — detecting schedule conflicts, assembling a weekly schedule, and comparing courses side by side.
✅ Works with zero configuration against the public Penn Courses API.
🔓 Optional auth unlocks detailed Penn Course Review breakdowns; everything degrades gracefully when no credentials are set.
🔌 Runs over stdio (local clients) or streamable HTTP (hosted).
Tools
Tool | What it does |
| Active term code (e.g. |
| Search catalog by code or keyword; returns summaries + ratings |
| Full course info: description, prereqs, attributes, sections, meeting times |
| Sections with formatted meeting times/instructors; filter by status/activity |
| Public aggregate ratings (quality, difficulty, workload) |
| Detailed PCR reviews when authenticated; falls back to aggregates otherwise |
| Courses carrying a given attribute / Gen-Ed code |
| Courses fulfilling a requirement (by code/name) |
| Detect time conflicts among a set of section ids |
| Weekly grid, total credits, conflicts, missing-companion warnings |
| Side-by-side ratings / difficulty / workload / prereqs |
| Search and rank by quality, difficulty, or workload |
Course codes look like CIS-1200; section ids look like CIS-1200-001.
Related MCP server: UofT Student Helper MCP Server
Installation
# with uv (recommended)
uv pip install -e ".[dev]"
# or with pip
pip install -e ".[dev]"Running
# stdio (default) — for Claude Desktop / Claude Code
penn-course-mcp
# streamable HTTP — serves http://127.0.0.1:8000/mcp
penn-course-mcp --transport http --port 8000
# dev / MCP Inspector
fastmcp dev src/penn_course_mcp/server.pyClaude Desktop / Claude Code config
{
"mcpServers": {
"penn-course": {
"command": "uvx",
"args": ["penn-course-mcp"],
"env": {
"PENN_COURSES_SESSION_COOKIE": ""
}
}
}
}(Use "command": "penn-course-mcp" instead if you installed it into a venv on your PATH.)
Configuration
All environment variables are optional (see .env.example):
Variable | Default | Purpose |
|
| API base URL |
|
| Default semester ( |
|
| Cache TTL (seconds) for catalog/detail data |
|
| HTTP timeout (seconds) |
|
| Sent with every request |
| (unset) | Enables detailed reviews (see below) |
|
|
|
|
| HTTP host |
|
| HTTP port |
Optional: detailed reviews
The public API already exposes aggregate ratings (course/instructor quality, difficulty, work required) — no auth needed. The detailed per-instructor Penn Course Review breakdowns require a logged-in Penn session. To enable them, log in to penncoursereview.com in your browser, copy your session cookie, and set:
export PENN_COURSES_SESSION_COOKIE="sessionid=..."Without it, get_course_reviews returns the public aggregate ratings plus a note
— it never errors.
Development
uv pip install -e ".[dev]"
pytest # pure planning logic + mocked client + tool tests
ruff check .The planning logic (src/penn_course_mcp/planning.py) is pure and network-free —
schedule-conflict detection, time formatting, and comparison are fully unit-tested.
Notes & data quirks
Meeting times use Penn's
HH.MMencoding (10.15= 10:15,15.3= 15:30); the server always renders them as readableHH:MMranges.Day codes are
M/T/W/R/F(R= Thursday).Back-to-back meetings (one ending exactly when the next starts) are not flagged as conflicts.
This is an unofficial tool that consumes the public Penn Courses API. Please use it respectfully (it caches responses and caps concurrency).
License
MIT
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/grantdehoog/penn-course-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server