Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
LOG_LEVELNoPython logging level (default: INFO). Logs go to stderr.INFO
RACHIO_ACCESS_TOKENYesLong-lived bearer token minted by rachio-mcp-token. Valid for ~25 years unless revoked.

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
list_devicesA

List all Rachio devices on the account.

Includes sprinkler controllers (type = CONTROLLER_GEN1/2/3 or CONTROLLER_VIRTUAL), linked sensors (SENSOR_LINKED, e.g. rain/flow sensors wired into a controller), wireless flow sensors (WIRELESS_FLOW_SENSOR), and virtual weather stations (WEATHER_STATION_VIRTUAL). Filter by type client-side if you only want the irrigation controllers.

Returns a JSON object with devices — a list of device summaries including id, type, name, location_id, and geo_point. Use get_device for full details.

get_deviceA

Get full details + live state for a single device.

Combines the static device info (model, serial, firmware, linked sensors, USDA hardiness zone, Koppen climate code, etc.) with live state (current zone run, standby, rain delay status). Linked sensors and virtual weather stations don't have a live-state record, so the state field will be null for those.

Args: device_id: Device UUID from list_devices.

list_zonesA

List all zones configured on a controller.

Each zone summary includes zone_detail (soil type, nozzle type, crop/plant, available water, root depth, slope, sun exposure, area, enabled flag, zone number) and zone_state (live state if any).

Args: device_id: Controller UUID (must be a CONTROLLER_GEN* device). include_extra: Ask the server to populate extra diagnostic fields. include_moisture: Include per-zone moisture data.

get_zoneA

Get full zone detail + live state.

Returns a single zone's agronomic configuration (soil, nozzle, crop/plant, root depth, efficiency, etc.) and any live state.

Args: zone_id: Zone UUID from list_zones. force_imperial: If true, units are returned in imperial (inches, sqft). If false, metric is used.

get_calendarA

Return scheduled runs and skip events for a device in a date range.

Useful for 'what's going to water this week?' or 'what did Rachio actually run last weekend?'. The response includes both runs (with per-zone durations and start times) and skips (climate- skip, rain-delay, manual skips).

Args: device_id: Controller UUID. start: Start date, ISO YYYY-MM-DD (default: today). end: End date, ISO YYYY-MM-DD (default: today + 14 days).

get_run_historyA

Return recent/past watering history for a controller.

This is the best first tool for questions like "what ran today?", "when did this controller water recently?", or "did anything skip?". The response includes controller-observed actual_zone_runs plus Rachio calendar_runs/skips for calendar context. Calendar events may not include every completed scheduled run; observed telemetry is the source of truth for what actually watered and is limited to the latest run per zone. For schedule-specific audit trails, use get_schedule_runs after discovering a schedule id.

Args: device_id: Controller UUID. start: Start date, ISO YYYY-MM-DD (default: today - 7 days). end: End date, ISO YYYY-MM-DD (default: tomorrow, so all of today is included).

get_active_alertsA

Return unresolved alerts for a device or a specific zone.

Alerts include things like low flow, high current, freeze skip, rain skip, hardware faults. Exactly one of device_id or zone_id must be supplied.

Args: device_id: Controller UUID to query alerts for. zone_id: Zone UUID to query alerts for.

get_weatherA

Return observed + forecast weather readings for a location.

Each reading includes temperature range, precipitation (observed and probability of), humidity, wind, and ET (evapotranspiration). Used by Rachio's climate-skip logic.

Args: location_id: Location UUID (from a device's location_id field). start: Start date, ISO YYYY-MM-DD (default: today - 3 days). end: End date, ISO YYYY-MM-DD (default: today + 7 days).

list_schedulesA

List schedules matching exactly one filter.

device_id: all schedules on a controller. location_id: all schedules at a property (across devices). zone_id: all schedules that include a given zone. schedule_id: fetch a single schedule by id (1-element result).

Exactly one argument must be supplied.

get_scheduleA

Get a single schedule plus the locations/devices it runs on.

Returns schedule (the full Schedule proto — criteria, restriction criteria, zone list, runtime flags, enabled state, summary) plus locations_and_devices (which property and controllers it spans).

Args: schedule_id: Schedule UUID from list_schedules.

preview_scheduleA

Server-side dry-run of create_schedule. Does NOT persist anything.

Returns the same Schedule that create_schedule would produce, including the server-generated human-readable summary like 'Every Monday and Thursday at 5:00 AM'. Always call this first and verify the summary + zone breakdown before calling create_schedule.

Args: name: Schedule display name, e.g. "Summer Lawn". zones: List of zone entries. Each must be a dict with keys: device_id (str), zone_id (str), watering_time (int seconds), optionally order_id (int, defaults to list position + 1), flex_aggression_coefficient (float, flex only), flex_runtime_coefficient (float, flex only). schedule_type: FIXED (default), FLEX_MONTHLY, or FLEX_DAILY. start_time: Daily start time HH:MM, e.g. "05:00". Use this for fixed clock-time schedules. start_sun: "SUNRISE" or "SUNSET" to anchor to solar time instead of a clock time. Provide at most one of start_time or start_sun. days: Days of week for FIXED schedules, e.g. ["MON", "THU"]. Names accept MON/TUE/WED/THU/FRI/SAT/SUN (case-insensitive). Omit for schedules that run every day within the date window. annual_start: Recurring-yearly window start, MM-DD (e.g. "06-15" for mid-June). Use for seasonal schedules. annual_end: Recurring-yearly window end, MM-DD. smart_cycle: Let Rachio auto-calculate cycle and soak based on each zone's soil/slope/nozzle. cycle_soak: Enable manual cycle + soak. Combine with cycle_time_seconds and soak_time_seconds. cycle_time_seconds: Length of each watering cycle (seconds). soak_time_seconds: Rest interval between cycles (seconds). zone_delay_time_seconds: Delay between zones in the sequence. rain_delay_enabled: Skip runs after significant rain. freeze_delay_enabled: Skip runs when temp drops below freezing. wind_delay_enabled: Skip runs during high wind. climate_skip: Skip runs when climate/ET data suggests enough moisture is present. seasonal_shift: Seasonally adjust runtimes up/down.

create_scheduleA

Create a new schedule. Persists to the Rachio backend.

Strongly recommended: call preview_schedule with the same arguments first and review the returned summary before calling this. Every argument has the same meaning as in preview_schedule; see that tool's docstring for field details.

Args: name: Schedule display name. zones: List of zone entries; see preview_schedule for shape. schedule_type: FIXED, FLEX_MONTHLY, or FLEX_DAILY. enabled: Whether the schedule starts enabled (default true). start_time: Daily start time HH:MM. start_sun: "SUNRISE" or "SUNSET". days: Days of week, e.g. ["MON", "WED", "FRI"]. annual_start: Annual window start MM-DD. annual_end: Annual window end MM-DD. smart_cycle: Let Rachio auto-calculate cycle/soak. cycle_soak: Enable manual cycle+soak. cycle_time_seconds: Cycle length in seconds. soak_time_seconds: Soak duration in seconds. zone_delay_time_seconds: Delay between zones. rain_delay_enabled: Enable rain-delay skipping. freeze_delay_enabled: Enable freeze-delay skipping. wind_delay_enabled: Enable wind-delay skipping. climate_skip: Enable climate/ET skipping. seasonal_shift: Enable seasonal runtime adjustment.

update_scheduleA

Partial-merge update of an existing schedule.

Only the fields you pass are changed. The current schedule is read first and your changes are overlaid onto its existing timing, restrictions, and zones, then sent as a single update — so omitting an argument leaves that aspect untouched. Field meanings match create_schedule / preview_schedule.

Recommended: call get_schedule first to review current values.

Args: schedule_id: Schedule UUID to update. name: New display name. enabled: New enabled state. schedule_type: FIXED, FLEX_MONTHLY, or FLEX_DAILY. start_time: Daily start time HH:MM (mutually exclusive with start_sun; supplying one replaces the other). start_sun: "SUNRISE" or "SUNSET". days: Days of week, e.g. ["MON", "WED", "FRI"]. Replaces the existing day restriction. Pass [] to clear it. annual_start: Annual window start MM-DD. Pass "" to clear. annual_end: Annual window end MM-DD. Pass "" to clear. smart_cycle: Let Rachio auto-calculate cycle/soak. cycle_soak: Enable manual cycle+soak. cycle_time_seconds: Cycle length in seconds. soak_time_seconds: Soak duration in seconds. zone_delay_time_seconds: Delay between zones. rain_delay_enabled: Enable rain-delay skipping. freeze_delay_enabled: Enable freeze-delay skipping. wind_delay_enabled: Enable wind-delay skipping. climate_skip: Enable climate/ET skipping. seasonal_shift: Enable seasonal runtime adjustment. zones: Zone entries to add or update, matched on device_id + zone_id. Each dict needs device_id and zone_id; watering_time (seconds) is required for new zones and optional when updating an existing one. Optional order_id, flex_aggression_coefficient, flex_runtime_coefficient. zone_ids_to_remove: Zone UUIDs to drop from the schedule.

delete_scheduleA

Permanently delete a schedule. This cannot be undone.

Args: schedule_id: Schedule UUID to delete.

copy_scheduleA

Duplicate an existing schedule. Returns the new Schedule.

Useful for creating seasonal variants from an existing template — copy, then update_schedule to rename.

Args: schedule_id: Schedule UUID to copy.

run_scheduleA

Start an immediate run of the schedule right now.

Returns the list of device_ids the run was dispatched to.

Args: schedule_id: Schedule UUID to run.

skip_scheduleA

Toggle the skip-next-run flag on a schedule.

disabled=true skips the schedule's next run; disabled=false re-arms it. Applies only to the next occurrence.

Args: schedule_id: Schedule UUID. disabled: True to skip next run, False to re-enable it.

get_schedule_runsA

Return past runs + skips for a schedule in a date range.

Useful for auditing 'did my Summer Lawn actually water last week?'.

Args: schedule_id: Schedule UUID. start: Start date ISO YYYY-MM-DD (default: today - 30 days). end: End date ISO YYYY-MM-DD (default: today).

stop_wateringA

Stop all watering currently in progress on the device.

If nothing is running, this is a no-op.

Args: device_id: Controller UUID.

start_zonesA

Start a manual run of one or more zones in sequence.

zones is a list of {"zone_number": <int>, "duration": <seconds>}. zone_number is the 1-based hardware slot visible on the controller (not the zone UUID). Find it via list_zones -> each entry's zone_detail.zone_number.

Args: device_id: Controller UUID. zones: List of {zone_number, duration} dicts. cycle_soak: Apply cycle-and-soak to the run. cycle_duration_seconds: Cycle length when cycle_soak is true. soak_duration_seconds: Soak gap when cycle_soak is true.

set_rain_delayA

Set a rain-delay expiration for the device.

The device will not run any schedules until the given time. Pass an ISO-8601 datetime (2026-05-01T00:00:00Z) or 1970-01-01T00:00:00Z to cancel an existing delay.

Args: device_id: Controller UUID. expiration: ISO-8601 datetime when the delay expires.

skip_current_zoneA

Skip to the next zone in the currently-running schedule.

Does nothing if no schedule is running.

Args: device_id: Controller UUID.

pause_wateringA

Pause the currently-running zone for seconds.

Use resume_watering to continue before the pause expires; otherwise the run resumes automatically after seconds elapse.

Args: device_id: Controller UUID. seconds: How long to pause (1 to 3600).

resume_wateringC

Resume a paused zone run.

Args: device_id: Controller UUID.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/rwestergren/rachio-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server