Ionize Docs
CookbookIntegrations & billing

Deploy with Claude via MCP

Drive a Deploy deployment end-to-end with Claude

Deploy embeds an MCP server. Claude can drive the full 13-step wizard programmatically. This recipe shows you how.

Setup

  1. Install Deploy (brew install --cask deploy or download from Releases).
  2. Open Deploy. Note the MCP server is now listening on 127.0.0.1:14210.
  3. Configure Claude Code:
    claude mcp add deploy --transport http http://127.0.0.1:14210

Workflow

In Claude Code:

me: Deploy a new Ionize to DigitalOcean. Domain: ionize-test.example.com.
   Use Neon for managed Postgres. Use Resend for email.
   Admin email: me@example.com.

claude: I'll walk through the 13 wizard steps. Let me start by checking
  Deploy's current state.

  [Claude calls `read_context`]

  I see Deploy is on the welcome page. Moving to Repository step.

  [Claude calls `navigate({path: "/repository"})`]
  [Claude calls `screenshot`]

  The Repository step asks for a GitHub PAT. I'll need you to paste it
  in the field, I won't ask for the token in chat for security.

You paste the PAT into Deploy's field. Tell Claude "done."

claude: [Claude calls `click({text: "Fork repository"})`]
        [Claude calls `terminal_read` to watch the fork output]

  Fork succeeded. The repository is at github.com/me/platform-fork.

  Moving to Domain step.
  [navigate, screenshot, form_input for apex domain, click Save]

  Domain configured. Moving to Provider...

And so on. The interaction shape: Claude takes the mechanical steps; you supply credentials and approve any irreversible decisions.

What Claude handles autonomously

  • Navigation between steps.
  • Filling in default values.
  • Clicking "Continue" / "Save" buttons.
  • Watching terminal output for completion.
  • Reading the catalyst.json context to know what's been done.

What you should still review

  • The chosen VPS region (you usually know better which is closest to users).
  • The Postgres tier (Neon free vs paid).
  • The email provider configuration.
  • The admin password.
  • The destroy step (let's be safe).

Asking Claude to resume

If you close Claude Code mid-deploy and resume later:

me: Continue the deployment.

claude: [Claude calls `read_context`]
  Looking at catalyst.json, I see Repository, Domain, Provider, Email are
  complete. Database step is partially done (Neon project exists, awaiting
  database creation).

  Resuming from the Database step.

The MCP gives Claude full visibility into where things are.

Stopping mid-deploy

If you want to pause:

me: Stop. I need to verify something.

claude: Pausing. Deploy is at the Compute step, awaiting droplet creation.
  No partial state, the droplet hasn't been created yet. Safe to leave
  Deploy open or close it; the state persists in catalyst.json.

Replaying for staging

After successful prod deploy, replay for staging:

me: Set up a staging deployment identical to prod but with apex
   staging.ionize-test.example.com. Skip the destroy step.

claude: I'll create a fresh Deploy context for staging. Same provider,
  same email, but different domain and VPS size (smaller for staging).

Claude follows the same 13 steps, parameterizing the differences.

Security

The MCP server is localhost only (ADR 0022). Claude must run on the same machine as Deploy. No remote exposure.

Secrets entered into the Secrets wizard step are visible in Deploy's UI. If Claude takes a screenshot at that moment, the screenshot includes them (sanitization redacts terminal output, not UI fields). Don't be on the Secrets page when calling screenshot.

On this page