Skip to main content
Glama

IIITH Mess MCP

MCP server for the IIIT Hyderabad Mess System. Lets LLMs check registrations, view menus, manage meals, and track billing — all conversationally.

Requires IIIT VPN or intranet access.

Examples of what you can ask

  • "What am I eating today?"

  • "Cancel all my Friday lunches"

  • "Register me for dinner at Kadamba tomorrow"

  • "What's on the menu tonight?"

  • "Every week, register my favourite meals for the week"

  • "Estimate the nutrition for tonight's dinner"

  • "How much is my mess bill this month?"

Related MCP server: IIITH Mess MCP Server

Prerequisites

  • An auth key from mess.iiit.ac.in (Settings > Auth Keys), or a session cookie

  • uv

Adding to Claude Code

claude mcp add iiith-mess -e MESS_AUTH_KEY=your-auth-key -- uvx iiith-mess-mcp

Via local clone

git clone https://github.com/Kallind/IIITH-Mess-MCP
claude mcp add iiith-mess -e MESS_AUTH_KEY=your-auth-key -- uv run --directory IIITH-Mess-MCP python iiith_mess_mcp/server.py

Verify it connected:

claude mcp list

Adding to GitHub Copilot (VS Code)

Simplest way: Just ask Copilot to set it up by providing this repository URL.

Via uvx

Create or edit .vscode/mcp.json in your workspace:

{
  "servers": {
    "iiith-mess": {
      "type": "stdio",
      "command": "uvx",
      "args": ["iiith-mess-mcp"],
      "env": {
        "MESS_AUTH_KEY": "your-auth-key-here"
      }
    }
  }
}

Via local clone

{
  "servers": {
    "iiith-mess": {
      "type": "stdio",
      "command": "uv",
      "args": ["run", "--directory", "/path/to/IIITH-Mess-MCP", "python", "iiith_mess_mcp/server.py"],
      "env": {
        "MESS_AUTH_KEY": "your-auth-key-here"
      }
    }
  }
}

Made with <3 at IIITH by Kallind Soni and Arihant Tripathy

Available Tools

45 tools
mess_cancel_registrationA
DestructiveIdempotent

Cancel a meal registration so the user is not charged for it.

Use when the user wants to cancel/drop a booked meal. Returns 403 if the cancellation window is closed, 424 if no registration exists.

Args: params: auth_key/session, meal_date, meal_type

Returns: JSON status 204 on success

Inputs: params (required). Returns: result

mess_cas_login_infoA
Read-onlyIdempotent

Get instructions for IIIT student CAS login (browser-only, cannot be called via API/AJAX).

Returns: Step-by-step instructions for obtaining a session cookie

Inputs: no named parameters. Returns: result

mess_complete_password_resetA

Complete password reset with OTP + new password.

Args: params: email, otp (6-digit string e.g. '123456'), password (new password)

Returns: JSON status 204 on success

Inputs: params (required). Returns: result

mess_create_auth_keyA

Create a new API auth key. Key names must be unique.

Args: params: auth_key/session, name (unique friendly name), expiry (YYYY-MM-DD)

Returns: JSON AuthKey including the key value — save this, it won't be shown again. Returns 409 if a key with the same name already exists.

Inputs: params (required). Returns: result

mess_create_extra_registrationA

Register for an extra item on a meal.

User must have a regular registration at that mess for that meal. Cannot be modified — delete and recreate if needed.

Args: params: auth_key/session, extra (item ID), meal_date, meal_type, meal_mess

Returns: JSON array of ExtraRegistrationInserted objects

Inputs: params (required). Returns: result

mess_create_monthly_registrationA

Register at a mess for an entire month.

Returns 409 if already registered, 403 if window closed or mess full.

Args: params: auth_key/session, month (1-12), year, mess (mess ID)

Returns: JSON MonthlyRegistration object

Inputs: params (required). Returns: result

mess_create_registrationA

Register the user for a meal at a specific mess on a date.

Use this when the user wants to book/register for breakfast, lunch, or dinner. Fails with 403 if the registration window is closed or the mess is full.

Args: params: auth_key/session, meal_date, meal_type, meal_mess, optional guests (int)

Returns: JSON MealRegistration on success, or 204 if already registered

Inputs: params (required). Returns: result

mess_delete_auth_keyA
DestructiveIdempotent

Delete an auth key by its name (not its value). Identified by name in the URL path.

Args: params: auth_key/session for auth, name = the friendly name of the key to delete

Returns: JSON status 204 on success

Inputs: params (required). Returns: result

mess_delete_extra_registrationB
DestructiveIdempotent

Delete an extra registration by its ID (passed as query param).

Args: params: auth_key/session, id (extra registration ID)

Returns: JSON array of remaining ExtraRegistration objects

Inputs: params (required). Returns: result

mess_delete_monthly_registrationA
DestructiveIdempotent

Delete a monthly mess registration (individual meal registrations are kept).

Returns 403 if window closed.

Args: params: auth_key/session, month (1-12), year

Returns: JSON status 204 on success

Inputs: params (required). Returns: result

mess_generate_reset_password_otpA

Send a password reset OTP to the given email. Only for MSIT/intern accounts.

Rate limited to once per minute. Returns 204 even if email is invalid.

Args: params: email address

Returns: JSON status 204 on success

Inputs: params (required). Returns: result

mess_get_all_billsA
Read-onlyIdempotent

Get bill breakdown for all months with a non-zero bill.

Includes food_bill, extras_bill, and infra_bill (all in paise). Divide by 100 to get rupees.

Args: params: auth_key or session

Returns: JSON array of { month, year, food_bill, extras_bill, infra_bill } — all in paise

Inputs: params (required). Returns: result

mess_get_all_windowsA
Read-onlyIdempotent

Get all window times in seconds: cancellation, registration, feedback, extras, skip.

Args: params: auth_key or session

Returns: JSON { cancellation_window, registration_window, feedback_window, extras_window, skip_window }

Inputs: params (required). Returns: result

mess_get_auth_key_infoB
Read-onlyIdempotent

Get info about the auth key currently in use (passed in Authorization header).

Args: params: auth_key (the key to inspect)

Returns: JSON AuthKey details. Returns 401/403 if the key is expired.

Inputs: params (required). Returns: result

mess_get_auth_keysA
Read-onlyIdempotent

Get all auth keys for the current user (including expired ones).

Args: params: auth_key or session

Returns: JSON array of AuthKey objects (name, user_id, created_at, expires_at)

Inputs: params (required). Returns: result

mess_get_billA
Read-onlyIdempotent

Get the user's mess bill for a month. Use to answer "how much do I owe?", "what's my bill?".

Amounts are in paise — divide by 100 for rupees. May include projected future meals.

Returns 404 if registrations haven't opened for that month.

Args: params: auth_key/session, optional month, optional year

Returns: JSON { non_projected: int, projected: int } — in paise (divide by 100 for rupees)

Inputs: params (required). Returns: result

mess_get_cancellations_countB
Read-onlyIdempotent

Get count of cancelled registrations for a meal in a month.

Args: params: auth_key/session, meal (required), optional month, optional year

Returns: JSON integer count

Inputs: params (required). Returns: result

mess_get_cancellation_windowB
Read-onlyIdempotent

Get the cancellation window time in seconds.

Args: params: auth_key or session

Returns: JSON integer (seconds)

Inputs: params (required). Returns: result

mess_get_capacitiesA
Read-onlyIdempotent

Get mess capacities for a meal on a date, grouped by category.

Args: params: meal (required), on (YYYY-MM-DD, optional)

Returns: JSON { category: [{ mess, available, capacity }] }

Inputs: params (required). Returns: result

mess_get_extras_in_rangeA
Read-onlyIdempotent

Get all extra registrations in a date range (max 2 months, both inclusive).

Args: params: auth_key/session, from (YYYY-MM-DD), to (YYYY-MM-DD)

Returns: JSON array of ExtraRegistration objects

Inputs: params (required). Returns: result

mess_get_extras_windowA
Read-onlyIdempotent

Get the extra registration window time in seconds.

Args: params: auth_key or session

Returns: JSON integer (seconds)

Inputs: params (required). Returns: result

mess_get_feedback_windowB
Read-onlyIdempotent

Get the feedback window time in seconds (time after a meal to submit feedback).

Args: params: auth_key or session

Returns: JSON integer (seconds)

Inputs: params (required). Returns: result

mess_get_infoA
Read-onlyIdempotent

Get info about all messes (name, short_name, color, tags, rating, billing_id). No auth required.

Returns: JSON array of MessInfo objects

Inputs: no named parameters. Returns: result

mess_get_max_cancellationsB
Read-onlyIdempotent

Get the maximum free cancellations allowed per month for a meal.

Args: params: auth_key/session, meal (required)

Returns: JSON integer

Inputs: params (required). Returns: result

mess_get_meB
Read-onlyIdempotent

Get the currently logged-in user's profile.

Args: params: auth_key or session

Returns: JSON User object (id, name, email, roll_number, token, attributes, tags)

Inputs: params (required). Returns: result

mess_get_meal_ratingA
Read-onlyIdempotent

Get the average rating for a meal at a mess on a date.

If mess is omitted, returns ratings keyed by mess ID. Ratings are only visible after the feedback window closes (403 otherwise).

Args: params: auth_key/session, meal (required), optional mess, optional date

Returns: JSON { rating: float, count: int } or { mess_id: { rating, count } }

Inputs: params (required). Returns: result

mess_get_meal_timingsA
Read-onlyIdempotent

Get meal timings (start/end times) for each mess on a date.

Args: params: optional on (YYYY-MM-DD), defaults to today

Returns: JSON { mess_id: [{ meal, start_time, end_time }] }

Inputs: params (required). Returns: result

mess_get_menusA
Read-onlyIdempotent

Get the food menu for all messes on a date. No auth required.

Use to answer "what's for lunch today?", "what's on the menu this week?", "what is [mess] serving for dinner?". Menu structure per mess: { day_name: { meal: [{ category, name }] } } Menus are stored week-wise (Sunday-anchored). effective_from always falls on a Sunday.

Args: params: on (YYYY-MM-DD, optional, defaults to today)

Returns: JSON array of { mess, updated_at, effective_from, days }

Inputs: params (required). Returns: result

mess_get_monthly_registrationA
Read-onlyIdempotent

Get the monthly mess registration for the current user.

Also returns snack availments for the month.

Args: params: auth_key/session, optional month (1-12), optional year

Returns: JSON { registration: MonthlyRegistration, snack_availments: [...] }

Inputs: params (required). Returns: result

mess_get_preferencesB
Read-onlyIdempotent

Get all user preferences.

Args: params: auth_key or session

Returns: JSON UserPreferences: notify_not_registered, notify_malloc_happened, auto_reset_token_daily, enable_unregistered, nag_for_feedback, skip_malloced

Inputs: params (required). Returns: result

mess_get_ratesA
Read-onlyIdempotent

Get mess rates (in paise) for a meal on a date, grouped by category.

Categories: registered, unregistered, guest, extra.

Args: params: meal (required), on (YYYY-MM-DD, optional)

Returns: JSON { category: [{ mess, day, rate }] } — rate in paise

Inputs: params (required). Returns: result

mess_get_registered_extrasB
Read-onlyIdempotent

Get extra item registrations for the current user for a meal on a date.

Args: params: auth_key/session, meal (required), optional date (YYYY-MM-DD)

Returns: JSON array of ExtraRegistration objects

Inputs: params (required). Returns: result

mess_get_registrationA
Read-onlyIdempotent

Look up the user's registration for a single date (defaults to today).

Use this to answer "am I registered for lunch today?", "what mess am I going to tonight?". Only returns active (non-cancelled) registrations. If meal is omitted, returns all meals for the date as { meal_type: MealRegistration }. If date is omitted, defaults to today.

Args: params: auth_key/session, optional meal, optional date (YYYY-MM-DD)

Returns: JSON MealRegistration or object keyed by meal name

Inputs: params (required). Returns: result

mess_get_registration_max_dateB
Read-onlyIdempotent

Get the maximum future date allowed for meal registration.

Args: params: auth_key or session

Returns: JSON date string (YYYY-MM-DD)

Inputs: params (required). Returns: result

mess_get_registrationsA
Read-onlyIdempotent

Look up what meals the user is registered for over a date range.

Use this to answer: "what am I eating today/tomorrow/this week?", "show my registrations", "which meals do I have booked?". Max range: 2 months. Both dates are inclusive.

Args: params: auth_key/session, from (YYYY-MM-DD), to (YYYY-MM-DD)

Returns: JSON array of MealRegistration objects (meal_date, meal_type, meal_mess, category, user_id, registered_at, cancelled_at, availed_at, availed_price, monthly_reg)

Inputs: params (required). Returns: result

mess_get_registration_windowB
Read-onlyIdempotent

Get the registration window time in seconds.

Args: params: auth_key or session

Returns: JSON integer (seconds)

Inputs: params (required). Returns: result

mess_get_scans_countA
Read-onlyIdempotent

Get meal availment (scan) count for a mess on a date. No authentication required.

Args: params: meal (required), mess (required), optional date (YYYY-MM-DD)

Returns: JSON { meal, mess, date, total: int, recent: int (last 10 min) }

Inputs: params (required). Returns: result

mess_get_skip_windowB
Read-onlyIdempotent

Get the skip window time in seconds.

Args: params: auth_key or session

Returns: JSON integer (seconds)

Inputs: params (required). Returns: result

mess_list_extrasA
Read-onlyIdempotent

List available extra items for a meal on a date.

Some extras (same ID) may be available across multiple meals.

Args: params: meal (required), optional date (YYYY-MM-DD), optional mess ID

Returns: JSON array of ExtraItem objects (id, name, description, rate in paise, mess, food_tags)

Inputs: params (required). Returns: result

mess_login_msitA

Login as an MSIT student or intern using email + password.

Args: params: user (email address), password

Returns: JSON User object. 'session_hint' contains the session cookie value to pass as 'session' in subsequent tool calls.

Inputs: params (required). Returns: result

mess_provide_feedbackA

Submit anonymous feedback for a meal. User must have availed the meal.

Returns 409 if feedback already submitted, 424 if meal not availed.

Args: params: auth_key/session, meal_date, meal_type, rating (1-5), optional remarks

Returns: JSON status 204 on success

Inputs: params (required). Returns: result

mess_reset_qr_tokenB

Reset the user's QR code token (shown at the mess counter).

Args: params: auth_key or session

Returns: JSON { token: string } — new URL-safe base64 token

Inputs: params (required). Returns: result

mess_skip_mealA
Idempotent

Mark a registration as skipped or unskipped.

Skipping = user likely won't attend but is still charged. Use when out of free cancellations.

Args: params: auth_key/session, meal_date, meal_type, meal_mess, skipping (bool)

Returns: JSON updated MealRegistration

Inputs: params (required). Returns: result

mess_uncancel_registrationA
Idempotent

Restore a previously cancelled meal registration.

Returns 424 if the registration was not cancelled.

Args: params: auth_key/session, meal_date, meal_type

Returns: JSON status 204 on success

Inputs: params (required). Returns: result

mess_update_preferencesA
Idempotent

Update all user preferences (full replacement — all 5 fields required).

Args: params: auth_key/session plus all 5 booleans: - notify_not_registered: remind before registration deadline - notify_malloc_happened: email on random meal allocation - auto_reset_token_daily: reset QR at 02:00 daily - enable_unregistered: allow on-spot availing at unregistered rates - nag_for_feedback: prompt after every availed meal - skip_malloced: auto-skip randomly allocated meals

Returns: JSON status 204 on success

Inputs: params (required). Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.6/5.0

    Scored across 45 tools

    Disambiguation4/5

    Most tools have distinct purposes, but there is some overlap between cancellation-related tools (e.g., mess_cancel_registration, mess_get_cancellations_count, mess_get_cancellation_window) and registration tools (e.g., mess_create_registration, mess_get_registration, mess_get_registrations), which could cause minor confusion. However, descriptions are clear enough to differentiate them in most cases.

    Naming Consistency5/5

    All tools follow a consistent 'mess_verb_noun' naming pattern with snake_case throughout, such as mess_create_registration and mess_get_auth_keys. This uniformity makes the tool set predictable and easy to navigate.

    Tool Count2/5

    With 45 tools, the count is excessive for a mess management system, making it cumbersome for agents to navigate. A more focused set of 10-20 tools would better cover the domain without overwhelming complexity.

    Completeness5/5

    The tool set provides comprehensive coverage for mess operations, including registration, cancellation, billing, authentication, preferences, and feedback. It supports full CRUD and lifecycle management with no apparent gaps for the domain.

    Maintenance

    ActivityMaintained
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables AI assistants to interact with Mealie for recipe management, meal planning, and shopping list operations. Supports searching and managing recipes, creating meal plans, and generating shopping lists from recipes or meal plans.
      7
      MIT
    • A
      license
      B
      quality
      D
      maintenance
      Enables AI assistants to interact with the IIIT Hyderabad Mess Management System through natural language, allowing students to view menus, manage meal registrations, check bills, submit feedback, and configure preferences.
      29
      11
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Provides 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.
      62 npm
      1
      MIT
    • A
      license
      A
      quality
      D
      maintenance
      Enables AI assistants to interact with the IIIT-H mess dining and marketplace systems through resources, tools, and prompts for meal planning, billing analysis, and registration modifications.
      27
      GPL 3.0