penn-course-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PENN_COURSES_HOST | No | HTTP host | 127.0.0.1 |
| PENN_COURSES_PORT | No | HTTP port | 8000 |
| PENN_COURSES_TIMEOUT | No | HTTP timeout (seconds) | 20.0 |
| PENN_COURSES_BASE_URL | No | API base URL | https://penncoursereview.com |
| PENN_COURSES_SEMESTER | No | Default semester (current auto-resolves) | current |
| PENN_COURSES_CACHE_TTL | No | Cache TTL (seconds) for catalog/detail data | 3600 |
| PENN_COURSES_TRANSPORT | No | stdio or http | stdio |
| PENN_COURSES_USER_AGENT | No | Sent with every request | penn-course-mcp/<ver> |
| PENN_COURSES_SESSION_COOKIE | No | Enables detailed reviews (see docs) |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_current_semesterA | Return the active semester and whether detailed reviews are enabled. Useful as a first call to learn the current term code (e.g. '2026C') and the server's review-auth status. |
| search_coursesA | Search the course catalog by code or keyword (e.g. 'CIS-1200' or 'ethics'). Returns lightweight course summaries including aggregate ratings. |
| get_course_detailsC | Get full details for a course: description, prerequisites, attributes, crosslistings, aggregate ratings, and all sections with meeting times. |
| list_course_sectionsA | List a course's sections with formatted meeting times and instructors.
|
| get_course_ratingsB | Return the public aggregate ratings for a course (always available). Includes course_quality, instructor_quality, difficulty, and work_required. |
| get_course_reviewsA | Get detailed Penn Course Review breakdowns for a course. When an authenticated session cookie is configured this returns the full per-instructor review data. Otherwise it gracefully falls back to the public aggregate ratings and reports an unauthenticated status (never errors). |
| find_courses_by_attributeA | Find courses carrying a given attribute (e.g. 'EUMS', 'MFR', a Gen-Ed code).
|
| find_courses_by_requirementB | Find courses fulfilling a requirement (pre-NGSS requirement code or name). Substring-matches against course attributes and pre-NGSS requirement codes/names. |
| check_schedule_conflictsA | Check a set of section ids (e.g. ['CIS-1200-001','MATH-1400-002']) for time conflicts. Returns the clashing meetings in human-readable form. |
| build_scheduleA | Assemble a weekly schedule from section ids: total credits, a day-by-day grid, time conflicts, and warnings for missing required companion sections. |
| compare_coursesB | Compare courses side by side on ratings, difficulty, workload, credits, and prerequisites. Accepts a list of course codes (e.g. ['CIS-1200','CIS-1600']). |
| recommend_coursesA | Search and rank courses by a quality metric.
|
| list_schedulesA | List the saved schedules in your Penn Course Plan account (requires auth). Returns each schedule's id, name, semester, and the section ids it contains —
handy for finding a |
| save_scheduleA | Save a schedule to your Penn Course Plan account so it appears on the website. Creates a new schedule named |
| delete_scheduleA | Delete a saved Penn Course Plan schedule by its id (requires auth). Use |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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