Olympus Docs
IntegratePlatforms

MCP with Daedalus

Drive Daedalus deployments programmatically from Claude or any MCP client

Daedalus, the production deployment wizard, embeds a localhost MCP server on 127.0.0.1:14210. This means Claude (or any MCP-aware agent) can drive a deployment the same way a human can: click buttons, fill forms, run shell commands, take screenshots.

Why use MCP

  • Agent-driven first deploys. Tell Claude "deploy Olympus to my DO account with domain example.com," Claude walks through the 13 wizard pages.
  • Pair programming with an LLM. You watch the wizard; Claude runs the commands. Faster than copy-pasting between chat and Daedalus.
  • Replay deploys. Capture an entire deployment as MCP tool calls; re-run for staging.

Connecting

Daedalus must be running. The MCP server listens on 127.0.0.1:14210 (TCP, HTTP / JSON-RPC 2.0).

In Claude Code:

claude mcp add daedalus --transport http http://127.0.0.1:14210

Or in Claude Desktop, edit ~/.config/claude/config.json:

{
  "mcpServers": {
    "daedalus": { "url": "http://127.0.0.1:14210", "transport": "http" }
  }
}

Restart Claude. The eight Daedalus tools appear.

The eight tools

ToolPurpose
screenshotCapture the current wizard UI as PNG.
get_pageRead current path + visible text.
navigateGo to a specific wizard page.
clickClick a button or element by text.
form_inputFill a form field by label.
read_contextRead the deployment context (daedalus.json).
terminal_execRun a shell command in the embedded terminal.
terminal_readRead recent terminal output.

Full per-tool reference: Reference, MCP.

Typical conversation flow

You: Deploy Olympus to DigitalOcean with apex example.com and IAM admin me@example.com.

Claude: Calls read_context to see current state. I see Daedalus is on the welcome page. Let me start from Repository.

Calls navigate({path: "/repository"}).

Calls screenshot.

I see the Repository page asking for a GitHub PAT. Should I prompt you for it?

You: Yes, here's the token: ghp_xxx

Claude: Calls form_input({label: "GitHub PAT", value: "ghp_xxx"}). Now clicking Fork.

Calls click({text: "Fork repository"}).

Watches terminal output via terminal_read.

Fork succeeded. Moving to Domain step...

And so on through 13 steps. Claude pauses for input where humans must (secrets, API keys), executes mechanical steps autonomously.

Security considerations

The MCP server is localhost only (ADR 0022). To reach it, you need local code execution on the operator's laptop. The exposed tools (terminal exec, secrets access) would be devastating if remotely accessible; localhost-only eliminates that risk.

Screenshots and terminal output flow through a secrets sanitizer that redacts Bearer tokens, API keys, and DSN passwords. The redaction is best-effort, not exhaustive.

What MCP can't do

  • Make decisions you should make. Picking a VPS region, choosing managed vs self-hosted Postgres, these belong to the human.
  • Provision external accounts. Daedalus needs your DigitalOcean / Neon / Resend accounts already to exist with usable credentials.
  • Recover from outright errors. If the deploy fails because your GitHub PAT lacks permissions, Daedalus can detect and report; Claude can describe the error but can't fix it without your action.

Recording a session

Daedalus optionally logs every MCP tool call to ~/.daedalus/sessions/<timestamp>.log. Useful for:

  • Replaying the exact actions for a different deployment.
  • Debugging "what happened during the deploy."
  • Audit.

Enable in Daedalus settings.

Where next

On this page