USC WebReg/Course Catalog MCP
Click on "Deploy 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., "@USC WebReg/Course Catalog MCP Find open GE B courses on Tuesdays and Thursdays starting after noon."
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.
USC WebReg/Course Catalog MCP
MCP server exposing USC's public course catalog API (classes.usc.edu) for AI agents. Allows you to ask questions like, "What GE B options are there on Tuesday/Thursday that start after noon?"
Setup
Using .mcpb
You can download the latest MCP bundle from releases and open it in Claude Desktop. This is the easiest way to do it since it avoids any dependency issues by bundling the environment with the tools, and there is a nice UI walking you through the setup.
Cloning locally
git clone https://github.com/shreeyachand/usc-webreg-mcp.git
cd usc-webreg-mcpBuild once:
npm install
npm run buildopencode
Add to ~/.config/opencode/opencode.jsonc:
{
"mcp": {
"usc-courses": {
"type": "local",
"command": ["node", "/absolute/path/to/usc-webreg-mcp/dist/index.js"],
"enabled": true
}
}
}Claude Code
Add a .mcp.json in the project root (or run claude mcp add):
{
"mcpServers": {
"usc-courses": {
"command": "node",
"args": ["/absolute/path/to/usc-webreg-mcp/dist/index.js"]
}
}
}Related MCP server: Brown Courses MCP Server
Tools
Tool | Description |
| All academic terms with season/year/status |
| Single term details by termCode (e.g. |
| Schools/colleges and their programs for a term |
| Programs (departments) and their school for a term |
| Program details/notes (D-clearance info) |
| Every subject prefix in the catalog |
| Enrollment sessions and drop dates |
| Whether a course code exists in the catalog |
| SimpleSyllabus index URL for a term |
| Fees for a section by |
| Keyword search of the catalog (code/title/description) |
| Full course record incl. all sections, prereqs, restrictions |
| All courses for a school+program |
| GE structure (requirements + category prefixes) |
| Courses satisfying a GE category |
| Name/details of a GE category |
Schedule filters
search_courses, list_courses_by_program, and list_courses_by_ge accept optional section filters: days (["Mon","Wed"]), startAfter/startBefore ("12:00"), and openOnly.
Example: GE B classes meeting Mon+Wed at/after noon:
list_courses_by_ge(termCode=20263, geRequirementPrefix=ACORELIT,
geCategoryPrefix=HINQ, days=["Mon","Wed"], startAfter="12:00")Chat examples
One simple question I ask when evaluating MCP servers is, "Can Claude do this reasonably well out of the box?". Web search tends to get agents pretty far in most tasks, but you can see for yourself how it didn't really help here with two chats starting with the same prompt:
Available Tools
16 toolscheck_course_existsARead-onlyIdempotent
Check whether a course code exists anywhere in the USC catalog (not limited to a single term). Accepts codes like 'CSCI-103'. Returns true/false.
Inputs: course (required).
get_courseARead-onlyIdempotent
Get the full record for a single USC course in a term by its course code (e.g. 'CSCI-103'). Includes description, units, GE code, prerequisites, corequisites, restrictions, and all sections with schedule, instructor, seats, fees, and syllabus URL. Supports optional section filters (days, startAfter, startBefore, openOnly) applied client-side.
Inputs: termCode (required), courseCode (required), days, openOnly, +2 more.
get_ge_category_detailsARead-onlyIdempotent
Get the name and details of a single General Education (GE) category within a requirement for a term. Useful to confirm what a GE category prefix means (e.g. what 'HINQ' covers).
Inputs: termCode (required), geCategoryPrefix (required), geRequirementPrefix (required).
get_programARead-onlyIdempotent
Get details for a single USC program in a term, including program-specific notes (e.g. enrollment or D-clearance instructions). Requires the program's school prefix (find via list_programs) and the program prefix.
Inputs: school (required), program (required), termCode (required).
get_section_feesARead-onlyIdempotent
Get the fees for a single course section by its SIS section id (the 'sisSectionId' field on a section, e.g. '29934'). Returns any tuition/fee items attached to the section.
Inputs: sectionId (required).
get_syllabus_indexARead-onlyIdempotent
Get the SimpleSyllabus index URL for a term, which can be used to look up published syllabi for that term's sections. Individual sections also carry a 'syllabus' URL directly.
Inputs: termCode (required).
get_termARead-onlyIdempotent
Get details for a single academic term by its numeric termCode (e.g. 20263 = Fall 2026). Returns season, year, status, and activation date.
Inputs: termCode (required).
list_course_prefixesARead-onlyIdempotent
List every USC subject prefix in the catalog (e.g. CSCI, MATH, AHIS) across all terms, with its name. Useful for discovering what subjects exist.
Inputs: no named parameters.
list_courses_by_geARead-onlyIdempotent
List all courses in a term that satisfy a General Education (GE) category, with their sections. Requires the GE requirement prefix and category prefix, which can be discovered via list_ge_requirements (e.g. GE B 'Humanistic Inquiry' = geRequirementPrefix 'ACORELIT', geCategoryPrefix 'HINQ'). Supports optional section filters (days, startAfter, startBefore, openOnly) applied client-side.
Inputs: termCode (required), geCategoryPrefix (required), geRequirementPrefix (required), days, +3 more.
list_courses_by_programARead-onlyIdempotent
List all courses offered by a USC program (department) in a term. Requires the school prefix and program prefix, which can be discovered via list_programs. For example, Computer Science is school 'ENGV' and program 'CSCI'. Returns courses with their sections. Supports optional section filters (days, startAfter, startBefore, openOnly) applied client-side.
Inputs: school (required), program (required), termCode (required), days, +3 more.
list_ge_requirementsARead-onlyIdempotent
List USC General Education (GE) requirements for a term. Returns the GE structure grouped by requirement era ('Fall2015OrLater' for current students, 'BeforeFall2015' for older catalogs). Each requirement has a prefix and categories with prefixes (e.g. GE B 'Humanistic Inquiry' is category prefix 'HINQ' under requirement 'ACORELIT'). Use the prefixes with list_courses_by_ge.
Inputs: termCode (required).
list_programsARead-onlyIdempotent
List all USC programs (departments/majors) in a term, each with its prefix, name, and the school prefix(es) it belongs to. Use this to find the school+program pair needed for list_courses_by_program (e.g. Computer Science is program 'CSCI' under school 'ENGV').
Inputs: termCode (required).
list_schoolsARead-onlyIdempotent
List all USC schools/colleges offering classes in a term, each with its prefix (e.g. 'ENGV' = Viterbi, 'DRNS' = Dornsife) and the programs (departments) it contains. Useful for navigating the catalog structure.
Inputs: termCode (required).
list_sessionsARead-onlyIdempotent
List USC enrollment sessions (e.g. regular session '001', summer sessions) with their term, session code, description, last drop date, and RNR session id. Useful for understanding session codes shown on sections.
Inputs: no named parameters.
list_termsARead-onlyIdempotent
List all USC academic terms available in the course catalog, each with season, year, term code, and status. Use this to find the termCode for a given semester (e.g. 20263 = Fall 2026).
Inputs: no named parameters.
search_coursesARead-onlyIdempotent
Search the USC course catalog for a term by keyword. Matches course codes, titles, and descriptions (e.g. 'machine learning', 'CSCI', 'art history'). Returns matching courses with their sections, including schedule, instructor, and seat availability. Supports optional section filters (days, startAfter, startBefore, openOnly) applied client-side.
Inputs: termCode (required), searchTerm (required), days, openOnly, +2 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 16 tools
Most tools cleanly separate listing, detail lookup, and course discovery, but a few overlaps exist: check_course_exists is similar to get_course/search_courses, and the multiple list_courses_* variants all return courses with sections. Descriptions are specific enough that an agent can usually pick correctly, though some boundary cases require close reading.
Tool names follow a consistent verb_noun pattern: list_* for collections, get_* for single records, and search_courses/check_course_exists as clear special cases. All names are snake_case, and related tools are predictably grouped.
16 tools is slightly above the ideal range but justifiable given the domain's breadth: terms, schools, programs, course prefixes, sessions, GE requirements, fees, and syllabi all need coverage. A couple of tools like check_course_exists or get_syllabus_index feel auxiliary, but they do not make the set bloated.
The catalog surface is well covered: term navigation, program/school structure, course search and detail, GE lookup, sections, fees, sessions, and syllabi are all represented. Minor gaps include lack of a direct single-section lookup, no search by instructor, and no registration/enrollment actions, but for a read-only catalog the core workflows are complete.
Maintenance
Related MCP Connectors
Read-only access to Epivo's live course catalogue for AI agents.
Discover, compare, route, and execute machine-accessible capabilities for AI agents.
YouTube transcripts, search, channel/playlist listings and upload tracking for AI agents.
Pay-per-use tool marketplace for AI agents. Search, price-check, and call APIs via MCP.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables searching and retrieving course details, schedules, prerequisites, and instructor information from the CMU course catalog via the ScottyLabs API.92MIT
- FlicenseAqualityDmaintenanceEnables searching Brown University courses, getting detailed course info, and checking schedule conflicts via natural language, using the university's public course catalog API.5-
- FlicenseNot gradedqualityDmaintenanceProvides intelligent access to a university course catalog with full-text search, prerequisite tracking, instructor lookups, and course comparison prompts.-
- AlicenseAqualityBmaintenanceEnables searching and retrieving course listings, departments, and syllabi from National Chengchi University's public course API using natural language.31MIT