Content
# Open Campus Advisor
> Open source AI advisor for any university. Students get live course info, faculty research, and academic guidance through natural conversation with Claude or ChatGPT.
**Website:** [opencampusadvisor.org](https://opencampusadvisor.org)
**npm:** [open-campus-advisor](https://www.npmjs.com/package/open-campus-advisor)
**Live providers:** Wesleyan University · Columbia University · MIT
---
## The Vision
Every university should have an AI advisor. A student talks to Claude or ChatGPT and gets:
- Live course catalog — prerequisites, enrollment, gen-ed requirements
- Faculty research profiles with active NIH grants
- First-year seminars, freshman-appropriate courses, distribution requirements
- The path from coursework → research in a single conversation
**The key insight:** Claude and ChatGPT handle the advising layer. Universities only need to expose their data. The tool interface is school-agnostic — a student switching schools gets the same experience.
This starts with academics and research. Career services, financial aid, and housing follow the same pattern.
---
## Architecture
```
src/
types.ts ← CatalogProvider interface — the universal contract
cache.ts ← 60-min TTL cache
transports/
mcp.ts ← MCP server factory (Claude Desktop / Claude Code)
rest.ts ← REST API factory (ChatGPT / any AI)
providers/
wesleyan.ts ← Wesleyan: WesMaps + profile API + NIH grants
index.ts ← MCP entry point
api.ts ← REST API entry point
```
**Two providers already built** — Wesleyan and Columbia. Adding a new university: implement `CatalogProvider` in `src/providers/yourschool.ts`, add one line to `api.ts`. All tools, error handling, and caching come free.
**Multi-AI support:** the same `CatalogProvider` powers both transports:
- Claude users → MCP server (runs locally via `npx open-campus-advisor`)
- ChatGPT users → REST API (`api.opencampusadvisor.org/api/v1/wesleyan/*`)
---
## Tools (9 total)
### Academics
| Tool | Description |
|---|---|
| `list_departments` | All departments and programs with subject codes |
| `search_courses` | Keyword + department search — sections, instructors, schedules |
| `get_course_details` | Full course: description, prerequisites, gen-ed, live enrollment per section |
| `list_first_year_seminars` | All FYS seminars grouped by department |
| `list_courses_for_freshmen` | Courses appropriate for first-years in a given department |
| `list_gen_ed_courses` | Courses fulfilling distribution requirements |
| `search_by_instructor` | All courses by an instructor — accepts names, not just internal IDs |
### Research
| Tool | Description |
|---|---|
| `search_faculty_research` | Find faculty by research keyword within a department |
| `get_faculty_profile` | Full profile: bio, research, publications, courses, contact, active NIH grants |
---
## Data Sources (all public, no auth required)
| Data | Source |
|---|---|
| Course catalog, enrollment | WesMaps (`owaprod-pub.wesleyan.edu`) |
| Faculty profiles, research, publications | `wesleyan.edu/about/directory/profile.php` |
| Active NIH grants | NIH Reporter v2 API (`api.reporter.nih.gov`) |
---
## What Students Can Ask
**Academics:**
> *"What CS courses can I take as a freshman this fall?"*
> *"What are the prerequisites for COMP312?"*
> *"Show me all first-year seminars related to climate or the environment."*
**Research:**
> *"Which COMP professors do machine learning research?"*
> *"Tell me about Professor Manfredi's research and active grants."*
**Connected:**
> *"I want to study computational biology — what courses should I take and which professors should I approach for research?"*
---
## Live Schools
| School | API | Provider |
|---|---|---|
| Wesleyan University | `api.opencampusadvisor.org/api/v1/wesleyan/*` | `src/providers/wesleyan.ts` |
| Columbia University | `api.opencampusadvisor.org/api/v1/columbia/*` | `src/providers/columbia.ts` |
| MIT | `api.opencampusadvisor.org/api/v1/mit/*` | `src/providers/mit.ts` |
## Infrastructure
| Layer | Service | URL | Status |
|---|---|---|---|
| Landing page | Vercel | [opencampusadvisor.org](https://opencampusadvisor.org) | ✓ Live |
| REST API | Railway | [api.opencampusadvisor.org](https://api.opencampusadvisor.org) | ✓ Live |
| Analytics | PostHog | — | ✓ Wired |
| npm package | npmjs.com | [open-campus-advisor](https://www.npmjs.com/package/open-campus-advisor) | ✓ Published |
| Landing repo | GitHub | [open-campus-advisor/landing](https://github.com/open-campus-advisor/landing) | ✓ Public |
---
## Analytics & Public Dashboard
Every API call logs anonymized events to PostHog — school, tool used, keyword searched. This powers a public dashboard on the landing page showing:
- Trending courses per campus this week
- Most-searched research topics
- Popular departments by student interest
- Cross-campus comparisons as more schools are added
Useful for students discovering what peers are exploring. Useful for universities understanding what their students actually care about.
---
## Setup for Claude Desktop
Edit `~/Library/Application Support/Claude/claude_desktop_config.json`:
```json
{
"mcpServers": {
"open-campus-advisor": {
"command": "npx",
"args": ["open-campus-advisor"]
}
}
}
```
Fully quit and relaunch Claude Desktop (Cmd+Q). Click **`+`** → **Connectors** to confirm connected.
---
## Setup for Claude Code
```bash
claude mcp add open-campus-advisor -- npx open-campus-advisor
claude mcp list # confirm ✓ Connected
```
---
## Setup for ChatGPT
**Wesleyan Academic Advisor GPT:**
[chatgpt.com/g/g-6a2583a8a7cc819198378184eaf9b15f-wesleyan-academic-advisor](https://chatgpt.com/g/g-6a2583a8a7cc819198378184eaf9b15f-wesleyan-academic-advisor)
Open the link, start chatting. Works on ChatGPT mobile and desktop.
Columbia GPT coming soon — the REST API is already live at `api.opencampusadvisor.org/api/v1/columbia/*`.
**REST API endpoints (Wesleyan):**
```
GET api.opencampusadvisor.org/api/v1/wesleyan/departments
GET api.opencampusadvisor.org/api/v1/wesleyan/courses?query=...&department=...&term=...
GET api.opencampusadvisor.org/api/v1/wesleyan/courses/:courseId
GET api.opencampusadvisor.org/api/v1/wesleyan/seminars
GET api.opencampusadvisor.org/api/v1/wesleyan/freshmen-courses/:department
GET api.opencampusadvisor.org/api/v1/wesleyan/gen-ed/:department
GET api.opencampusadvisor.org/api/v1/wesleyan/instructor?name=...
GET api.opencampusadvisor.org/api/v1/wesleyan/faculty/search?query=...&department=...
GET api.opencampusadvisor.org/api/v1/wesleyan/faculty/:facultyId
GET api.opencampusadvisor.org/health
```
---
## Self-host / Development
```bash
git clone https://github.com/open-campus-advisor/open-campus-advisor.git
cd open-campus-advisor
npm install
npm run dev # MCP server via tsx
```
---
## Testing
**Browser UI:**
```bash
npx @modelcontextprotocol/inspector npx tsx index.ts
# opens at http://localhost:5173
```
**Raw stdin:**
```bash
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}
{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"search_faculty_research","arguments":{"query":"machine learning","department":"COMP"}}}' \
| npx tsx index.ts
```
---
## Porting to Another University
1. Create `src/providers/yourschool.ts` implementing `CatalogProvider`
2. Set `schoolName`, `defaultTerm`, and `terms`
3. Implement each method by scraping or querying your school's public catalog
4. Add one line each to `index.ts` (MCP) and `api.ts` (REST)
```typescript
// api.ts — adding MIT takes one line
app.use('/api/v1/wesleyan', createRestRouter(new WesleyanProvider()));
app.use('/api/v1/mit', createRestRouter(new MITProvider())); // ← add this
```
---
## Tech Stack
- [`@modelcontextprotocol/sdk`](https://github.com/modelcontextprotocol/typescript-sdk) — MCP server
- [`cheerio`](https://cheerio.js.org/) — HTML parsing
- [`zod`](https://zod.dev/) — input validation
- [`tsx`](https://github.com/privatenumber/tsx) — TypeScript execution
- [NIH Reporter API](https://api.reporter.nih.gov) — public grant data
- [PostHog](https://posthog.com) — analytics and public dashboard data
---
## Contributing
PRs welcome — especially new university providers. Build one for your school, open a PR. The goal is a library of providers that any student can use.
MCP Config
Below is the configuration for this MCP Server. You can copy it directly to Cursor or other MCP clients.
mcp.json
Connection Info
You Might Also Like
markitdown
MarkItDown-MCP is a lightweight server for converting URIs to Markdown.
markitdown
Python tool for converting files and office documents to Markdown.
Filesystem
Node.js MCP Server for filesystem operations with dynamic access control.
TrendRadar
TrendRadar: Your hotspot assistant for real news in just 30 seconds.
mempalace
The highest-scoring AI memory system ever benchmarked. And it's free.
mempalace
The highest-scoring AI memory system ever benchmarked. And it's free.