# rachio-mcp

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.

- MCP server · `type=mcp` · Claude Code, Codex, Cursor, GitHub Copilot, Windsurf (Devin Desktop), Cline, Zed, Gemini CLI · ★ 7
- Author: rwestergren
- License: MIT · policy=link-only · description only; the file stays with the author
- Source: https://github.com/rwestergren/rachio-mcp
- Updated: 2026-08-12
- HTML: https://affpapa.org/en/nevibecode/mcp/rachio-mcp

## What it 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.

## Requirements
- Needs: Python and uv (commands run via uvx)
- Environment variables: `RACHIO_ACCESS_TOKEN` — keys and tokens: ask the human for the values, never commit them or put them in shared files.

## Install

### Claude Code (native platform)

**Platform CLI**
```bash
claude mcp add rachio-mcp -e RACHIO_ACCESS_TOKEN=<RACHIO_ACCESS_TOKEN> -- uvx rachio-mcp
```
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>

### Codex

**Platform CLI**
```bash
codex mcp add rachio-mcp --env RACHIO_ACCESS_TOKEN=<RACHIO_ACCESS_TOKEN> -- uvx rachio-mcp
```
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>

### Cursor

**Config file**
File `.cursor/mcp.json`:
```json
{
    "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>

### GitHub Copilot

**Config file**
File `.vscode/mcp.json`:
```json
{
    "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>

### Gemini CLI

**Platform CLI**
```bash
gemini mcp add -e RACHIO_ACCESS_TOKEN=<RACHIO_ACCESS_TOKEN> rachio-mcp uvx rachio-mcp
```
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>

## When to use it
- 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
- 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

## Similar
- [Scrapling MCP Server](https://affpapa.org/en/nevibecode/mcp/scrapling-mcp-server.md) — MCP server · ★ 89433
- [browser-use](https://affpapa.org/en/nevibecode/mcp/browser-use.md) — MCP server · ★ 119160
- [AIHawk](https://affpapa.org/en/nevibecode/mcp/aihawk.md) — MCP server · ★ 32221
- [Skyvern](https://affpapa.org/en/nevibecode/mcp/skyvern.md) — MCP server · ★ 23263
- [SeleniumBase MCP](https://affpapa.org/en/nevibecode/mcp/seleniumbase-mcp.md) — MCP server · ★ 13169
- [Inbox Zero](https://affpapa.org/en/nevibecode/mcp/inbox-zero.md) — MCP server · ★ 12791

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
