Deployments
Deploy with MCP
Deploy, restart, or stop your app from Cursor chat. No complex dashboards — ask the AI and Devployer handles it.
Connect MCP first: MCP setup (the devployer server should show green).
What you need
- MCP connected — quick guide
- App created in Devployer — in the portal, with a project (and payment if required)
- Your code open in Cursor — so the AI can create a
Dockerfileif it’s missing
MCP does not create apps or take payments. That happens in the portal.
How to deploy (3 steps)
1. Create the app in Devployer (portal)
2. Open the project in Cursor
3. In chat: “Deploy my app on Devployer”
The AI does the rest: creates a Dockerfile if needed, asks you to commit/push, then deploys.
When it’s done, you get your app’s public URL.
What to say in chat
| I want to… | Say this |
|---|---|
| See my projects | > List my Devployer projects |
| Deploy | > Deploy my app on Devployer |
| Create Dockerfile and deploy | > Create the Dockerfile if missing and deploy |
| Restart | > Restart the application portal-app-name |
| Stop | > Stop the app portal-app-name |
| Redeploy | > Redeploy portal-app-name |
Use the exact app name from Devployer (it may differ from your local folder name).
Good to know
- Dockerfile: Devployer needs it at the repo root. If it’s missing, ask the AI to create it, then commit + push.
- Restart / stop / redeploy: the AI shows a summary and asks for confirmation first.
- After code changes: push to Git, then ask to deploy or redeploy again.
Quick checklist
- MCP is green
- App created (and paid) in Devployer
- Code open in Cursor
- You asked to deploy in chat
- You checked the URL it returned
If something fails
| What happens | What to do |
|---|---|
| Can’t find the app | Create it first in the portal |
| Build fails / missing Dockerfile | Ask: “Create the Dockerfile and deploy again” |
| Takes too long | Ask: “Show me the deploy logs” |
| Wrong app restarted | Use the exact portal name |
| Tools missing in Cursor | Reload / reconnect the devployer MCP |
More detail: Dockerfile · Next.js
For AI agents
You operate Devployer only through MCP. Rules:
- Only Devployer MCP tools. Never call infrastructure APIs, URLs, or tokens; Devployer is the only platform.
- MCP never creates apps or takes payments. If the app is missing in the portal, tell the user to create it there.
- Dockerfile only. Never pass
nixpacks. If the app was Nixpacks,deploy_resourceswitches it to Dockerfile. - Root
Dockerfilerequired. If missing:list_deploy_methods→ create fromstackTemplates→ commit/push → deploy. - IDs vs names
- Discover:
list_projects→list_resources(projectId,environmentId,resourceId). - Lifecycle by name:
restart_resource,stop_resource,redeploy_resourceuseresourceName(case-insensitive). Not databases.
- Discover:
- Confirmation required for restart / stop / redeploy:
- First call with
confirmomitted orfalse(preview). - Then
confirm: trueonly after explicit approval (or an explicit request like “restartfront-app-01”). - If the name is ambiguous, ask first.
- First call with
- Failure or timeout: read
logs/[debug]; iftimedOut: true, callget_deployment_logs. Fix → push → redeploy. - Follow
agentInstruction/hintwhen present. - Missing tools: ask the user to reload/reconnect MCP
devployer.
Tool catalog
| Tool | Purpose | Key args | Confirm? |
|---|---|---|---|
list_projects | Projects + environments | page, pageSize | no |
list_resources | Apps/DBs in an environment | projectId, environmentId | no |
list_deploy_methods | Dockerfile method + templates | (none) | no |
deploy_resource | Deploy by UUID + logs | resourceId, optional waitSeconds | no |
get_deployment_logs | Re-fetch logs | deploymentId and/or resourceId | no |
redeploy_resource | Redeploy by name | resourceName, optional gitBranch | yes |
restart_resource | Restart by name | resourceName | yes |
stop_resource | Stop by name | resourceName | yes |
There are exactly eight tools. Do not invent others.
Identifiers
| Field | Source | Used by |
|---|---|---|
projectId | list_projects → items[].id | list_resources |
environmentId | list_projects → items[].environments[].id | list_resources |
resourceId | list_resources → items[].id | deploy_resource, get_deployment_logs |
resourceName | list_resources → items[].name | restart / stop / redeploy |
deploymentId | deploy_resource response | get_deployment_logs |
Local folder names may differ from Devployer names. Always resolve via list_resources / preview.
Deploy vs redeploy vs restart vs stop
| Action | Tool | When |
|---|---|---|
| Deploy | deploy_resource | First deploy or redeploy by id after a fix |
| Redeploy | redeploy_resource | User: “redeploy app-name” |
| Restart | restart_resource | User: “restart app-name” |
| Stop | stop_resource | User: “stop app-name” |
Playbooks
A — List: list_projects → list_resources per env → show name, status, framework, buildPack, hostname.
B — Dockerfile deploy: list_deploy_methods → ensure root Dockerfile → commit/push → list_resources → deploy_resource (buildPack: "dockerfile", waitSeconds: 180) → if timedOut, get_deployment_logs.
C — Lifecycle by name: preview (confirm: false) → show resource → confirm: true after approval.
D — Failure / timeout: get_deployment_logs (includeDebug: true) → fix → push → deploy_resource.
Root Dockerfile
Exact filename: Dockerfile next to package.json / pom.xml / composer.json.
| Stack | Detection | Port |
|---|---|---|
| Next.js | next / next.config.* | 3000 |
| Angular | angular.json | 80 |
| Quarkus | Quarkus Maven/Gradle | 8080 |
| Spring Boot | Spring Boot Maven/Gradle | 8080 |
| Laravel | artisan / laravel/framework | 8000 |
| Node | generic package.json | 3000 |
| Generic | fallback | 80 |
Prefer list_deploy_methods → stackTemplates. Next.js standalone: output: 'standalone' if the template copies .next/standalone.
Confirmation protocol
User request
→ confirm=false (preview)
→ show resource
→ approval
→ confirm=true
Do not set confirm: true on the first call. Do not restart/stop databases.
Tools reference
The agent calls these tools. Do not call infrastructure APIs yourself; operate only through Devployer MCP.
1. list_projects
| Argument | Required | Default |
|---|---|---|
page | no | 1 |
pageSize | no | 20 (max 100) |
Returns: items[] with id, name, environments[] (id, name, slug, resourceCount).
{ "name": "list_projects", "arguments": { "page": 1, "pageSize": 20 } }
2. list_resources
| Argument | Required |
|---|---|
projectId | yes |
environmentId | yes |
Returns: items[] with id, name, kind, status, framework, buildPack, branch, domains[], plus agent hints.
{
"name": "list_resources",
"arguments": {
"projectId": "11111111-1111-1111-1111-111111111111",
"environmentId": "22222222-2222-2222-2222-222222222222"
}
}
3. list_deploy_methods
No arguments. MCP method (dockerfile), stackDetection, stackTemplates.
{ "name": "list_deploy_methods", "arguments": {} }
4. deploy_resource
| Argument | Required | Default |
|---|---|---|
resourceId | yes | — |
buildPack | no | dockerfile |
waitSeconds | no | 180 (max 600) |
Returns: resource, deploymentId, status, finished, timedOut, logs, entries, agentInstruction, message.
{
"name": "deploy_resource",
"arguments": {
"resourceId": "33333333-3333-3333-3333-333333333333",
"buildPack": "dockerfile",
"waitSeconds": 180
}
}
Does not create apps or handle payments.
5. get_deployment_logs
| Argument | Required | Default |
|---|---|---|
deploymentId | preferred | — |
resourceId | if no deploymentId | — |
waitSeconds | no | 0 |
includeDebug | no | true |
{
"name": "get_deployment_logs",
"arguments": {
"deploymentId": "dep-devployer-uuid",
"waitSeconds": 120,
"includeDebug": true
}
}
6. restart_resource
| Argument | Required | Default |
|---|---|---|
resourceName | yes | — |
confirm | no | false |
{ "name": "restart_resource", "arguments": { "resourceName": "front-app-01" } }
{
"name": "restart_resource",
"arguments": { "resourceName": "front-app-01", "confirm": true }
}
7. stop_resource
Same confirmation flow as restart.
{ "name": "stop_resource", "arguments": { "resourceName": "front-app-01" } }
{
"name": "stop_resource",
"arguments": { "resourceName": "front-app-01", "confirm": true }
}
8. redeploy_resource
| Argument | Required | Default |
|---|---|---|
resourceName | yes | — |
confirm | no | false |
gitBranch | no | current branch |
{ "name": "redeploy_resource", "arguments": { "resourceName": "front-app-01" } }
{
"name": "redeploy_resource",
"arguments": {
"resourceName": "front-app-01",
"gitBranch": "main",
"confirm": true
}
}
Errors (agents)
| Error / symptom | Fix |
|---|---|
MCP_DOCKERFILE_ONLY | Only dockerfile |
| Missing Dockerfile / build error | stackTemplates → push → deploy |
| Deploy fails immediately | App must exist and be paid |
| Timeout | get_deployment_logs + waitSeconds |
RESOURCE_NOT_FOUND | Exact portal name via list_resources |
| Missing tools | Reconnect MCP devployer |
Related docs
- MCP connection
- Dockerfile
- Next.js
- Nixpacks (portal only — not via MCP)