Docs / Getting started
Docdeploymill://docs/getting-started

Getting started

This is the shortest path from nothing to a live, deployed app. deploymill is driven entirely by MCP tools, so "getting started" means pointing an MCP client (Claude Code, Codex, opencode, or any MCP-capable agent) at the server and making a few tool calls.

1. Connect your agent

  1. Create an account at the web sign-in page (OAuth needs a browser consent

    step). The same dashboard later lets you view and manage what your agent builds — but every capability is tool-driven first, so you never have to use it.

  2. Add deploymill as an MCP server in your client, pointing at

    POST https://<your-host>/mcp.

  3. Authenticate. Your client performs the OAuth 2.0 + PKCE flow and is issued a

    bearer access token; every POST /mcp call carries Authorization: Bearer <token>. The token scopes you to your own org — you can only see and touch your own apps.

Once connected, your agent can discover everything else: fetch the deploymill://guides resource for the full index of guides, or call search_docs to find one by keyword.

2. Go from idea to live app

The single highest-level tool is start_project. One call creates a GitHub repo from a starter template, provisions an app wired to that repo, deploys main, and attaches an auto-generated domain:

start_project({ name: "my-app", stack: "node" })

If any step fails it returns { ok: false, failedAt, partial } so the agent can resume by re-running start_project with the same name (the create steps are idempotent) or, once the repo exists, calling reconcile_project.

3. Put your code in

After scaffolding, commit source with push_files. A commit no longer auto-deploys on its own — pass the optional deploy: { applicationId } to ship it through deploymill's health-gated deploy (with auto-rollback) in the same call, which is how you go from "scaffolded repo" to "running site":

push_files({
  repo,
  branch: "main",
  files: [...],
  message: "Build the thing",
  deploy: { applicationId },   // omit for a pure commit; call deploy() yourself later
})

Prefer a real local checkout to build and test against? Call get_clone_credentials for a short-lived authenticated clone URL.

4. Find the URL and confirm it's healthy

  • list_domains({ applicationId }) returns the live URL.
  • get_app_health({ applicationId }) checks the health gate right now.
  • If a deploy reports status: "error", call get_logs (build source) to see

    why.

Where to go next

  • deploymill://docs/what-is-deploymill — the mental model behind the tools.
  • deploymill://guides/project-config.deploymill/project.json, the

    config file every other tool reconciles to.

  • The per-stack guide for whatever you're building (stack-node,

    stack-python, stack-static).

  • Add a database / object storage / custom domain / secrets — each is a

    field in .deploymill/project.json plus a reconcile_project call; the relevant guide walks you through it.

  • deploymill://docs/troubleshooting — when something goes wrong.