ChatGPT + xCloud
Run Docker apps with ChatGPT on xCloud
Running Docker apps with ChatGPT means using the xcloud app you created in developer mode to scan a Compose repository, preview the Docker site, create it after your confirmation and review how your Docker apps are backed up.
- Skill: xcloud:deploy
- Toolsets: sites, servers
- Free with every xCloud account
YouUsing the xcloud app, scan github.com/acme/api and tell me which port xCloud would use.
git_compose-scanread-only
AgentThe Compose file defines api and redis. Only api publishes a port, 3000. xCloud would proxy to 3000. Do you want a dry run on the Frankfurt Docker server?
YouYes, run the dry run.
servers_sites_git_dockerdry run
AgentDry run resolved: compose file docker-compose.yml, port 3000, no warnings. Confirm to create the site.
. Keep a human in the loop: xCloud stops and asks before anything that creates, deploys, updates, reboots, deletes or buys.
Setup
How Do You Set Up ChatGPT to Run Docker apps on xCloud?
Connect ChatGPT once; every job on this account uses the same connection. Then ask in plain words.
Turn on developer mode and open Plugins
In ChatGPT on the web, open Settings, Security and login and turn on Developer mode. Then open the Plugins page and select the plus button to create an app. OpenAI lists developer mode for Pro, Plus, Business, Enterprise and Education accounts on the web, but its help center puts full MCP support with write actions in beta on Business, Enterprise and Edu workspaces and gives Pro accounts read and fetch access only, so check your plan before you expect ChatGPT to deploy or update anything. That path is for a personal account. In a Business, Enterprise or Edu workspace the controls sit under Apps instead. On Business only an admin or owner can use Developer mode: they turn it on while creating the app from Workspace settings, Apps, Create, and publish it from Workspace settings, Apps. On Enterprise and Edu an admin or owner can also toggle Developer mode under Settings, Apps, Advanced settings, and a member granted developer access under Permissions and Roles turns it on there too and can create and test the app from their own Settings, Apps, Create, but only an admin or owner can publish it. An ordinary member cannot do this, so ask an admin to publish the xcloud app; then open Settings, Plugins, select xcloud, install it if offered and choose Connect, sign in to xCloud and pick the teams and access level, and only then start at the last step.
https://chatgpt.com/pluginsCreate the app with the xCloud MCP URL
Name the app xcloud, paste this as the MCP server URL and choose OAuth for authentication. xCloud supports dynamic client registration, so you do not need to create a client ID. Sign in with xCloud when the browser asks, tick the teams and choose Read-only or Full access.
https://app.xcloud.host/mcpInstall the plugin and use it in a Work chat
Open your personal Plugins page, open xcloud and select the plus button to install it. Back on the ChatGPT homepage, switch the tab at the top from Chat to Work, start a new Work chat, type @ and pick xcloud; a plain Chat tab conversation does not offer the plugin. Then type a request like this one.
Using the xcloud app, who am I on xCloud and which servers do I have?Check it worked
Then ask ChatGPT for the job itself, for example:
Using the xcloud app, scan the docker-compose.yml in github.com/acme/api and tell me which services publish a port and which port xCloud would use.
In practice
How Does Docker apps Work from ChatGPT?
You pick the xcloud plugin for the conversation with @xcloud in a Work chat, and write the request, ideally opening with Using the xcloud app so ChatGPT does not answer from memory. Name the repository and the Docker server. ChatGPT calls git_detect and git_compose-scan and answers with the services, which of them publish a host port and the primary port xCloud suggests. There is no project folder behind a chat, so everything it knows about your Compose file comes from that scan, and it will say so when you ask it to compare against a file you only have locally. Paste the file into the chat if you want its opinion on it.
Approvals in ChatGPT happen twice, and for Docker apps both matter. xCloud's rule is that creating a site needs an explicit confirm, so the dry run comes back first with the compose file, port, address and warnings. ChatGPT's own rule is that write actions ask for confirmation by default, so the real create, a redeploy and a Docker backup each raise a confirmation card before they run, even though xCloud itself would run the backup without a prompt. Read the card: it names the tool and the arguments, and for a backup the thing to remember is that the app stops while the snapshot is captured.
A chat is a good place to review what already runs. Ask for the backup settings and the most recent backup of every Docker app on your team and ChatGPT calls sites_docker_backupSettings and sites_docker_backups, then lists the apps with no schedule. Ask why notes.example.com answers 502 and it compares the port in the site's configuration with the ports the Compose file publishes. If it finds a mismatch it writes the lines to change, such as a 127.0.0.1:8080:8080 mapping, for you to commit; it cannot push to your repository. Restoring is a dashboard step, Site, Site Backup, Previous Backups, Restore Backup.
ChatGPT specific: ChatGPT connects from OpenAI's servers and asks you to confirm write actions, so a request to back up several Docker apps raises one confirmation per call, and a long list can feel like a lot of clicking. Open the xcloud app under Drafts in ChatGPT's settings if the tools do not appear or look out of date, switch off any tool you never want it to call and refresh the list.
What xCloud does for docker apps
xCloud reads the repository, scans the Compose file for services and ports before anything is created, previews the site with a dry run and deploys it behind its own nginx once you approve. Docker sites can be backed up on demand and on a schedule, and a failed deploy is diagnosed and retried on the same site.
- Pick a Docker server. The agent uses the server you name, or lists your servers and asks. A Docker deploy needs a Docker server; any other stack answers with an incompatible_server refusal, and an agentic server never takes a second site. WordPress is not supported on Docker servers.
- Detect the repository. git_detect reads the repository root for a Dockerfile or one of the four Compose file names, and checks access and server compatibility. It creates nothing, and an access problem is never worked around by naming an app type by hand.
- Scan the Compose file. git_compose-scan runs before the dry run. It lists the services and the host ports the file publishes, resolves which Compose file name it found, and suggests a primary port. The agent never guesses the port.
- Dry run, then one approval. The agent sends the Docker create request with dry_run set to true and shows the resolved configuration: compose file, port, address and warnings. It asks once, naming the server and the URL, before sending the same body with confirm set to true and an idempotency key.
- Poll and verify. A 202 means queued, not running. The agent polls the site status until it is terminal, reads failed_steps and the SSL block, and fetches the URL before it calls the app live. A 502 here usually means the Compose file publishes no port.
- Back up and recover. The agent can take a Docker backup, read the backup list and settings, and add a note to a backup. If a deploy fails it reads the diagnosis, proposes a fix from the correctable fields and retries on the same site after your approval. Restoring a backup is a dashboard step.
Reference
Docker apps Settings and Limits on xCloud
The facts ChatGPT works within when it runs Docker apps. Where a row names the dashboard, that step stays yours to take there.
| Setting or limit | What applies |
|---|---|
| Supported inputs | A Dockerfile for a single container, or a Compose file for one or more services, on a Docker server. Go, Python, Rust and Java apps all deploy this way |
| Server stack | Docker servers only. The Docker deploy on any other stack, including an agentic server, answers 422 with the code incompatible_server |
| Which Compose file runs | docker-compose.yml at the repository root. A file named compose.yaml, compose.yml or docker-compose.yaml, or one in a subdirectory, deploys through the pinned Docker create with docker.compose_file set to the path the scan resolved |
| Public port | xCloud's nginx owns ports 80 and 443 and proxies to one host port of 1024 or higher on 127.0.0.1. xCloud runs your Compose file as-is and never rewrites its ports mapping |
| Port refusals | A port another site already holds is refused as port_unavailable. A port the file does not publish is refused as port_not_published, with the published ports listed |
| No published port | A Compose file that publishes no port is accepted and then answers 502, so the scan is the step that catches it |
| Private registries | The deploy runs docker compose pull and never docker login, so an image from a private registry cannot be pulled. Build the image from source instead |
| Environment and redeploys | Send environment values through env_file_content. A redeploy runs git reset --hard and git clean -df in the site directory, so uncommitted server-side changes are lost |
| What a Docker backup holds | Named volumes, eligible bind mounts, the Compose file and the app's .env, in an encrypted snapshot. The app is stopped while the backup captures and restarted afterwards |
| Backup tools | Take a backup, list backups, read the count and the settings, change the settings, add a note and delete a backup. Remote copies go to a storage provider you add in the dashboard |
| Restores | A restore replaces the app's data in place, so it stays a dashboard step: Site, Site Backup, Previous Backups, Restore Backup |
| Dot-prefixed paths | A 403 on a path that starts with a dot is the dot-path allowlist. It is fixed with docker.allowed_dot_paths in the deploy settings, without a rebuild |
Rules ChatGPT has to follow
- The Compose file is scanned before the dry run, and the port always comes from the scan, never from a guess.
- A file that binds ports 80 or 443, publishes no port or pulls from a private registry is not deployed as-is. The agent shows the rewrite, such as publishing 127.0.0.1:<high port>:<app port> and building the image from source, and the change goes into your repository.
- Creating a site, deploying, redeploying and deleting a backup stop for your approval. A backup runs without a separate prompt but stops the app while it captures, so ask for one at a quiet time.
- A failed Docker site is retried in place with corrections. It is never deleted and recreated, because it keeps its domain and port.
- Restoring a backup, adding a backup storage provider and changing a live site's domain are dashboard steps; the agent gives you the path and the dashboard link xCloud returned.
Example prompts
What Can You Ask ChatGPT to Do for Docker apps?
Type these as written and swap in your own repository, site and server names. Reads and routine actions such as backups, cache purges, PageSpeed scans and vulnerability scans run straight away; creating, deploying, updating, rebooting, deleting, buying or starting a broken-link scan stops and asks first.
Using the xcloud app, scan the docker-compose.yml in github.com/acme/api and tell me which services publish a port and which port xCloud would use.Using the xcloud app, deploy github.com/acme/shop to my Frankfurt Docker server as a Compose app. Show me the dry run and wait for my approval before you create anything.Using the xcloud app, list the backup settings and the latest backup of every Docker app on my team, and tell me which ones have no schedule.Scan the docker-compose.yml in github.com/acme/api and tell me which services and ports xCloud would use.Deploy github.com/acme/shop to the Frankfurt Docker server as a Compose app. Scan the compose file first, show me the services and ports, then wait for my approval before creating anything.Deploy the main branch of github.com/acme/api to my Docker server as a Compose app on a staging hostname.My Compose app on notes.example.com answers 502. Check which port its compose file publishes and which port xCloud is using.Take a backup of the Docker app on notes.example.com now, before I upgrade it, and tell me when it is done.Show the backup settings and the last backup of every Docker app on this team, and list the ones with no schedule.The last deploy of the API site failed. Diagnose it, show me the settings I can correct, fix the build command and retry on the same site.ChatGPT and Docker apps: Frequently Asked Questions
What people ask before they let ChatGPT run Docker apps through xCloud.
Why does ChatGPT ask me to confirm a Docker backup when xCloud does not?
ChatGPT asks for confirmation on write actions by default, and a backup is one. xCloud runs routine actions such as a backup without a prompt, so the confirmation you see comes from ChatGPT. It is worth reading, because the app stops while its snapshot is captured.
Can ChatGPT read the Compose file on my laptop before it deploys to xCloud?
No. A ChatGPT chat has no access to your files. xCloud scans the repository it can reach, and you can paste a local file into the chat if you want ChatGPT to review it, but the scan decides the port.
Which servers can run a Docker app on xCloud?
Docker servers. Node.js, PHP and static builds use Nginx or OpenLiteSpeed servers, and the Docker deploy on any other stack is refused with an incompatible_server code. An OpenClaw, Hermes, Paperclip or DeepSeek Harness server hosts only the site created at provisioning, so it takes no Docker app.
Why does the agent scan the Compose file before deploying?
xCloud proxies to the host port your file publishes and never rewrites it. The scan lists the services and ports, so the agent picks a port that is free on the server and published by the file instead of guessing.
Why does my Compose app answer 502 after it deployed?
The most common cause is a Compose file that publishes no port: xCloud accepts it, then its nginx has nothing to proxy to. Publish the app on 127.0.0.1 with a high port, such as 127.0.0.1:8080:8080, and redeploy.
Can an agent deploy an image from a private registry?
Not as-is. The deploy runs docker compose pull and never docker login, so a private image cannot be pulled. Build the image from source in the Compose file, or deploy a repository that does.
Can an agent back up and restore a Docker app?
It can take a backup, read the backup list and settings, change the settings, add a note and delete a backup. Restoring replaces the app's data in place, so you do that in the dashboard under Site, Site Backup, Previous Backups.
Can I run WordPress as a Docker app on xCloud?
No. Creating a WordPress site on a Docker server is refused because WordPress is not supported on Docker servers. Use an Nginx or OpenLiteSpeed server for WordPress.
Other agents
Docker apps with Other Agents
The same job, the same xCloud tools, a guide for each client.
- Run Docker apps with Claude CodeAnthropic's terminal coding agent. One claude mcp add command, plus the xCloud skills plugin with nine skills on top.
- Run Docker apps with ClaudeAnthropic's chat assistant on the web and desktop. Add xCloud as a custom connector, no terminal needed.
- Run Docker apps with Claude CoworkAnthropic's desktop agent for delegated work. Add the xCloud connector, then hand off hosting jobs.
- Run Docker apps with CursorThe AI code editor. One mcp.json entry with the compact URL, because Cursor stops at 40 tools.
- Run Docker apps with CodexOpenAI's coding agent for the terminal. A codex mcp add command or a config.toml entry, then codex mcp login.
- Run Docker apps with OpenCodeThe open-source terminal coding agent. One remote MCP entry, then opencode mcp auth xcloud.
- Run Docker apps with Hermes AgentNous Research's agent with memory and a built-in scheduler. An mcp_servers entry in config.yaml and one login.
- Run Docker apps with OpenClawThe open-source agent runtime with chat apps and automations. ClawHub skill plus the MCP client.
- Run Docker apps with WindsurfThe Cognition editor, now Devin Desktop. devin mcp add for the Devin Local agent, a serverUrl entry for legacy Cascade.
- Run Docker apps with GitHub CopilotCopilot agent mode in VS Code. One .vscode/mcp.json entry, or the Agent Plugins package.
- Run Docker apps with Gemini CLIGoogle's terminal agent. One gemini mcp add command, OAuth found automatically.
- Run Docker apps with ChatGPT dotsOpenAI's always-on agent in ChatGPT. Uses the xCloud MCP plugin you add in ChatGPT, with custom rules and scheduled tasks.
- Run Docker apps with GrokxAI's terminal agent, Grok Build. One grok mcp add command or a config.toml entry.
- Run Docker apps with Grok BotxAI's always-on Bots on a cloud computer. One Remote HTTPS MCP plugin, OAuth sign-in, routines on a schedule.
- Run Docker apps with KiroAWS's agentic IDE. One url entry in .kiro/settings/mcp.json, plus the portable xCloud Agent Plugins package.
- Run Docker apps with AntigravityGoogle's agentic IDE. One serverUrl entry in mcp_config.json and a browser sign-in.
- Run Docker apps with ZedThe Zed editor's Agent Panel. One context_servers entry in settings.json and a browser sign-in.
More ChatGPT guides
- ChatGPT and xCloud overview
- Deploy from Git with ChatGPT
- Install one-click apps with ChatGPT
- Manage WordPress with ChatGPT
- Back up and stage sites with ChatGPT
- Manage SSL and domains with ChatGPT
- Manage servers with ChatGPT
- Troubleshoot a broken site with ChatGPT
- Speed up a slow site with ChatGPT
- Secure sites and servers with ChatGPT
Run Your Hosting from ChatGPT
xCloud MCP, the Agent Skills and the Public API are free with every account. Connect once and ask.