Docdeploymill://docs/capabilities
Capability matrix (MCP · API · UI)
This page is the at-a-glance answer to "what can DeployMill do, and where can I do it?" Every capability is listed against the three surfaces you can drive it from:
- MCP: the MCP tools your AI agent calls over
POST /mcp. This is the primary product. - API: the
/api/v1 REST API, an HTTP mirror of the deploy-lifecycle tools for scripts and CI. (For workspace administration, "API" means the account/org API instead. See that table's note.) - UI: the human dashboard at
/account.
How to read this matrix (the agent-first approach)
DeployMill is built on two deliberate rules, and the matrix is the proof of both:
- The deploy lifecycle is agent-first. Everything involved in shipping and operating an app (create, import, deploy, previews, domains, env vars, secrets, source, database, object storage, rollback, logs, health) lands as an MCP tool first. So the MCP column is the most complete column in the deploy-lifecycle table: an agent is never forced into a dashboard to ship. The REST API mirrors nearly all of it, and the dashboard is a secondary surface for observing and managing what the agent built.
- Workspace administration is API-first. Running the workspace itself (members, roles, billing, SSO, support) is human work. These are deliberately not MCP tools. They live in the dashboard with a solid API behind them (the second table). The one read an agent needs to deploy (quota/headroom via
get_account) stays on the agent surface.
Legend: ✅ available · — not on this surface · 👤 human-only by design.
Deploy lifecycle (agent-first)
For this table the API column is the /api/v1 REST API. Read tools never return secret values. Mutations run the same guardrails (health-gated deploys, isolated previews, the secret hand-off the client never sees) on every surface.
Projects & apps
| Capability | Tool | MCP | API | UI |
|---|
| Start a project end-to-end (repo + app + deploy + domain) | start_project | ✅ | ✅ | ✅ |
| Import an existing repo as an app | import_repo | ✅ | ✅ | — |
| Create a bare app bound to a repo | create_app | — | ✅ | — |
Diff & apply project.json against live infra | reconcile_project | ✅ | ✅ | — |
| List apps | list_apps | ✅ | ✅ | ✅ |
| App status: detail (source, port, size, domains, mounts, protection) + live health (edge probe, deploy rollout, image drift, diagnostics) | get_app | ✅ | ✅ | ✅ |
| List tenant projects | list_projects | — | ✅ | ✅ |
| Account quota & headroom | get_account | ✅ | ✅ | ✅ |
| List starter templates | list_templates | ✅ | ✅ | ✅ |
| Stop / start an app | stop_app / start_app | ✅ | ✅ | ✅ |
| Sleep a running app now (scale to zero, wakes on next request, keeps its quota slot) | sleep_app | ✅ | ✅ | ✅ |
| Set CPU / memory | set_app_resources | — | ✅ | ✅ |
| Idle-sleep policy (always-alive · idle window · sleep-vs-stop) | set_app_sleep_policy | ✅ | ✅ | ✅ |
| Delete an app and its resources | delete_app | ✅ | ✅ | ✅ |
Deploy, rollback, health & logs
| Capability | Tool | MCP | API | UI |
|---|
| Build & deploy from source | deploy | ✅ | ✅ | ✅ |
| Cancel an in-flight deploy | cancel_deploy | ✅ | ✅ | — |
| List deployments | list_deployments | ✅ | ✅ | ✅ |
| Roll back to a previous release | rollback | ✅ | ✅ | ✅ |
| Read build / runtime logs | get_logs | ✅ | ✅ | ✅ |
| Deep debugging bundle (health + logs + audit) | debug_app | ✅ | ✅ | — |
Previews
| Capability | Tool | MCP | API | UI |
|---|
| Create a preview (isolated DB branch + fresh volume/bucket) | create_preview | ✅ | ✅ | ✅ |
| List previews | list_previews | ✅ | ✅ | ✅ |
| Redeploy a preview | deploy (by (parentApplicationId, ref) or the preview's applicationId) | ✅ | ✅ | ✅ |
| Set / extend preview TTL | set_preview_ttl | ✅ | ✅ | ✅ |
| Delete a preview | delete_app (by (parentApplicationId, ref) or the preview's applicationId) | ✅ | ✅ | — |
Domains & env vars
| Capability | Tool | MCP | API | UI |
|---|
| Attach a custom domain | attach_domain | ✅ | ✅ | ✅ |
| Detach a domain | detach_domain | ✅ | ✅ | ✅ |
| List domains | list_domains | ✅ | ✅ | ✅ |
| Set env vars | set_env_vars | ✅ | ✅ | ✅ |
| List env-var keys (values never returned) | list_env_vars | ✅ | ✅ | ✅ |
| Delete env vars | delete_env_vars | ✅ | ✅ | ✅ |
| Bind a secret into an app's env | bind_secret | ✅ | ✅ | ✅ |
Secrets (zero-readback vault)
No surface ever returns a secret value. The agent and API client work by name only.
| Capability | Tool | MCP | API | UI |
|---|
| Request a secret (mint single-use browser link) | request_secret | ✅ | ✅ | — |
| Poll a secret request's status | secret_request_status | ✅ | ✅ | — |
| Enter / change a secret value | — (browser hand-off) | — | — | 👤 |
List secret names (org vault: omit applicationId; app vault: pass it) | list_secrets | ✅ | ✅ | ✅ |
Delete a secret (scope: "org" or scope: "app") | delete_secret | ✅ | ✅ | ✅ |
| Promote an app secret to org-shared | share_secret | ✅ | ✅ | — |
| Unshare an org secret into an app | unshare_secret | ✅ | ✅ | — |
Source / files
| Capability | Tool | MCP | API | UI |
|---|
| List files in a repo path | list_files | ✅ | ✅ | ✅ |
| Read a file | get_file | ✅ | ✅ | ✅ |
Push files (creates the branch on demand via createBranchIfMissing) | push_files | ✅ | ✅ | — |
| Temporary git clone credentials | get_clone_credentials | ✅ | ✅ | — |
| Export full source as a zip | — | — | — | ✅ |
Object storage
| Capability | Tool | MCP | API | UI |
|---|
| List objects | list_objects | ✅ | ✅ | ✅ |
| Download an object | get_object | ✅ | ✅ | ✅ |
| Upload an object | put_object | ✅ | ✅ | — |
| Delete an object | delete_object | ✅ | ✅ | ✅ |
Direct database access
| Capability | Tool | MCP | API | UI |
|---|
| Inspect the database schema (tables, columns, indexes, but never row values) | describe_database | ✅ | ✅ | — |
| Run a single read-only SQL query (capped, audited)¹ | query_database | ✅ | ✅ | — |
¹ query_database requires a plan with direct data access (paid) and can be turned off org-wide by an admin governance toggle. describe_database (schema only) is available on every plan. See the direct database access guide.
Database backups & restore
| Capability | Tool | MCP | API | UI |
|---|
| Snapshot the database on demand | create_backup | ✅ | ✅ | — |
| List restore points | list_backups | ✅ | ✅ | ✅ |
| Restore a backup into the live DB | restore_backup | ✅ | ✅ | — |
| Download a backup (presigned dump) | download_backup | ✅ | ✅ | ✅ |
| Verify a backup restores cleanly | verify_backup | ✅ | ✅ | ✅ |
| Swap the app onto a restored database | swap_database | ✅ | ✅ | — |
Protection & docs
| Capability | Tool | MCP | API | UI |
|---|
| Gate a site (HTTP Basic / organization auth) | set_app_protection | ✅ | ✅ | ✅ |
| Full-text search the docs | search_docs | ✅ | ✅ | ✅ |
Scheduled jobs (cron) are config-as-code: declare a schedules block in .deploymill/project.json and apply it with reconcile_project. There is no standalone schedule tool. See the schedules guide.
Workspace administration (API-first)
These run the workspace itself, not your apps. By design they are not on the MCP surface. Agents ship apps, and people run workspaces. The programmatic path here is the account/org API (Better Auth /api/auth/organization/* plus the dashboard's JSON endpoints), not /api/v1. The API column below reflects that surface.
| Capability | MCP | API | UI |
|---|
| Invite / remove members, change roles | — | ✅ | ✅ |
| Per-member permission grants/revokes & app limits | — | ✅ | ✅ |
| Create / revoke org API keys | — | ✅ | ✅ |
| Billing: plan, add-ons, checkout | — | ✅¹ | ✅ |
| Provider connections (source / database) | — | ✅ | ✅ |
| Org preferences (default DB provider / template) | read via get_account | ✅ | ✅ |
| Audit log: view & export | per-app entries via debug_app | ✅ | ✅ |
| Compliance exports (backup attestation, SIEM, data export) | — | ✅ | ✅ |
| SSO connections | — | operator-managed² | read-only status |
| Account settings (2FA, password, linked providers) | — | ✅ | ✅ |
| Contact support (email-only — the dashboard points at a monitored mailbox) | — | — | 👤 ✅ |
| Delete / erase the organization | — | ✅ | ✅ |
¹ Billing checkout and the customer portal complete in the browser (Stripe), launched from the dashboard. ² SSO connections are configured by DeployMill operators (no self-serve). The dashboard shows a read-only status page. See SSO setup.
See also
</content> </invoke>