rachio-mcp — MCP server for Claude Code: control Rachio watering
An MCP server that lets an agent read and change Rachio sprinkler schedules, inspect zones and start watering by hand. Handy when you would rather not open the app.
claude mcp add rachio-mcp -e RACHIO_ACCESS_TOKEN=<RACHIO_ACCESS_TOKEN> -- uvx rachio-mcpWhat rachio-mcp does
The server reaches Rachio controllers through the internal gRPC backend at cloud.rach.io:443, the same one the official Android app talks to. Rachio's public API only reads schedules; here you get 24 tools covering devices and zones, schedule listing and dry-run preview, creation, editing and deletion, manual zone runs, stopping watering and rain delays.
Setup starts with minting a long-lived token: uvx --from rachio-mcp rachio-mcp-token asks for your Rachio email and password and prints a RACHIO_ACCESS_TOKEN value. Only that token goes into the client config, never the password. If a later call reports a rejected token, mint a new one and update the config.
The API is reverse-engineered from the Rachio Android v4.21.18 build, and Rachio does not support it. The schema can shift without warning, so an app update may break individual tools. The server runs through uvx, so there is no separate install step.
For schedule work, preview_schedule is the safe path: it returns exactly what create_schedule would produce, including a readable summary and a per-zone breakdown, and writes nothing. update_schedule merges only the fields you pass and leaves the rest alone. Device, zone and schedule ids are UUIDs taken from the list_* tools.
What it helps with
- see which zones a controller has and what is planted in them
- build a watering schedule and check it before it goes live
- stop a run that is happening right now
- start one zone manually for a set number of minutes
- push every schedule back because of rain
Example prompts for the agent
- List my Rachio controllers and the zones on each one
- Preview a morning schedule for zone 2 and show me the summary
- Stop watering and set a rain delay until tomorrow
How to install rachio-mcp
Platform CLI
claude mcp add rachio-mcp -e RACHIO_ACCESS_TOKEN=<RACHIO_ACCESS_TOKEN> -- uvx rachio-mcpReplace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from rachio-mcp <command>
Platform CLI
codex mcp add rachio-mcp --env RACHIO_ACCESS_TOKEN=<RACHIO_ACCESS_TOKEN> -- uvx rachio-mcpReplace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from rachio-mcp <command>
Config file
{
"mcpServers": {
"rachio-mcp": {
"command": "uvx",
"args": [
"rachio-mcp"
],
"env": {
"RACHIO_ACCESS_TOKEN": "<RACHIO_ACCESS_TOKEN>"
}
}
}
}Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from rachio-mcp <command>
Config file
{
"servers": {
"rachio-mcp": {
"type": "stdio",
"command": "uvx",
"args": [
"rachio-mcp"
],
"env": {
"RACHIO_ACCESS_TOKEN": "<RACHIO_ACCESS_TOKEN>"
}
}
}
}Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from rachio-mcp <command>
Platform CLI
gemini mcp add -e RACHIO_ACCESS_TOKEN=<RACHIO_ACCESS_TOKEN> rachio-mcp uvx rachio-mcpReplace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from rachio-mcp <command>
Step by step, with commands for each platform: How to add an MCP server to Claude Code, Codex, Cursor, VS Code, Gemini CLI and more
Questions about rachio-mcp
How do I install rachio-mcp in Claude Code?
Mint a token first with uvx --from rachio-mcp rachio-mcp-token. Then register the server: claude mcp add rachio-mcp -e RACHIO_ACCESS_TOKEN=<RACHIO_ACCESS_TOKEN> -- uvx rachio-mcp, replacing the placeholder with your token.
What does rachio-mcp do?
It gives an agent control over Rachio controllers: devices, zones, schedules and weather readings, plus creating and editing schedules, manual zone runs and stopping watering.
Why might the server stop working?
It calls the app's internal API rather than the public one. That schema can change at any time, and Rachio does not support this kind of access.