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
- 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.
- Add deploymill as an MCP server in your client, pointing at
POST https://<your-host>/mcp. - Authenticate. Your client performs the OAuth 2.0 + PKCE flow and is issued a
bearer access token; every
POST /mcpcall carriesAuthorization: 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", callget_logs(build source) to seewhy.
Where to go next
deploymill://docs/what-is-deploymill— the mental model behind the tools.deploymill://guides/project-config—.deploymill/project.json, theconfig 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.jsonplus areconcile_projectcall; the relevant guide walks you through it. deploymill://docs/troubleshooting— when something goes wrong.