AI agents
Cove has an MCP server built in, so an AI agent like Claude Code, Cursor or Codex can work with your sites: make them, run WP-CLI or artisan, read their logs and mail, look at a page, and take a snapshot before a risky change.
Set it up#
In Claude Code:
claude mcp add cove -- cove mcpAny other client that speaks the Model Context Protocol: add a stdio server that runs cove with the argument mcp. Most take it as JSON:
{"mcpServers": {"cove": {"command": "cove", "args": ["mcp"]}}}If your client can't find cove, give it the full path. cove mcp --help prints the right one for your computer.
What it can do#
Twenty-five tools, in a few groups. cove mcp tools lists them all.
| Sites | List sites and see one's details, create a site or bring in any app from a git URL, folder or archive, clone a site, set its PHP version, and get a one-time login link. |
| WordPress | Run WP-CLI. Commands that only read have a tool of their own, wp_read, marked read-only, so your client can let them through without asking. |
| Laravel | Run artisan, with read-only commands in artisan_read. Turn the queue worker, scheduler and Reverb on or off, and list or add the app's users. |
| Looking | Screenshot a page, check one for its status, redirects and errors, read the PHP and access logs, and read the mail a site sent, with its links pulled out. |
| Safety nets | Take, list and restore snapshots. Save a WordPress site's plugins and themes, see what changed, and roll one back. |
| Cove | Cove's status and its health check. |
What it won't do#
No tool deletes a site, pulls or pushes one to a server, shares one publicly, or changes Cove's own settings. Those stay with you, in a terminal.
The wp and artisan tools run code inside the site you name, so approve them the way you'd approve a shell command. They also refuse some things outright:
- wp refuses --path, --ssh, --http, --require, --exec and aliases, so it can't reach beyond the site. It refuses commands that wipe a whole database (db reset, db drop, db clean, site empty) and interactive ones like shell and db cli.
- artisan refuses commands that wait on a terminal or run until stopped, like tinker, serve and queue:work; the workers tool keeps those running instead. It refuses db:wipe and migrate:fresh, reset and refresh, which wipe the database.
Recording a demo? While cove demo is on, the MCP server sees only the demo's sites, the same as the dashboard.
Scripts and headless use#
Every command runs without a terminal. When nothing can answer a prompt, Cove goes ahead where that's safe (delete, directive delete, proxy, ports, memory set, install, upgrade), skips restarting FrankenPHP unless you pass --yes, and stops with a message naming the flag to pass when a question can't be skipped.
| For | Use |
|---|---|
| Confirming a step that can't be undone | --yes on push, pull onto an existing site, core update --all, uninstall, and opcache set or opcache exclude |
| Answering a prompt up front | pull --ssh "user@host -p 22" --site <name> --path <dir>, proxy add <name> <domain> <target>, tailscale enable <hostname> |
| Output to parse | --format=json on list, network, snapshot <site> list, history, share, backup, laravel and opcache sites; status --porcelain; login --plain |
| A tunnel with no process in front | share <site> --background, then share <site> stop |
| Caddy rules without an editor | cove directive add <site> "header X-Test 1", or pipe them in |
| Anything that needs sudo on Linux | Run that command with sudo. Without a password prompt, /etc/hosts changes are skipped and reported. |
cove list --format=json
cove login mysite --plain
cove share mysite --background --format=jsonThe dashboard's API is the dashboard's own: it answers only on this computer and only takes changes from the dashboard's pages. Scripts and agents use the cove command or cove mcp instead.
Something wrong or missing here? Open an issue ↗ Every command also explains itself: cove help <command>.