purdue-mcp
MCP server providing 24 tools to access public, real-time Purdue University data including dining menus, gym occupancy, course catalogs, bus times, events, and more.
README
purdue-mcp
One MCP server for all public, real-time Purdue University data — dining menus, live gym occupancy, the course catalog, bus times, campus events, student orgs, library hours, athletics, news, and weather. Point any MCP client (Claude Code, Claude Desktop, Cursor, …) at it and ask "what's for dinner at Wiley", "how busy is the CoRec", or "when's the next bus from the PMU".
29 tools across 13 public sources.
Everything it reads is public and unauthenticated. It never touches a student account, grades, schedules, bursar records, or anything behind a Purdue login.
Unofficial and community-run. Not affiliated with, endorsed by, or operated by Purdue University.
Install
Claude Code
claude mcp add purdue -s user -- npx -y purdue-mcp@latest
Codex CLI
codex mcp add purdue -- npx -y purdue-mcp@latest
Cursor / Claude Desktop / Windsurf — merge into the client's MCP config:
{
"mcpServers": {
"purdue": {
"command": "npx",
"args": ["-y", "purdue-mcp@latest"]
}
}
}
The @latest tag re-resolves the newest version on every launch, so it stays
current on its own. Needs Node 20+. No API key, no account, no auth.
Config paths, VS Code, offline/global install, and troubleshooting are in install.md.
Let an agent install it
Paste this into any coding agent:
Install the
purdue-mcpMCP server for me — public real-time Purdue University data (dining menus, live gym occupancy, courses, bus times, events, athletics, library hours, weather). On npm aspurdue-mcp, needs Node 20+, no API key. Detect my MCP client and register it withnpx -y purdue-mcp@latestas the command, using the@latesttag so it stays current. Then verify it connects and tell me which tools it exposes. Full instructions: https://raw.githubusercontent.com/sharziki/purdue-mcp/main/install.md
Or run from source
git clone https://github.com/sharziki/purdue-mcp && cd purdue-mcp
npm install && npm run build
Tools
Dining — Purdue HFS dining API
| Tool | What it answers |
|---|---|
dining_locations |
Every dining court / Quick Bites / On-the-GO!, open right now or next meal time |
dining_menu |
Full menu for a location and date, by meal and station, with vegan/vegetarian/allergen filters |
dining_find_item |
"Who's serving chicken tenders today?" — searches every dining court at once |
dining_item_nutrition |
Full nutrition panel for any menu item |
dining_line_length |
Crowdsourced live line-length reports (populated around peak meal hours) |
Registration — live seats (Purdue Banner)
| Tool | What it answers |
|---|---|
course_availability |
How many seats are actually open right now in each section, with waitlists, CRNs, meeting times, instructors |
section_details |
Seats, waitlist, prerequisites, and major/level restrictions for one CRN — "why can't I register for this" |
banner_terms |
Which terms are open for registration vs. view-only |
Academics — Purdue.io course catalog
| Tool | What it answers |
|---|---|
list_terms |
Term codes and date ranges, newest first |
list_subjects |
Every subject code (CS, MA, ENGR, …) |
search_courses |
Courses by subject, number, or title keyword — with descriptions and credit hours |
course_sections |
CRNs, section types, meeting days/times, rooms, and instructors for a term |
find_building |
Resolve a building code, e.g. LWSN → Lawson Computer Science Bldg |
Campus life
| Tool | What it answers |
|---|---|
search_events |
Official university calendar — lectures, athletics, career fairs, deadlines |
search_student_orgs |
~1,200 registered student organizations on BoilerLink |
search_club_events |
Upcoming club events: callouts, socials, meetings |
reddit_purdue |
What students are actually talking about on r/Purdue (unofficial) |
purdue_exponent |
Purdue Exponent student newspaper — campus reporting, editorially independent |
Facilities
| Tool | What it answers |
|---|---|
recwell_occupancy |
Live headcount and % capacity for all 37 counted RecWell spaces — "how busy is the CoRec right now" |
library_hours |
Today's hours and open/closed status for every library, or the full week |
Athletics
| Tool | What it answers |
|---|---|
athletics_sports |
Every varsity team and its current season schedule |
athletics_schedule |
Full season for one team — opponents, rankings, home/away, venue, results |
athletics_upcoming |
Next Boilermaker games across all sports, soonest first |
Getting around
| Tool | What it answers |
|---|---|
bus_routes |
Every CityBus route serving campus and Greater Lafayette |
bus_stops |
Find stops by name, or the stops nearest a lat/lon |
bus_next_departures |
Next scheduled departures from a stop, with minutes-until |
News and deadlines
| Tool | What it answers |
|---|---|
purdue_news |
Official newsroom articles, searchable |
academic_calendar |
First day of classes, breaks, finals week, add/drop deadlines, exam scheduling |
Environment
| Tool | What it answers |
|---|---|
campus_weather |
Current conditions, forecast, and active NWS alerts for West Lafayette |
Dates default to today in the campus timezone (America/Indiana/Indianapolis), so the server gives the right answer no matter where it runs.
Data sources
| Source | Endpoint | Notes |
|---|---|---|
| Purdue Dining (HFS) | api.hfs.purdue.edu/menus/v2 |
Official, public, unauthenticated |
| Purdue Banner | selfservice.mypurdue.purdue.edu/prod |
Public class search — no login. Authoritative for seats/waitlist/prereqs. HTML, so parsing is version-sensitive. |
| Purdue.io | api.purdue.io/odata |
Community-run open-source catalog mirror (Purdue-io/PurdueApi) |
| Purdue Events | events.purdue.edu/api/2 |
Localist public API |
| BoilerLink | purdue.campuslabs.com/engage/api/discovery |
Anthology Engage public discovery API |
| Purdue RecWell | goboardapi.azurewebsites.net (Connect2) |
Live occupancy counters; account key is the one Purdue's own public widget ships |
| Purdue Libraries | calendar.lib.purdue.edu |
Springshare LibCal public hours endpoints |
| Purdue Athletics | purduesports.com/website-api |
Official athletics site's public JSON API |
| Purdue Newsroom / Registrar | purdue.edu/{newsroom,registrar}/wp-json |
WordPress REST API |
| CityBus | bus.gocitybus.com GTFS |
Static schedule feed; no public real-time feed exists |
| r/Purdue | reddit.com/r/Purdue/.rss |
Unofficial student chatter |
| Purdue Exponent | purdueexponent.org RSS |
Independent student newspaper |
| NOAA / NWS | api.weather.gov |
Public federal API |
Responses are cached in-process with short TTLs (30s–24h depending on how fast the data moves) to stay a polite client. Nothing is persisted to disk.
Ruled out (investigated, no public source)
- Laundry machine availability — Purdue moved residence-hall laundry to CSCPay Mobile, which has no public web status page. The old
washalertwebhost the community app scraped no longer resolves. - Real-time bus positions — CityBus publishes GTFS static only. No GTFS-Realtime feed is listed on Transitland or the Mobility Database, and MyRide's backend is not public.
bus_next_departuresreturns timetable times. - Parking garage availability — Purdue Parking publishes no live space counts.
- Grades, personal schedules, bursar — behind the myPurdue login. Out of scope by design.
- Library study-room availability — LibCal's spaces API requires OAuth credentials the library would have to issue.
- Laundry (again) — CSCPay has no public read API of any kind.
Seat availability was on this list — it turned out Banner's class search needs no login, so course_availability now covers it.
Adding a source
Each source is one file in src/sources/ exporting a registerX(server) that calls server.registerTool(...). Register it in src/index.ts. Use getJSON() from src/lib/http.ts so you inherit the timeout, User-Agent, and cache.
Rules of the road:
- Public data only. Nothing that needs a Purdue login, and nothing about a specific individual.
- Verify the endpoint is live before shipping it —
npm run smokehits every real upstream and is the test suite. - Be a polite client. Sensible cache TTL, no tight polling.
npm run build
npm run smoke # live end-to-end check of all tools
License
MIT
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。