rachio-mcp
Click on "Install 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., "@rachio-mcplist my Rachio devices and zones"
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.
rachio-mcp
An MCP (Model Context Protocol) server for Rachio sprinkler controllers, built on the reverse-engineered Android-app gRPC API.
The public Rachio API exposes only read-only access to schedules and a handful of single-action endpoints. This server instead talks to the same internal gRPC backend (cloud.rach.io:443) that the official mobile app uses, giving an agent the full set of operations: listing devices and zones, inspecting schedules, creating and previewing new schedules, updating and deleting them, starting and stopping manual zone runs, setting rain delays, and more.
⚠️ Unofficial. This server uses a reverse-engineered API. It works as of Rachio Android v4.21.18 and is not supported by Rachio. The schema can change without notice.
Features
Devices and zones — list controllers, sensors, and weather stations; inspect zone soil/nozzle/plant configuration and live state
Schedules — list, read, preview (dry-run), create, update, delete, copy, run, and skip schedules
Live control — stop watering, run specific zones manually, set rain delays, skip/pause/resume the currently-running zone
Context — calendar of upcoming runs, recent/past run history, active alerts, observed/forecast weather readings
Related MCP server: fireboard-mcp
Quick Start
1. Install uv
curl -LsSf https://astral.sh/uv/install.sh | sh2. Mint a long-lived access token
The MCP server itself never sees your Rachio password. Instead you mint a long-lived (~25-year) access token once, and supply only the token to the MCP client.
uvx --from rachio-mcp rachio-mcp-tokenIt will prompt for your Rachio email and password, then print a RACHIO_ACCESS_TOKEN value to paste into your MCP client config. The token remains valid until you change your password or explicitly log out from another device.
Or, if you'd rather have the commands on your PATH permanently, install once:
uv tool install rachio-mcpThen rachio-mcp-token (and rachio-mcp itself) are available as regular commands.
For scripting (e.g. pipe into a password manager):
RACHIO_EMAIL=you@example.com RACHIO_PASSWORD=... \
uvx --from rachio-mcp rachio-mcp-token --json | jq .access_token3. Configure your MCP client
uvx downloads and runs the server on demand — no separate install step required.
OpenCode (opencode.json)
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"rachio": {
"type": "local",
"command": ["uvx", "rachio-mcp"],
"environment": {
"RACHIO_ACCESS_TOKEN": "{env:RACHIO_ACCESS_TOKEN}"
},
"enabled": true
}
}
}Claude Desktop (claude_desktop_config.json)
{
"mcpServers": {
"rachio": {
"command": "uvx",
"args": ["rachio-mcp"],
"env": {
"RACHIO_ACCESS_TOKEN": "paste-your-token-here"
}
}
}
}If a tool call later returns a "token rejected" error, rerun rachio-mcp-token to mint a fresh one and update the config.
Available Tools
24 tools over stdio transport.
Discovery
Tool | Description |
| Every device on the account — controllers, sensors, weather stations |
| Full details + live state for a single device |
| Zones configured on a controller, with agronomic metadata |
| Full detail for a single zone |
| Scheduled runs + skip events for a date range |
| Observed recent/past zone-run telemetry plus calendar context |
| Unresolved alerts on a device or zone |
| Observed + forecast weather readings for a location |
Schedule CRUD
Tool | Description |
| Filter by device, location, zone, or schedule id |
| Single schedule + its locations/devices |
| Dry-run — returns the Schedule that |
| Create a new schedule |
| Partial-merge edit: name, enabled, timing/criteria, day restrictions, and per-zone add/update/remove |
| Permanent, destructive |
| Duplicate an existing schedule |
| Trigger an immediate run |
| Skip or re-arm the next scheduled run |
| Past runs + skip events for a schedule |
Live controller ops
Tool | Description |
| Stop whatever is running |
| Start one or more zones manually by zone number + duration |
| Defer all schedules until a given time |
| Skip to the next zone in the active run |
| Pause the current zone for N seconds |
| Resume a paused run |
All device_id, zone_id, schedule_id, and location_id parameters are UUIDs obtained from the list_* tools. Dates use YYYY-MM-DD (or MM-DD for annual-recurring schedules); times use HH:MM.
Recommended Workflow for Schedule Changes
list_devices→ pick your controllerlist_zones(device_id=...)→ note each zone's id andzone_numberlist_schedules(device_id=...)andget_schedule(schedule_id=...)→ understand what's already configuredpreview_schedule(...)→ dry-run your proposed schedule. Read the returnedsummarystring and the per-zone breakdowncreate_schedule(...)(same arguments) → commitget_schedule(schedule_id=<new>)→ confirmdelete_schedule(schedule_id=<new>)→ rollback if needed
preview_schedule is safe to call repeatedly — it never writes anything.
To edit an existing schedule instead of recreating it, use update_schedule. It performs a partial merge: read the schedule with get_schedule, then pass only the fields you want to change (name, enabled, timing/criteria, days, or zones/zone_ids_to_remove). Omitted fields are left untouched.
How It Works
This server talks to cloud.rach.io:443 over TLS-protected gRPC, the same backend used by the Rachio Android app. Authentication uses the OAuth 2 password grant against oauth.rach.io/oAuth/token with the Android app's hardcoded client credentials.
The gRPC .proto definitions were recovered by decompiling the Rachio Android APK (v4.21.18) with jadx, extracting the embedded FileDescriptorProto payloads from the generated Java classes, and round-tripping them through protoc to produce clean .proto source. Pre-compiled Python stubs for the 40-odd messages/services used by the 23 MCP tools ship in src/rachio_mcp/proto/.
Regenerate those stubs any time the app's proto surface changes:
scripts/build_protos.shThe stub generator reads from reverse-engineering/protos/, which is not shipped in the wheel but is kept alongside the source for future updates.
Python API
The MCP server wraps a standalone client you can use directly:
from rachio_mcp import RachioClient
c = RachioClient()
# Discovery
for d in c.list_devices():
print(d["type"], d["id"], d.get("name"))
# Preview a proposed schedule
preview = c.preview_schedule(
name="Fall Lawn",
schedule_type="FIXED",
zones=[
{"device_id": "<controller>", "zone_id": "<zone>", "watering_time": 1200},
],
start_time="06:00",
days=["WED"],
annual_start="09-16",
annual_end="11-15",
smart_cycle=True,
)
print(preview["summary"])
# Commit
created = c.create_schedule(name="Fall Lawn", ...)
print("created", created["id"])
# Rollback
c.delete_schedule(created["id"])The client reads RACHIO_ACCESS_TOKEN from the environment, derives the user's user_id lazily on first use (via LocationService.ListLocations), and keeps both in memory for the lifetime of the process. Nothing is written to disk.
Environment
Variable | Required | Description |
| Yes | Long-lived bearer token minted by |
| No | Python logging level (default: INFO). Logs go to stderr; stdio transport's stdout is reserved for the MCP protocol. |
Minting a token (one-time setup)
Variable | Used by | Description |
|
| Rachio account email. If unset, |
|
| Rachio account password. If unset, |
Neither RACHIO_EMAIL nor RACHIO_PASSWORD is ever read by the MCP server itself — they exist only to feed the one-time token-mint CLI.
Transport
stdio only. Remote HTTP with OAuth 2.1 is not supported in v0.1.
License
MIT — see LICENSE.
Available Tools
24 toolscopy_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.
| Name | Required | Description | Default |
|---|---|---|---|
| schedule_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate mutation (readOnlyHint=false) and non-destructiveness (destructiveHint=false). Description adds that it returns a new Schedule, which aligns. No contradictions, but lacks detail on side effects or parameter constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences plus arg list, no wasted words. Front-loaded with core action. Ideal structure for quick comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With output schema present and one parameter fully described, the tool is completely specified. Sibling list provides context for alternative tools. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema provides only type and title ('Schedule Id'), while description adds 'Schedule UUID to copy', clarifying the parameter's purpose. With 0% schema coverage, the description compensates well for a single parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Duplicate an existing schedule' with specific verb and resource. Differentiates from siblings like create_schedule and update_schedule by suggesting a workflow: copy then update to rename.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly mentions use case: 'creating seasonal variants from an existing template' and suggests pairing with update_schedule. Lacks explicit when-not-to-use, but context is sufficient given sibling tool list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| name | Yes | ||
| zones | Yes | ||
| enabled | No | ||
| start_sun | No | ||
| annual_end | No | ||
| cycle_soak | No | ||
| start_time | No | ||
| smart_cycle | No | ||
| annual_start | No | ||
| climate_skip | No | ||
| schedule_type | No | FIXED | |
| seasonal_shift | No | ||
| soak_time_seconds | No | ||
| cycle_time_seconds | No | ||
| rain_delay_enabled | No | ||
| wind_delay_enabled | No | ||
| freeze_delay_enabled | No | ||
| zone_delay_time_seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states that the tool 'Persists to the Rachio backend', disclosing its write behavior. Annotations confirm readOnlyHint=false, destructiveHint=false, and idempotentHint=false, which are consistent. The description adds value by noting the persistence effect, but could further describe side effects or post-conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a brief intro, a key usage paragraph, and a bulleted parameter list. It front-loads the purpose and critical recommendation. Minor redundancy ('Every argument has the same meaning as in preview_schedule' appears twice) slightly reduces conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (19 parameters, 1 recommended sibling), the description provides parameter details, usage guidance, and behavioral context. The presence of an output schema relieves the need for return value documentation. Minor gaps: no mention of error conditions or authentication requirements, but still fairly complete for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema description coverage at 0%, the description compensates thoroughly by listing all 19 parameters in a clear Args block with meanings, types, and defaults. It even references preview_schedule for nested structures (zones). This provides complete semantic coverage beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Create a new schedule' with a specific verb and resource. It distinguishes from sibling tools like preview_schedule, update_schedule, delete_schedule, etc., as it explicitly mentions creation and persistence.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description strongly recommends calling preview_schedule with the same arguments before creating, providing clear usage context. It also indicates that field details are covered in preview_schedule's docstring. However, it does not explicitly state when not to use this tool (e.g., when updating or deleting is more appropriate).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_scheduleADestructive
Permanently delete a schedule. This cannot be undone.
Args: schedule_id: Schedule UUID to delete.
| Name | Required | Description | Default |
|---|---|---|---|
| schedule_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true. The description adds 'cannot be undone,' reinforcing permanence, but no additional behavioral traits like associated data deletion or permission requirements are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very short and front-loaded with key info. The Args section is redundant with the schema but adds minor clarity. No wasted sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple destructive operation with one parameter and an output schema, the description covers the essential: what it does and the input. Missing return value details are covered by the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It describes schedule_id as 'Schedule UUID to delete,' which adds basic meaning beyond the schema's title and type, but lacks format or constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool permanently deletes a schedule, using a specific verb and resource. It is distinct from sibling tools like create, update, or copy, which perform different operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., skipping a schedule, disabling it). No prerequisites or when-not-to-use conditions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_active_alertsARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| zone_id | No | ||
| device_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true; description adds context on what alerts include (low flow, high current, etc.) and the one-of constraint. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise with 4 sentences and a list, no filler. Structure is front-loaded with purpose, then parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has only 2 parameters and an output schema, the description covers purpose, constraints, parameter meanings, and example alert types. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but description provides meaningful docstrings for both parameters, specifying they are UUIDs for controller and zone respectively.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns unresolved alerts for a device or zone, with specific examples of alert types. It is distinct from sibling tools like get_device or get_zone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states that exactly one of device_id or zone_id must be supplied, providing clear usage constraint. Does not explicitly differentiate from siblings, but purpose is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_calendarARead-onlyIdempotent
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).
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| start | No | ||
| device_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, idempotentHint, destructiveHint. Description adds behavioral context on response contents (runs with per-zone details, skips) without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four concise sentences that front-load the core function, then provide context, response details, and parameter listing. No redundant wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given annotations, input schema, and existence of output schema, the description covers all needed context: purpose, usage, parameters, and response overview.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All three parameters are described: device_id as Controller UUID, start and end as ISO dates with default values. Schema coverage is 0%, so description fully compensates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it returns scheduled runs and skip events for a device in a date range. Includes specific use cases to illustrate intent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear use cases like 'what's going to water this week?' but does not explicitly differentiate from siblings like get_schedule_runs. Still highly informative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_deviceARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| device_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the safety profile is clear. The description adds value by explaining the combination of static and live state, and the null state condition, providing behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (about 5 lines), well-structured with a main paragraph and an Args section. It is front-loaded with the core purpose and avoids unnecessary details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description does not need to explain return values. It covers input, the scope of details (static and live state), and edge cases (null state), making it complete for a single-device retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explains that device_id is a 'Device UUID from list_devices,' adding meaning to the parameter beyond the schema's type and title. This is especially valuable given 0% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Get full details + live state for a single device,' clearly identifying the action (get) and resource (device). It distinguishes itself from siblings like list_devices (multiple devices) and get_zone (different resource).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context about when state is null (linked sensors, virtual weather stations), offering practical usage guidance. However, it does not explicitly mention when to use this tool versus alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_run_historyARead-onlyIdempotent
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).
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| start | No | ||
| device_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds context beyond annotations: explains response includes actual_zone_runs and calendar_runs/skips, notes limitations (calendar events may be incomplete, observed telemetry is source of truth, limited to latest run per zone). No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very concise with clear structure: one-line purpose, usage guidance, response explanation, parameter list. Every sentence adds value, no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a read-only history tool with output schema. Covers return value nature, limitations, defaults, and references sibling tool. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema coverage, description fully explains all three parameters: device_id as 'Controller UUID', start and end with ISO format and default values (today - 7 days for start, tomorrow for end). Compensates for schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'return' and resource 'watering history for a controller.' It distinguishes from sibling tool get_schedule_runs by specifying when to use that alternative for schedule-specific audit trails.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says it's the best first tool for questions like 'what ran today?', 'when did this controller water recently?', or 'did anything skip?'. Also directs to use get_schedule_runs for schedule-specific audits.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_scheduleARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| schedule_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint. Description adds value by detailing the return structure (schedule proto contents, locations_and_devices) without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise paragraphs with no fluff. The first paragraph states the purpose and output, the second clarifies the parameter. Efficiently front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, read-only, output schema exists), the description fully covers what an agent needs: what it does, what it returns, and where the parameter comes from.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has one parameter with 0% description coverage. Description fully compensates by explaining the parameter's purpose ('Schedule UUID from list_schedules'), providing complete semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it retrieves a single schedule and its associated locations/devices. Lists the components of the schedule (criteria, restriction criteria, etc.) and provides parameter context from list_schedules, distinguishing it from sibling tools like list_schedules and get_device.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides parameter guidance (schedule_id from list_schedules) and implies use for specific schedule retrieval. Could be more explicit about when not to use it or alternatives like preview_schedule, but adequate for a simple read tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_schedule_runsARead-onlyIdempotent
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).
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| start | No | ||
| schedule_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, etc., so no contradiction. The description adds that it returns runs and skips within a date range, which is meaningful behavioral context beyond annotations. It does not add details on rate limits or other traits, but given the strong annotation coverage, this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences plus parameter list, front-loaded with purpose. The example usage is efficient and adds value without fluff. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema (so return values don't need explanation) and annotations are strong, the description covers purpose, parameters, and a use case. It is complete for a simple read-only query tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description fully compensates. It explains 'schedule_id' as 'Schedule UUID', and specifies 'start' and 'end' dates with ISO format and defaults ('today - 30 days' and 'today'). This adds clear meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns 'past runs + skips for a schedule in a date range', using specific verbs and resources. It distinguishes itself from siblings like 'get_run_history' and 'get_schedule' by focusing on runs and skips for a single schedule with date filtering.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a concrete use case ('did my Summer Lawn actually water last week?') and specifies default date ranges, giving clear context for when to use. However, it doesn't explicitly mention when not to use or compare to similar siblings like 'get_run_history', so it's slightly incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_weatherARead-onlyIdempotent
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).
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| start | No | ||
| location_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, idempotentHint, and openWorldHint, so the description only needs to add context beyond that. It does so by detailing the returned fields and the tool's purpose in climate-skip logic, providing value without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear first sentence summarizing the tool, a list of included fields, a usage note, and parameter documentation. It is slightly verbose but front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers parameter semantics, output content, and a use case. Since an output schema exists, return value details are not needed. It lacks error handling or rate limit info, but for a simple weather read tool with good annotations, it is adequately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must fully compensate. It manually documents all three parameters: location_id (source and UUID format), start (ISO YYYY-MM-DD with default), and end (ISO YYYY-MM-DD with default). This adds significant meaning beyond the schema's type definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Return') and resource ('observed + forecast weather readings for a location'), lists the included data elements (temperature, precipitation, humidity, wind, ET), and distinguishes the tool from siblings (no other weather tools). It also notes its use in 'Rachio's climate-skip logic,' adding unique context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains default date ranges and that location_id comes from a device's location_id field, implying when to use this tool (to get weather data for a device). It does not explicitly exclude scenarios, but with no alternative weather tools, this is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_zoneARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| zone_id | Yes | ||
| force_imperial | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint false. The description adds that it returns 'live state', indicating real-time data (consistent with openWorldHint), and details the return content (configuration and state). No contradictions or omissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: a one-line summary, a list of returned fields, and parameter explanations. No redundant words; every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with annotations covering safety and an output schema (not shown), the description adequately covers purpose, parameters, and return content. No missing critical information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 0% of parameter descriptions. The description fully compensates by explaining zone_id as a UUID from list_zones and force_imperial's effect on unit system (imperial vs metric). This provides complete semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves full zone detail and live state for a single zone, distinguishing it from sibling tools like list_zones (list all zones) or get_device (device info). The verb 'Get' and resource 'zone' are specific, and the listed fields (soil, nozzle, crop/plant, etc.) provide concrete detail.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by noting zone_id comes from list_zones, guiding the agent to first list zones. It does not explicitly exclude other tools or state when not to use it, but the hint is clear enough for an AI agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_devicesARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. Description adds useful context about device types and return format, but does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured: opens with purpose, then lists device types, filtering guidance, return format, and sibling reference. Every sentence adds value, no waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters, annotations covering safety, and output schema present, the description fully explains what the tool returns and how to use it. Complete for a list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters; baseline 4 applies. Description adds no param info, which is acceptable given zero parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool lists all Rachio devices, enumerates types, and distinguishes from get_device which provides full details. Specific verb+resource with scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly suggests filtering by type client-side for irrigation controllers and recommends get_device for full details. Provides clear context on when to use vs alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_schedulesARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| zone_id | No | ||
| device_id | No | ||
| location_id | No | ||
| schedule_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the tool's behavioral safety is clear. The description adds the constraint of exactly one argument, which is helpful, but does not disclose other behaviors like pagination or ordering. Given annotations, this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise: one sentence for the main action followed by a bullet list of parameters. It is front-loaded and every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, return values need not be described. The description covers all parameters and the constraint of exactly one argument. It is complete for a list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains each parameter's purpose: 'all schedules on a controller' for device_id, 'all schedules at a property' for location_id, etc. This adds significant meaning beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List schedules matching exactly one filter' and enumerates the specific filters (device_id, location_id, zone_id, schedule_id). This provides a specific verb and resource, and the filter options distinguish it from sibling tools like get_schedule or list_devices.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states 'Exactly one argument must be supplied,' which is a clear usage guideline. It also explains what each filter does. However, it does not mention when not to use this tool or suggest alternatives, but the constraint is sufficient for a list tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_zonesARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| device_id | Yes | ||
| include_extra | No | ||
| include_moisture | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description does not need to restate safety. The description adds value by detailing the output structure: each zone summary includes zone_detail (with fields listed) and zone_state. This goes beyond annotations to inform the agent of what to expect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: one summary sentence, then a bullet-like list of return fields, then clear Args list. No extraneous words. It is front-loaded with the core purpose. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is relatively simple (list zones). The description covers purpose, return structure, and all parameters. Annotations provide safety/behavioral context. Output schema exists (but not shown) and the description already explains the return format. A minor gap: no mention of pagination or handling large numbers of zones, but typical controllers have few zones, so this is acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description fully compensates. It provides clear explanations for each parameter: device_id is 'Controller UUID (must be a CONTROLLER_GEN* device)', include_extra 'Ask the server to populate extra diagnostic fields', and include_moisture 'Include per-zone moisture data.' This adds meaning beyond the parameter names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'List all zones configured on a controller.' It uses a specific verb (list) and resource (zones), with a clear scope (on a controller). This distinguishes it from sibling tools like get_zone (single zone) or start_zones (action) without needing explicit comparison.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies that this tool is for obtaining an overview of all zones, but it does not explicitly state when to use it vs alternatives like get_zone. It provides a usage constraint: device_id must be a CONTROLLER_GEN* device. No comparisons or exclusion guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| seconds | Yes | ||
| device_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds behavioral context: zone is paused for specified duration, auto-resumes. No contradiction with annotations (readOnlyHint=false). Could detail error conditions or multiple zone behavior, but adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very concise: three short sentences for purpose, usage, and parameters. No wasted words, front-loaded with core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, usage, and parameters. Output schema present so return values not needed. Could mention edge cases like zone not running, but complete enough for simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, description fully explains both parameters: device_id is controller UUID, seconds is duration (1-3600). Adds meaning beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb (pause) and resource (currently-running zone), and distinguishes from siblings like stop_watering and resume_watering by specifying automatic resume after seconds.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly mentions when to use resume_watering for early continuation and implies that pause auto-resumes. Could also mention stop_watering as alternative for permanent stop, but guidance is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_scheduleARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| name | Yes | ||
| zones | Yes | ||
| start_sun | No | ||
| annual_end | No | ||
| cycle_soak | No | ||
| start_time | No | ||
| smart_cycle | No | ||
| annual_start | No | ||
| climate_skip | No | ||
| schedule_type | No | FIXED | |
| seasonal_shift | No | ||
| soak_time_seconds | No | ||
| cycle_time_seconds | No | ||
| rain_delay_enabled | No | ||
| wind_delay_enabled | No | ||
| freeze_delay_enabled | No | ||
| zone_delay_time_seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds that the tool returns the same schedule as create_schedule would (including a server-generated summary), and that it does not persist anything, providing useful extra behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear front-loaded purpose statement and a labeled Args section. However, it is verbose with bullet-point-style parameter descriptions; could be slightly more concise while remaining complete.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the high parameter count (18), 0% schema coverage, and presence of an output schema, the description covers all essential aspects: purpose, usage flow, detailed parameter semantics, and behavioral guarantees. It is fully adequate for the AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description compensates fully with detailed explanations for each parameter, including format constraints (e.g., 'HH:MM', 'MON/TUE...', 'MM-DD') and mutual exclusivity (e.g., provide at most one of start_time or start_sun).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is a 'Server-side dry-run of create_schedule' and explicitly says 'Does NOT persist anything'. This verb-driven purpose distinguishes it from the sibling create_schedule tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description instructs 'Always call this first and verify the summary + zone breakdown before calling create_schedule', providing explicit when-to-use guidance and an alternative workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resume_wateringC
Resume a paused zone run.
Args: device_id: Controller UUID.
| Name | Required | Description | Default |
|---|---|---|---|
| device_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds minimal behavioral context beyond the annotations. It states it resumes a paused run, but doesn't disclose what happens if no zone is paused, side effects, or error conditions. Annotations already indicate it's not read-only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise with two short sentences, but it may be too minimal. It effectively communicates the core purpose without unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool that resumes a paused operation, the description omits important context such as prerequisites (must have a paused run), possible outcomes, or error scenarios. The presence of an output schema may mitigate some return value details, but the description remains incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds specificity to the device_id parameter by labeling it as 'Controller UUID', which is more informative than the schema's 'Device Id'. However, it does not explain how to obtain this UUID or any constraints. With 0% schema coverage, more detail would be beneficial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (resume) and the resource (paused zone run), making it distinguishable from siblings like pause_watering or start_zones. However, it does not explicitly differentiate from alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like start_zones or when a pause is required. The description simply states what it does, not when it should be invoked.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| schedule_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate mutability and non-idempotency. The description adds that it returns a list of device_ids, but does not disclose other behavioral details like prerequisites, conflicts, or interactions with ongoing watering. It adds some value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise: three sentences covering purpose, return value, and parameter. It is front-loaded with the action, and every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, output schema exists), the description covers the essential aspects. It could mention potential effects or prerequisites, but overall it is sufficiently complete for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 0%, but the description explains 'schedule_id: Schedule UUID to run', which adds basic meaning beyond the schema title. However, it does not elaborate on format or constraints, so it meets a baseline level.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Start an immediate run of the schedule right now' with a specific verb and resource. It distinguishes from sibling tools like preview_schedule and schedule management tools, making its unique purpose evident.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for triggering immediate execution but does not explicitly state when to use or avoid using this tool, nor compare it to alternatives such as preview_schedule or skip_schedule. Minimal guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_rain_delayAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| device_id | Yes | ||
| expiration | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate idempotent and non-destructive write operation. The description adds behavioral context: the device will not run schedules until the expiration time, and shows how to cancel. This is useful beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: a single sentence for the main action, followed by a clear explanation and structured 'Args:' section. Every sentence adds value, no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and the presence of an output schema (not shown), the description covers key aspects: purpose, parameters, and cancellation. It lacks mention of error handling or prerequisites, but is sufficient for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by explaining device_id as 'Controller UUID' and expiration as 'ISO-8601 datetime', including an example and cancellation value. This adds significant meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Set' and resource 'rain-delay expiration for the device', and explains its effect (prevents schedules from running). It distinguishes from siblings like skip_schedule or pause_watering by focusing on a specific rain delay mechanism.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides usage guidance (how to set and cancel a delay via a specific datetime) but does not explicitly tell when to use this tool versus alternatives. No exclusions or when-not instructions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| device_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds the condition 'Does nothing if no schedule is running,' which is a useful behavioral trait beyond the annotations (readOnlyHint=false, destructiveHint=false). However, it does not elaborate on other behaviors like idempotency or side effects, leaving some aspects unspecified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise (two sentences plus parameter list) and front-loaded with the core action. Every sentence adds value, with no redundant or extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a single parameter and an existing output schema, the description fully covers the action, condition, and parameter meaning. No additional return value explanation is needed, and the description is complete for agent understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema only describes device_id as a string with 0% coverage. The description adds 'Controller UUID,' clarifying the expected format beyond the schema. This adds significant meaning, compensating for the lack of schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Skip to the next zone' and the context 'in the currently-running schedule.' This verb+resource combination effectively distinguishes it from sibling tools like skip_schedule, which skips an entire schedule, and stop_watering, which stops all watering.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear usage condition: 'Does nothing if no schedule is running.' This tells the agent when the tool is applicable. However, it does not explicitly compare to alternatives or mention when not to use it, which would improve guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
skip_scheduleAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| disabled | Yes | ||
| schedule_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds value beyond annotations: it explains that the flag applies only to the next occurrence and details the effect of 'disabled=true/false'. Annotations already indicate it's a non-read, non-destructive, idempotent operation, so the description complements these without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with the purpose stated in the first line. The addition of a usage example and parameter list is justified, though the parameter documentation could be more integrated. Overall, it is well-structured and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (two required parameters, boolean operation) and the presence of an output schema, the description fully covers what the tool does, its scope ('next occurrence'), and parameter semantics. No gaps remain for agent understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by providing an 'Args' section that explains both 'schedule_id' (UUID) and 'disabled' (True to skip, False to re-enable), adding essential meaning absent from the input schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool toggles the skip-next-run flag on a schedule, using a specific verb ('Toggle') and resource ('skip-next-run flag'), which distinguishes it from sibling tools like 'update_schedule' or 'run_schedule'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as 'run_schedule' or 'skip_current_zone'. It only describes the effect, leaving the agent to infer usage context without explicit exclusions or recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| zones | Yes | ||
| device_id | Yes | ||
| cycle_soak | No | ||
| soak_duration_seconds | No | ||
| cycle_duration_seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond annotations: it states that zones run 'in sequence' and defines the zones format. Annotations indicate readOnlyHint=false (so mutation is expected) and destructiveHint=false (not destructive). The description aligns with these (starting a run is a mutation but not destructive). However, it does not disclose potential side effects (e.g., if a run is already active, or what happens to overlapping schedules). The behavioral transparency is adequate but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: a one-line summary followed by a detailed parameter breakdown. It is informative but slightly verbose (e.g., repeating 'zones' explanation twice). However, it front-loads the purpose and uses clear formatting (args list). It earns its length by adding value, but could tighten redundancy slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 parameters, manual run initiation) and the presence of an output schema (so return values are not required), the description is complete. It covers all parameters, explains the zones format concretely, references a sibling tool (list_zones) for required data, and describes the cycle-soak functionality. No gaps are apparent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description provides detailed semantics beyond the input schema, which only gives types and defaults. It explains that zones is a list of dicts with specific keys ('zone_number' and 'duration'), specifies that zone_number is a 1-based hardware slot (not UUID) found via list_zones, and describes the role of cycle_soak and its associated parameters. This adds critical meaning, especially since the schema defines zones as 'array of object' with no inner structure validation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Start a manual run of one or more zones in sequence,' specifying the verb (start), resource (zones), and context (manual, sequential). This distinguishes it from sibling tools like run_schedule (which starts scheduled runs) and stop_watering (which stops current runs). The explicit mention of 'manual run' differentiates it from schedule-based actions, and the details about zone numbering via list_zones further clarify the resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context on when to use the tool (e.g., for a manual run) and hints at prerequisites (finding zone_number via list_zones). However, it does not explicitly state when not to use it or mention alternatives (e.g., run_schedule for scheduled runs). The description lacks exclusion criteria or comparative guidance, leaving the agent to infer usage boundaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stop_wateringAIdempotent
Stop all watering currently in progress on the device.
If nothing is running, this is a no-op.
Args: device_id: Controller UUID.
| Name | Required | Description | Default |
|---|---|---|---|
| device_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate idempotentHint=true and destructiveHint=false. Description adds no-op behavior, consistent with idempotency. No further behavioral details (e.g., prerequisites, side effects).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences plus an args line, no fluff. Front-loaded with action. Every part earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given low complexity (1 param, output schema exists), description covers action, no-op, and parameter. Could mention differentiation from pause/stop for completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage, but description explicitly states 'device_id: Controller UUID', adding meaning beyond schema's generic title 'Device Id'. Clear and valuable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Stop all watering' with specific verb and resource. Distinguishes from siblings like pause_watering (temporary pause) and resume_watering (resume).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description mentions no-op behavior when nothing is running, which aids usage. However, lacks explicit guidance on when to use stop versus pause or other alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| name | No | ||
| zones | No | ||
| enabled | No | ||
| start_sun | No | ||
| annual_end | No | ||
| cycle_soak | No | ||
| start_time | No | ||
| schedule_id | Yes | ||
| smart_cycle | No | ||
| annual_start | No | ||
| climate_skip | No | ||
| schedule_type | No | ||
| seasonal_shift | No | ||
| soak_time_seconds | No | ||
| cycle_time_seconds | No | ||
| rain_delay_enabled | No | ||
| wind_delay_enabled | No | ||
| zone_ids_to_remove | No | ||
| freeze_delay_enabled | No | ||
| zone_delay_time_seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=false, destructiveHint=false; description adds critical detail about the partial-merge, non-destructive nature (except zone removal), and that omitting args leaves them untouched. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with summary and behavior, followed by a concise recommendation, then a well-organized Args list. Every sentence is informative with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (21 parameters, no output schema shown), the description covers all essential aspects: purpose, behavior, parameter semantics, and usage recommendations. Output schema exists but does not need to be described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by providing detailed explanations for all 21 parameters, including format constraints, mutual exclusivity, and special values (e.g., 'Pass [] to clear').
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Partial-merge update of an existing schedule' which is a specific verb+resource. It further explains the overlay behavior and references sibling tools for field meanings, effectively distinguishing from create/preview.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Recommends calling 'get_schedule first to review current values', providing clear before-use guidance. It implicitly distinguishes from create_schedule and preview_schedule but lacks explicit when-not-to-use exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
24 tool updates
v0.1.2- First observed
copy_schedule - First observed
create_schedule - First observed
delete_schedule - First observed
get_active_alerts - First observed
get_calendar - First observed
get_device - First observed
get_run_history - First observed
get_schedule - First observed
get_schedule_runs - First observed
get_weather - First observed
get_zone - First observed
list_devices - First observed
list_schedules - First observed
list_zones - First observed
pause_watering - First observed
preview_schedule - First observed
resume_watering - First observed
run_schedule - First observed
set_rain_delay - First observed
skip_current_zone - First observed
skip_schedule - First observed
start_zones - First observed
stop_watering - First observed
update_schedule
TDQS
Each tool targets a distinct action or resource. Schedule tools are clearly separated into list, get, preview, CRUD, copy, run, skip, and history. Watering control tools (start, stop, pause, resume, skip) are unambiguous. Device, zone, weather, and alert tools each serve unique purposes with no overlap.
All tool names follow a consistent verb_noun pattern using snake_case, e.g., list_devices, get_device, create_schedule, pause_watering. There is no mixing of styles or inconsistent verb usage, making the naming predictable and easy to navigate.
With 24 tools, the server covers the full scope of Rachio irrigation management: device/zone/schedule operations, real-time watering control, weather, alerts, and history. The count is well-calibrated for the domain—neither sparse nor bloated.
The tool set provides comprehensive CRUD for schedules, detailed device/zone info, weather data, alerts, and full watering control (start, stop, pause, resume, skip). Calendar and run history tools cover both planned and actual events. Only minor conveniences like a batch alert listing are missing, but core workflows are fully supported.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Hosted MCP server for Xweather weather data: conditions, forecasts, alerts, and more.
1An MCP server that provides an API to LLMs to manage their JumpCloud resources.
MCP server wrapping the Tesla Fleet API and TeslaMate API
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server and CLI for controlling FarmBot hardware, enabling AI agents to manage gardening tasks through tools like gantry movement and device status monitoring. It supports executing Lua scripts and core hardware commands like homing and emergency stops via the Model Context Protocol.3MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for interacting with Fireboard BBQ temperature monitoring. Enables querying devices, live probe temperatures, Drive fan controller status, and historical cook sessions.MIT
- FlicenseNot gradedqualityCmaintenanceMCP server for Hunter Hydrawise irrigation controllers, exposing the Hydrawise REST API as tools for AI agents to manage watering schedules and controller settings.-
- FlicenseAqualityCmaintenanceQuery and control Orbit B-Hyve irrigation systems from MCP-compatible clients like Claude Code and Cursor.121-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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