ParkAlert MCP
This server exposes Disney ride status and wait times as on-demand MCP tools, backed by the ThemeParks.wiki API.
get_ride_status: Check whether a Disney ride is currently operating, down, or closed, including standby wait and today's park hours.
get_wait_time: Get the current standby wait time in minutes for a Disney ride.
Supports six Disney parks: Magic Kingdom, EPCOT, Hollywood Studios, Animal Kingdom, Disneyland (CA), and California Adventure.
Accepts park names, aliases, or entity IDs, and matches ride names by partial or near-miss wording (e.g., "space mountain", "tron").
Returns resolved park/ride names, status codes with plain-English glosses, and wait times; distinguishes down/closed/virtual queue from no posted wait.
Ambiguous ride names return candidate matches instead of failing.
Runs over stdio and is designed for MCP clients like Claude Desktop.
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., "@ParkAlert MCP What's the standby wait for Rise of the Resistance at Hollywood Studios?"
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.
ParkAlert MCP
An MCP server that exposes Disney ride status and wait times as on-demand tools, backed by the ThemeParks.wiki API.
This is the pull-based sibling of ParkAlert,
a PWA that polls the same API on a timer and pushes a notification through ntfy.sh
when a ride goes down or comes back up. ParkAlert answers "tell me when something
changes." This server answers "what is the situation right now, because I just asked."
The API client is ported from ParkAlert's server/themeparks.js; the polling loop,
the transition detection, the trip codes, and the notification fan-out are all
deliberately left behind.
Tools
Tool | Arguments | Answers |
|
| Is this ride operating, down, or closed right now? |
|
| How long is the standby line right now? |
Both tools accept a park by name, alias, or ThemeParks.wiki entity ID ("Magic Kingdom", "dhs", "epcot"), and a ride by however a person would say it. Partial and near-miss names such as "space mountain" or "tron" are matched, and an ambiguous name comes back with the candidates it could have meant.
Supported parks: Magic Kingdom, EPCOT, Hollywood Studios, Animal Kingdom,
Disneyland (CA), California Adventure. Add more by appending to PARKS in
src/parkalert_mcp/parks.py.
Related MCP server: mcp-themeparks
Setup
Requires Python 3.10 or newer, which is the mcp SDK's floor. Note that the
system python3 on macOS may well be older than that, so name the interpreter
explicitly rather than relying on whatever python3 resolves to.
python3.12 -m venv .venv
.venv/bin/pip install -e .requirements-lock.txt records the exact versions this server is known to work
against, captured from a working environment. It exists because the dependency
that matters here is a moving target: mcp 2.0 renamed FastMCP to MCPServer,
so a rebuild that quietly resolved to a different major version would fail at
import with no hint as to why. To reproduce the known-good environment instead of
resolving fresh versions:
python3.12 -m venv .venv
.venv/bin/pip install -r requirements-lock.txt
.venv/bin/pip install --no-deps -e .Regenerate the lockfile after changing dependencies:
.venv/bin/pip freeze --exclude-editable > requirements-lock.txtThe --exclude-editable flag is load-bearing. A plain pip freeze writes this
project back out as a -e git+https://...@<commit> line, which would send a
future rebuild off to clone the repository rather than installing the checkout
already in hand.
Tests
.venv/bin/pip install -e ".[dev]"
.venv/bin/python -m pytestThe suite covers the two functions that decide what a caller's words mean:
find_attraction in themeparks.py and resolve_park in parks.py. Both run
offline, against a capture of real Magic Kingdom and EPCOT attraction data frozen
in tests/conftest.py. The tests therefore describe the matching rules and their
precedence, not today's ride list, and a ride opening or closing upstream will not
turn them red.
One test does reach the network. It fetches /live for all six park entity IDs
and asserts that each still returns attractions, which is precisely the failure
the offline tests cannot see. It is marked network and deselected by default,
so it runs only when asked for:
.venv/bin/python -m pytest -m networkRunning it
The server speaks stdio, so it is launched by its client rather than run as a long-lived service. To exercise it by hand:
.venv/bin/python -m parkalert_mcp.serverFor an interactive tool browser, the MCP Inspector works against the same command:
npx @modelcontextprotocol/inspector .venv/bin/python -m parkalert_mcp.serverClaude Desktop
Add the server to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"parkalert": {
"command": "/Users/austin/parkalert-mcp/.venv/bin/python",
"args": ["-m", "parkalert_mcp.server"]
}
}
}The absolute path to the venv's Python matters: Claude Desktop does not run through
a login shell, so a bare python would not resolve to this environment. Restart
Claude Desktop after editing, then look for the tools under the connectors icon.
Credits
Built by Austin Vodrazka with Claude.
Available Tools
2 toolsget_ride_statusA
Check whether a Disney ride is currently operating, down, or closed.
Use this for "is X broken / open / running right now" questions. Returns the live status straight from ThemeParks.wiki along with the ride's current standby wait and today's park hours for context.
Args: park: Park name, alias, or ThemeParks.wiki entity ID. One of: Magic Kingdom, EPCOT, Hollywood Studios, Animal Kingdom, Disneyland (CA), California Adventure. ride: Attraction name as a person would say it; near-misses and partial names such as "space mountain" or "tron" are matched.
Returns: A dict with the resolved park and ride names, the status code and a plain-English gloss of it, the standby wait in minutes (None when the ride is not posting one), and today's opening/closing times.
Inputs: park (required), ride (required).
get_wait_timeA
Get the current standby wait time, in minutes, for a Disney ride.
Use this for "how long is the line for X" questions. This is the posted standby wait only; Lightning Lane and virtual queue times are not included.
Args: park: Park name, alias, or ThemeParks.wiki entity ID. One of: Magic Kingdom, EPCOT, Hollywood Studios, Animal Kingdom, Disneyland (CA), California Adventure. ride: Attraction name as a person would say it; near-misses and partial names such as "space mountain" or "tron" are matched.
Returns:
A dict with the resolved park and ride names, the standby wait in
minutes, and the ride's status. wait_time_minutes is None when no wait
is posted, which is normal for a ride that is down, closed, or run as a
walk-up or virtual queue; check status to tell those apart.
Inputs: park (required), ride (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 2 tools
The two tools accept the same park/ride arguments and both return status plus wait time, so an agent could reasonably pick either for a wait or status question. However, the descriptions clearly steer status checks to get_ride_status and wait-time questions to get_wait_time, reducing confusion.
Both tools follow the same get_<resource>_<metric> pattern: get_ride_status and get_wait_time. The naming is predictable and mirrors the two core queries perfectly.
Two tools is on the thin side for a general-purpose MCP server, but the scope is intentionally narrow: live Disney ride status and standby wait times. The count feels minimal but not unreasonable for that focused domain.
The core domain is covered: agents can check whether a ride is operating, down, or closed, and get standby wait minutes with status context to interpret Nones. Minor gaps exist, such as no way to list all rides in a park, but the main user intents are served.
Related MCP Connectors
Live Disney World & Disneyland wait times, dining drop alerts & Lightning Lane auto-booker.
Live ride status and wait times at 140 theme parks, with local time and weather.
Live Disney and Universal waits, Lightning Lane, best times, ride facts and crowds from Parky.
Live Walt Disney World waits, crowd forecasts, Lightning Lane sellouts and prices, dining drop odds.
Related MCP Servers
- AlicenseAqualityBmaintenanceProvides access to Disney parks data including attractions, dining locations, height requirements, Lightning Lane status, and other park information for Walt Disney World and Disneyland resorts through structured queries and fuzzy search.72MIT
- AlicenseNot gradedqualityCmaintenanceEnables access to live theme park wait times, schedules, and attraction data from ThemeParks.wiki.298 npmMIT
- AlicenseNot gradedqualityDmaintenanceEnables management of Atlassian Statuspage incidents, components, and subscribers through natural language.MIT
- AlicenseNot gradedqualityBmaintenanceEnables querying 80+ theme parks and destinations worldwide for their attractions, live ride wait times and statuses, and operating hours or show schedules through the ThemeParks parksapi library.MIT