Skip to content
Sites Every website across every connected server on one page — triage updates, vulnerabilities and SSL, then manage any site in place.

Sites

Sites (/sites) is your fleet-wide view of every website across every connected server. It’s the same rich cards and manage drawer the per-server Sites tab uses, so you can triage the whole fleet in one place — what needs updates, what’s vulnerable, whose certificate is expiring — and then manage any single site without leaving the page. Available on all plans. (Docker apps and stacks live on their own Apps page, not here.)

  1. Find the site — type in the search box (matches domains and aliases) or narrow with the Filters dropdown (type, attention, server, status).
  2. On a WordPress site, click the card to open its content shell, or click Manage to open the infra drawer. Non-WordPress sites (PHP, static, runtime) open the Manage drawer directly.
  3. In the Manage drawer, work through the tabs — plugins & themes, PHP version, SSL, cache, tools, security. When the site’s server is online these panels are live; the drawer targets that site’s own agent.
  4. Changes reflect in place — a switched PHP badge, a new certificate state, a site that appears or disappears. Errors surface as an inline red banner at the top of the list or drawer (never a toast), because a background job can finish after you’ve closed the drawer.
  • Filter by attention — the Filters dropdown has a dedicated attention select: Needs updates, Vulnerable (a plugin with a known CVE), or SSL attention (a certificate expiring or expired), each with a live count. This is the fast path to “what needs me right now” across the whole fleet.
  • Filter by type, server, status — WordPress / PHP / Apps / Static; any one server; and Active / Stopped / Suspended / Error.
  • List or Grid view — toggle between dense rows and a screenshot grid (grid cards show the site’s homepage thumbnail and the host server’s IP). Your choice syncs to your account and follows you across devices.
  • Group by server — the Layers toggle clusters rows under each server heading.
  • Refresh from agents — the refresh button asks every online agent to recompute and re-push its inventory, then reloads the aggregate. The icon reflects the outcome: spinner → check, or a warning if no agent was online to pull from.
  • Add site — provision a new site on any online server (pick the target in the create drawer). Hidden for handed-over, site-scoped members, who can’t provision.
  • Open site — the Open site button jumps straight to a domain you already know.
  • Per-card quick menu — magic login to wp-admin, clone, back up, jump to the Security or Cache tab, enable/disable, or delete — each routed to that site’s own server.
  • Domain Manager tab — the Domains button switches to a fleet domain roll-up (see below).

The Domains button opens the Domain Manager tab (URL /sites?tab=domain-manager, also reachable at /domains). It’s one row per registrable domain across your fleet — HTTPS/certificate state and days-to-expiry, Cloudflare vs external DNS, registrar and domain-registration expiry (via RDAP/WHOIS), host server and created date. A Needs attention band summarises expiring certs and domains renewing soon. Use Look up WHOIS to fetch registrar and registration-expiry for every domain, or the per-row refresh for one. Click a row to jump to that server’s DNS & TLS detail.

The fleet list is control-plane aggregation, not a live fan-out:

  • The card list reads GET /v1/servers/sites/all — the agent-pushed sites inventory cache for every server your grant covers, joined in one query. No per-server WebSocket round-trip, so the page loads instantly; servers that never connected contribute no rows. Each row is tagged with its host server (server_id / server_name / is_online / synced_at) so per-site actions route to the right agent.

  • Refresh dispatches a re-push request to every online server, waits a short settle window, then refetches the aggregate — the fresh push arrives via an inventory event.

  • The Domain Manager tab reads GET /v1/servers/domains/all (the sites cache overlaid with the cached ssl cert facts) plus /v1/domains registrations (RDAP).

  • Per-site actions dispatch a job to that site’s own agent, which runs it natively:

    ActionJobAgent runs
    Add sitesite.createmz site create <domain> [--type …] --json
    Deletesite.deletemz site delete <domain> --json
    Enable / disablesite.enable / site.disablere-links / unlinks the nginx vhost
    Switch PHPphp.switchmz php switch <domain> <ver> --json
    Issue / remove SSLssl.issue / ssl.deletecertbot issue / revert to HTTP
    Magic loginwp.login-urlmints a single-use wp-admin login URL
    Clonesite.cloneprovisions a copy on the chosen target

Successes are reflected by the list or drawer changing state; the only error channel is a dismissible inline banner.

The Sites page itself is a control-plane aggregator (there’s no single box behind it), but every per-site action it fires is an ordinary mz command on that site’s server. SSH into the box and run them directly, or let an on-box AI (ClaudeCode) run the same commands:

Terminal window
mz site list --json # every site on this box
mz site create example.com --json # provision a WordPress site + auto HTTPS
mz php switch example.com 8.3 --json # zero-downtime per-site PHP switch
mz ssl issue example.com --json # issue / renew the certificate

The argv is identical to the job dispatch behind the buttons above. See The mz CLI and the command catalog. For fleet-wide scripting against the aggregator endpoints, see the API reference (Max plan).

  • The list is cached, not live. Rows come from each agent’s last inventory push, so a change made outside MZPanel (or a brand-new site) may lag until the next push. Hit Refresh to force every online agent to re-push. Offline servers still show their last-known sites — dimmed, not gone.
  • Actions need the site’s server online. Provision, delete, enable/disable, PHP and SSL all dispatch to that site’s agent; if it’s offline you get an inline “server is offline” message instead of a silent failure.
  • Docker apps aren’t here. Sites of type app/docker are filtered out of this list — manage them on the Apps page.
  • Some manage-drawer actions are still mock. When the site’s agent is online, the drawer’s plugins/themes, PHP, SSL, cache, optimize and tools panels are live. A handful of drawer actions — back up now, deploy/rollback for git sites, and a few legacy cache/DB tools — are not yet wired to a real job and are placeholders; the honest status of each lives on the relevant per-site guide.
  • Domain Manager collapses subdomains. It shows one row per registrable apex; a subdomain-only domain still appears under its apex. Registrar/expiry come from RDAP and fill in over a few seconds after Look up WHOIS (a failed lookup shows n/a with the reason on hover).
  • Site-scoped members see a tailored page. A handed-over customer sees only the sites shared with them and no fleet-only actions (Add site is hidden).