cmucourses-connector

cmucourses-connector

Remote MCP connector providing live, structured access to CMU Courses public data including courses, prerequisites, schedules, instructors, gen-eds, and final-exam times to help students plan schedules.

Category
Visit Server

README

CMU Courses — Claude Connector

A remote MCP connector that gives Claude live, structured access to CMU Courses public data so it can help students plan schedules with accurate course info: courses, units, descriptions, prerequisites/corequisites/crosslists, requisite trees, offered schedules (times, instructors, locations), instructor teaching history, gen-eds, and final-exam times.

  • Read-only wrapper of the existing CMU Courses public API — it does not modify or run any part of the CMU Courses codebase.
  • Stateless, authless, deployed to Cloudflare Workers (Streamable HTTP, MCP).
  • Backend: https://course.apis.scottylabs.org (the live ScottyLabs course backend).

FCE (course evaluations / workload / ratings) is not included in this version. That data is sign-in-gated behind Clerk, and a remote connector can't reach a user's browser session. See src/auth/authProvider.ts for the deferred design.

Tools

Tool What it does
search_courses Keyword + filter search (department, level, units, semester); paginated 10/page
get_course Full details for one course by ID (optionally with schedules)
get_courses Batch details for several courses
get_requisites Prereqs (with AND/OR relation groups) + postreqs for a course
get_course_schedules Offered lectures/sections for course(s): days, times, instructors, locations
get_instructor_schedules Courses/semesters an instructor teaches
find_courses Resolve a partial name/ID to matching courses (lightweight lookup)
find_instructors Resolve a partial instructor name
get_geneds Gen-ed-eligible courses for a school (SCS/CIT/MCS/Dietrich)
get_finals Final-exam day/time/location (bundled per-semester snapshot)
list_departments Department name ↔ short name ↔ number-prefix map

Develop

npm install
npm run typecheck        # tsc --noEmit
npm test                 # unit tests (mocked backend) — 38 tests
npm run test:integration # live contract tests against the real backend
npm run dev              # wrangler dev on http://127.0.0.1:8787/mcp

Drive it locally with the MCP Inspector:

npm run inspector        # then connect to http://127.0.0.1:8787/mcp (transport: Streamable HTTP)

Or with Claude Code:

claude mcp add --transport http cmucourses http://127.0.0.1:8787/mcp

Stress test (mixed tools, live backend):

node scripts/stress.mjs http://127.0.0.1:8787/mcp 50 200

Deploy (Cloudflare Workers)

npx wrangler login          # one-time, uses your Cloudflare account
npx wrangler deploy         # -> https://cmucourses-connector.<your-subdomain>.workers.dev

The backend URL is set in wrangler.jsonc (vars.CMU_COURSES_BACKEND_URL) and can be overridden per environment. An optional KV cache for the large /courses/all and /instructors lists is documented (commented) in wrangler.jsonc; the connector also caches these in-isolate by default, so KV is optional.

Register in Claude

Live deployment: https://cmucourses-connector.samethanmathew.workers.dev/mcp

  1. Settings → Connectors → Add custom connector.
  2. Paste the URL above (note the /mcp path).
  3. No login is required (public data). The tools appear immediately.

Maintaining the finals snapshot

src/reference/finals.snapshot.json is a per-semester copy of the CMU Courses finals data (currently Fall 2025). When the semester changes, replace it from cmucourses/apps/frontend/src/components/finals/finals.json and update SEMESTER_LABEL in src/tools/finals.ts.

Layout

src/
  index.ts              Worker entry + createServer()
  mcp/                  Minimal MCP server (JSON-RPC) + Streamable-HTTP transport
  backend/              CMU Courses API client (encoding, normalization, retries, cache)
  tools/                One module per tool group
  reference/            Departments, gened schools, day map, finals snapshot
  auth/                 Deferred FCE seam (not wired in v1)
test/                   Unit + live integration/contract tests
scripts/stress.mjs      Concurrency load test
docs/EVALS.md           Golden-answer eval prompts

Recommended Servers

playwright-mcp

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.

Official
Featured
TypeScript
Magic Component Platform (MCP)

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.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

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.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

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.

Official
Featured
TypeScript
Kagi MCP Server

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.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

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.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured