Skip to main content

MCP server and CLI tool for automated UCSD study room booking via EMS

Project description

ucsd-study-room

한국어

Python 3.11+ License: MIT

Automate UCSD Price Center study room booking with your AI assistant or from the terminal.

What you can do:

  • Search available rooms by date and time
  • Book a room instantly
  • Cancel reservations with a reason
  • View your current reservations

Works with Claude Code, Codex CLI, Gemini CLI, Cursor, and any MCP-compatible client.

Quick Start

If you're using an MCP-compatible AI assistant (Claude Code, Codex CLI, etc.), simply copy and paste this prompt:

Install the ucsd-study-room MCP server:
1. Run: uv tool install ucsd-study-room && uvx --from ucsd-study-room playwright install chromium
2. Add "study-room" to your MCP config: {"command": "uvx", "args": ["--from", "ucsd-study-room", "study-room-mcp"]}
3. Run: study-room config --name "MY NAME" --email "MY_EMAIL@ucsd.edu"
4. Run: study-room login

Replace MY NAME and MY_EMAIL@ucsd.edu with your actual name and UCSD email before pasting. Your AI assistant will handle the rest.

Once set up, just ask your AI assistant in natural language:

  • "Search for available study rooms tomorrow from 2pm to 4pm"
  • "Book Price Center Study Room on March 11 from 3pm to 5pm"
  • "Cancel my reservation on March 13"
  • "Show my current reservations"

Requirements

  • Python 3.11 or later
  • Google Chrome installed
  • UCSD account with Duo Push enabled

Platform Support

Platform Status Notes
macOS Fully supported Credentials stored in Keychain
Windows Supported Credentials stored in Windows Credential Locker
Linux Supported Requires gnome-keyring or kwallet for credential storage; falls back to manual login if unavailable. Run playwright install --with-deps chromium for system dependencies.

Manual Installation

uv tool install ucsd-study-room
uvx --from ucsd-study-room playwright install chromium
Alternative: pip install
pip install ucsd-study-room
playwright install chromium

If using pip, configure the MCP server with:

{
  "study-room": {
    "command": "study-room-mcp"
  }
}

Updating

uv tool install ucsd-study-room@latest

Initial Setup

1. Set your contact info (required before booking):

study-room config --name "Your Name" --email "you@ucsd.edu"

2. Log in with your UCSD credentials (first time only):

study-room login

A Chrome window will open. Enter your UCSD SSO credentials when prompted, then approve the Duo Push notification on your phone. Your session and credentials are saved for future use.

MCP Server Setup

The MCP server communicates over stdio and works with any MCP-compatible client. Add the following to your client's MCP configuration:

{
  "study-room": {
    "command": "uvx",
    "args": ["--from", "ucsd-study-room", "study-room-mcp"]
  }
}

Compatible Clients

Client Type Config Location
Claude Code / Codex CLI / Gemini CLI CLI Each CLI's config file
Claude Desktop / Codex Desktop Desktop App Each app's settings
Cursor / Windsurf / Antigravity / Cline IDE Each IDE's MCP settings

Once configured, you can use natural language to manage bookings:

  • "Search for available study rooms tomorrow from 2pm to 4pm"
  • "Book Price Center Study Room 3 on March 11 from 3pm to 5pm"
  • "Cancel my reservation on March 13"
  • "Are there any rooms open this Friday afternoon?"

Available MCP Tools

Tool Description
search_rooms Search for available rooms by date and time range
book_room Book a specific room (use after search_rooms)
cancel_reservation Cancel a reservation by date with a cancel reason
my_events List current reservations with date, room, status, and ID
login Authenticate via UCSD SSO + Duo Push

CLI Usage

Commands

Command Description
study-room login SSO login with Duo Push (opens browser for first-time auth)
study-room search Search available rooms with --date, --start, --end options
study-room search --book Search and book a room interactively
study-room cancel Cancel a reservation interactively or with --date, --reason
study-room events Show current reservations
study-room config View or set user info (--name, --email, --attendees)
study-room status Check whether the current session is valid

Examples

Search for available rooms:

study-room search --date 2026-03-11 --start 15:00 --end 17:00

Search and book interactively:

study-room search --date 2026-03-11 --start 15:00 --end 17:00 --book

Cancel a reservation:

study-room cancel                              # interactive selection
study-room cancel --date 2026-03-13            # by date (prompts for reason)
study-room cancel --date 2026-03-13 --reason "Changed Date"

How It Works

  1. Browser automation -- Uses Playwright with real Chrome (channel="chrome") in headless mode to interact with the EMS Cloud booking system.
  2. Authentication -- Navigates to the UCSD SAML SSO page, submits credentials, and waits for Duo Push approval. On first login, a headed browser window opens for the Duo flow.
  3. Session management -- After authentication, cookies and browser storage state are saved to ~/.study-room/. Credentials are stored in the system keyring via the keyring library (macOS Keychain, Windows Credential Locker, or Linux SecretService). Sessions are valid for 7 days.
  4. Auto re-login -- When a session expires during a search or booking operation, the tool automatically opens a headed browser, loads credentials from the system keyring, and re-authenticates with Duo Push.
  5. Room search -- Navigates to the EMS booking page, fills in date and time fields, and parses available rooms by inspecting the DOM for booking buttons.
  6. Booking -- Clicks the add-to-cart button for the selected room, fills in the reservation form (name, email, terms), and submits the reservation.
  7. Cancellation -- Navigates to My Events, clicks the reservation link, selects a cancel reason from the dropdown, and confirms the cancellation.

Configuration

Configuration is stored in ~/.study-room/config.yaml. Default target rooms are Price Center Study Room 1 through 8.

name: "Your Name"
email: "you@ucsd.edu"
default_attendees: 1
rooms:
  - Price Center Study Room 1
  - Price Center Study Room 2
  - Price Center Study Room 3
  - Price Center Study Room 4
  - Price Center Study Room 5
  - Price Center Study Room 6
  - Price Center Study Room 7
  - Price Center Study Room 8

Contributing

Contributions are welcome. To contribute:

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/your-feature)
  3. Commit your changes
  4. Push to the branch and open a pull request

Please make sure existing tests pass before submitting.

License

This project is licensed under the MIT License. See LICENSE for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ucsd_study_room-0.4.0.tar.gz (22.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ucsd_study_room-0.4.0-py3-none-any.whl (18.7 kB view details)

Uploaded Python 3

File details

Details for the file ucsd_study_room-0.4.0.tar.gz.

File metadata

  • Download URL: ucsd_study_room-0.4.0.tar.gz
  • Upload date:
  • Size: 22.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.7

File hashes

Hashes for ucsd_study_room-0.4.0.tar.gz
Algorithm Hash digest
SHA256 8bbd345df08ccee32a9205d1fb17b7b18609e542251f2a4349ea25641dc5a445
MD5 c3626a7fd110f70d7c3e1bf5e3363d4c
BLAKE2b-256 3c1320e190ed7985f73268e34e2ade4db98d3649f3d598a9b67eb8b29744b2bf

See more details on using hashes here.

File details

Details for the file ucsd_study_room-0.4.0-py3-none-any.whl.

File metadata

File hashes

Hashes for ucsd_study_room-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 671e2b5d3e60246d1edd1022f412f70f2397c7bd0079058b6c4ee791851c2f3b
MD5 7f4a3442e933805adb156d08a7d65afd
BLAKE2b-256 3976eb571494b2830f79f310d2401e49f74e6b3f8ed48421d11a5242d53a82c1

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page