Yale Dining MCP
Provides access to Yale Hospitality dining menus, including tools to list residential colleges, retrieve menus by college, meal, and date, and search dishes across all colleges.
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., "@Yale Dining MCPWhat's for lunch at Berkeley today?"
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.
Yale Dining MCP
Lightweight TypeScript service for Yale Hospitality menus and Payne Whitney Gym hours:
An MCP server (
@modelcontextprotocol/sdk) with tools for LLMs (stdio or Streamable HTTP).A REST gateway (
POST /api/chat) for an iOS Shortcut — built for Siri speech and notification text.
Menus come from the public Nutrislice API. Gym hours and closures are parsed from PWG Hours of Operation.
Host on Vercel (iOS Shortcut)
The Mac does not need to stay on. Vercel Hobby is free HTTPS and fits this app better than Cloudflare Workers (Nutrislice week JSON is large; Workers CPU limits are tight).
npm i -g vercel
vercel login
vercel --prodWhen prompted, set environment variables (or add them in the Vercel dashboard → Settings → Environment Variables):
GROQ_API_KEY— from console.groq.com/keysLLM_BASE_URL=https://api.groq.com/openai/v1LLM_MODEL=openai/gpt-oss-120bMCP_AUTH_TOKEN— optional, only if you expose/mcppublicly
Your Shortcut URL:
https://yale-dining.vercel.app/api/chatHealth check: https://yale-dining.vercel.app/health
Cloudflare Tunnel still runs on your laptop. A Cloudflare Worker rewrite is possible later, but Vercel Node is the path that matches this codebase without a computer left on.
Related MCP server: mit-dining-mcp
Setup
Requires Node.js 20+.
npm install
cp .env.example .envLanguage model
The chat gateway talks to any OpenAI-compatible API. Groq is the default.
Create a free key at console.groq.com/keys, then in .env:
GROQ_API_KEY=gsk_...
LLM_BASE_URL=https://api.groq.com/openai/v1
LLM_MODEL=openai/gpt-oss-120bopenai/gpt-oss-120b is Groq’s current replacement for the retired Llama 3.3 IDs and supports tool calling. If Groq is down or the key is missing, the gateway still answers common questions (college + meal, “where is pizza”) by routing directly to Nutrislice.
Ollama (local)
LLM_BASE_URL=http://localhost:11434/v1
LLM_API_KEY=ollama
LLM_MODEL=llama3.1OpenAI
LLM_BASE_URL=https://api.openai.com/v1
LLM_API_KEY=sk-...
LLM_MODEL=gpt-4o-miniRun
npm run devListens on http://0.0.0.0:3000.
Health:
GET /healthiOS chat:
POST /api/chatMCP Streamable HTTP:
POST /mcp
MCP over stdio (local Claude Desktop / Cursor):
npm run mcpDocker
docker build -t yale-dining .
docker run --rm -p 3000:3000 \
-e GROQ_API_KEY=gsk_... \
-e MCP_AUTH_TOKEN=optional-secret \
yale-diningSet MCP_AUTH_TOKEN if the container is on a public URL so /mcp requires Authorization: Bearer <token>.
Example chat request:
curl -X POST http://localhost:3000/api/chat \
-H 'Content-Type: application/json' \
-d '{"query":"What'\''s for lunch at Berkeley College today?"}'Response:
{
"reply": "Lunch at Berkeley College today includes grilled chicken, quinoa salad, and roasted vegetables."
}MCP tools
Tool | Arguments | Purpose |
| none | All 14 residential colleges and Nutrislice slugs |
|
| One hall’s dishes for breakfast, lunch, or dinner (date defaults to today, Eastern Time) |
|
| Search every residential college in parallel ( |
|
| Payne Whitney gym, pool, and squash hours |
|
| Closures and adjusted hours (recess, holidays, varsity meets) |
| none | Lanman / rec-court open-rec policy and 25Live schedule URL |
Cursor / Claude Desktop (stdio, local):
{
"mcpServers": {
"yale-dining": {
"command": "npx",
"args": ["tsx", "src/mcp-server.ts"],
"cwd": "/absolute/path/to/Dining"
}
}
}Remote Streamable HTTP (Docker, Fly, or the same process as /api/chat):
{
"mcpServers": {
"yale-dining": {
"url": "http://localhost:3000/mcp",
"headers": {
"Authorization": "Bearer optional-secret"
}
}
}
}Omit headers if MCP_AUTH_TOKEN is unset.
iOS Shortcut setup
Use the Vercel HTTPS URL (the Mac does not need to be on):
https://yale-dining.vercel.app/api/chat
Open Shortcuts on iOS.
Create a new shortcut named Yale Dining.
Add action: Ask for Input → Text with prompt What would you like to ask Yale Dining? (Skip this step if Siri should pass the spoken question directly.)
Add action: Get Contents of URL
URL:
https://yale-dining.vercel.app/api/chatMethod: POST
Headers:
Content-Type=application/jsonRequest Body: JSON
Key:
query→ Value: Provided Input
Add action: Get Dictionary Value (or Get Value for Key) → Key:
replyAdd action: Show Result (widget / screen) or Speak Text (Siri).
Optional Siri phrase: in shortcut details, set Use with Siri and a phrase such as “Yale Dining”.
Project layout
src/
nutrislice.ts # Nutrislice fetchers and menu parser
pwg.ts # Payne Whitney hours, closures, activity-space links
tools.ts # Shared MCP/LLM tool router
mcp-server.ts # MCP tool schemas and stdio server
llm.ts # Groq/OpenAI function calling + spoken-reply formatting
http.ts # Web Standard handlers shared by Fastify and Vercel
server.ts # Local Fastify POST /api/chat and POST /mcp
api/ # Vercel functions
Dockerfile # Optional container image
vercel.json # Vercel routes and timeoutsThis server cannot be deployed
Maintenance
Related MCP Connectors
YouTube transcripts, search, channel browsing, and playlists for AI agents via MCP.
- mcpOAuthcom.zomato
An MCP server that exposes functionalities to use Zomato's services.
Read-only MCP tools for AI agent discovery, structured resources, and NIULAI information.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to interact with Mealie recipe databases through MCP clients like Claude Desktop.142MIT
- AlicenseNot gradedqualityDmaintenanceProvides real-time access to menus from all six MIT Bon Appétit dining halls. It enables users to query daily or weekly schedules and filter options by specific dietary requirements such as vegan, halal, or gluten-free.38 npm1MIT
- AlicenseNot gradedqualityCmaintenanceEnables interaction with Mealie for managing recipes, meal plans, shopping lists, foods, units, tags, categories, and more through MCP.MIT
- FlicenseNot gradedqualityCmaintenanceEnables querying Yazio food logs including meals, daily summaries, and nutrition totals through MCP tools.-