{"id":"e3361f2f-c651-4b88-840f-cdcaa384a220","slug":"dockhold-mcp","kind":"mcp","name":"mcp","summary":"Put the project you are working on online from Claude Code, Cursor, VS Code, Gemini CLI or any MCP client. Deploys the current folder or a GitHub repo to a live HTTPS URL on Dockhold.","owner":"dockhold","repoUrl":"https://github.com/dockhold/mcp","license":"MIT","licenseTier":"permissive","trust":"community","stars":0,"match":null,"fewStars":true,"format":"mcp","createdAt":"2026-07-05T19:44:24.000Z","addedAt":"2026-10-14T05:04:09.360Z","logoUrl":"https://avatars.githubusercontent.com/u/293877683?v=4","linkOnly":false,"collection":null,"skillPath":null,"categories":["developer-tools","cloud-infra","memory-knowledge"],"tags":["agent-plugins","claude-code","claude-code-plugin","cursor-plugin","deploy","gemini-cli-extension","hosting","paas"],"runtime":"node","local":true,"cloudCapable":false,"cloudCapability":"unknown","cloudReadyOnPlatform":false,"needsApiKey":false,"reviewed":false,"syncedAt":"2026-10-17T12:39:48.785Z","sample":false,"url":"https://conduits.dev/tools/dockhold-mcp","language":"","transports":["stdio"],"install":{"npm":"dockhold"},"requirements":{"env":[{"name":"DOCKHOLD_REF","secret":false,"required":false,"description":"Where this install came from, for sign-up attribution. Fixed; nothing to fill in."}],"upstreamMayCharge":false},"tools":null,"readme":"# Dockhold for your AI coding tool\n\nPut the project you are working on online without leaving your editor. Install once, sign in once in the browser, then say \"put this online\". Your AI tool deploys the current folder (or a GitHub repo) to [Dockhold](https://dockhold.eu) and reports a live HTTPS URL. It can also read status and logs, set variables, and resize apps and managed databases.\n\nNo token to copy. Sign-in happens through the browser, the same way as the [Dockhold CLI](https://github.com/dockhold/cli), and every client below shares it.\n\n- **Docs:** https://dockhold.eu/docs\n- **Registry name:** [`eu.dockhold/dockhold`](https://registry.modelcontextprotocol.io/v0.1/servers?search=eu.dockhold)\n- **Requirements:** Node.js 18 or newer (for `npx`)\n\n## Install\n\nEvery install below starts the same local MCP server, `npx -y dockhold mcp`. It forwards each request to Dockhold with the sign-in the CLI stored on your machine. Nothing sensitive goes into your editor config.\n\n### Claude Code\n\n```\n/plugin marketplace add dockhold/mcp\n/plugin install dockhold@dockhold\n```\n\nThis installs the MCP server and a `deploy` skill (invoked as `/dockhold:deploy`, or picked up on its own when you ask to put the project online) that knows the whole flow: preflight, sign-in, deploy, and what to do when a build fails.\n\n### Cursor\n\n[![Add to Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/install-mcp?name=dockhold&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsImRvY2tob2xkIiwibWNwIl0sImVudiI6eyJET0NLSE9MRF9SRUYiOiJjdXJzb3IifX0=)\n\nThe button opens this link in Cursor:\n\n```\ncursor://anysphere.cursor-deeplink/mcp/install?name=dockhold&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsImRvY2tob2xkIiwibWNwIl0sImVudiI6eyJET0NLSE9MRF9SRUYiOiJjdXJzb3IifX0=\n```\n\nOr add it by hand to `~/.cursor/mcp.json` (all projects) or `.cursor/mcp.json` (one project):\n\n```json\n{\n  \"mcpServers\": {\n    \"dockhold\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"dockhold\", \"mcp\"],\n      \"env\": { \"DOCKHOLD_REF\": \"cursor\" }\n    }\n  }\n}\n```\n\nThis repo is also an [Agent Plugin](https://agent-plugins.org) (`plugin.json` and `mcp.json` at the root), so Cursor can install it from its plugin browser once it is listed there: open **Customize** in the sidebar, search for Dockhold, and choose **Install**.\n\n### VS Code\n\n```sh\ncode --add-mcp '{\"name\":\"dockhold\",\"command\":\"npx\",\"args\":[\"-y\",\"dockhold\",\"mcp\"],\"env\":{\"DOCKHOLD_REF\":\"vscode\"}}'\n```\n\n### Gemini CLI\n\n```sh\ngemini extensions install https://github.com/dockhold/mcp\n```\n\nThis repo is also a Gemini CLI extension (`gemini-extension.json` at the root), so the install adds the MCP server and the same `deploy` skill.\n\n### Cline\n\nAsk Cline to \"install the MCP server from https://github.com/dockhold/mcp\". It follows [`llms-install.md`](llms-install.md): one settings entry, no token, then a browser sign-in. To do it by hand, add the entry below to `cline_mcp_settings.json` with `\"env\": { \"DOCKHOLD_REF\": \"cline\" }`.\n\n### Any other MCP client\n\nUse the same server entry in your client's config:\n\n```json\n{\n  \"mcpServers\": {\n    \"dockhold\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"dockhold\", \"mcp\"]\n    }\n  }\n}\n```\n\nIf your client gives a server only a few seconds to start, the first `npx -y dockhold` download can be too slow for it. Install the CLI once with `npm i -g dockhold` and the same entry starts instantly.\n\n## Sign in\n\nThe first time a tool needs your account it answers with a message that says to run `npx dockhold login` in a terminal. Run it, a browser tab opens, and you are done. The sign-in lasts 90 days and is shared by the CLI and every client above. Nothing else to configure.\n\n## What it looks like\n\n> **You:** put this online\n>\n> **AI:** Checked the project: it listens on `PORT` and has a Dockerfile. You are not signed in yet, so I am running `npx dockhold login`. A browser tab will open.\n>\n> *(you sign in, the tab says you are done)*\n>\n> **AI:** Signed in. Deploying with `npx dockhold deploy --name recipe-box`. Uploading, building...\n>\n> **AI:** Your app is live: https://recipe-box-a1b2c3.dockhold.app\n>\n> **You:** show me the logs\n>\n> **AI:** *(calls `get_app_logs`)* The last 100 lines: the server started on port 8080 and has served 3 requests. No errors.\n\nLocal folders deploy through the CLI, which needs no GitHub account. A GitHub repository deploys through the `deploy_app` tool. Deploys on every push need the repository connected to Dockhold (`list_github_repos` gives the `github_installation_id` to pass); a repository deployed by URL alone builds once.\n\n## Tools\n\n| Tool | Scope | What it does |\n|---|---|---|\n| `list_apps` | read | List your apps with id, status, and URL |\n| `get_app_status` | read | Deploy status, URL, last commit, error message for one app |\n| `get_app_logs` | read | Recent runtime logs for one app |\n| `get_resource_usage` | read | Account pools (compute, database RAM, storage) and per-app sizes |\n| `list_github_repos` | read | Your connected GitHub repos, with the id needed to deploy private ones |\n| `deploy_app` | deploy | Deploy a GitHub repo as a live web app |\n| `deploy_group` | deploy | Deploy several connected services in one go |\n| `redeploy_app` | deploy | Zero-downtime restart of an app |\n| `set_app_variable` | deploy | Set a non-secret environment variable and roll it out |\n| `unset_app_variable` | deploy | Remove a plain environment variable and roll it out |\n| `resize_app` | deploy | Change an app's memory |\n| `resize_database` | deploy | Change a managed database's memory |\n| `resize_database_storage` | deploy | Grow a managed database's disk |\n| `set_app_storage` | deploy | Give an app storage that survives restarts and deploys, or grow it |\n| `remove_app_storage` | deploy | Remove an app's storage and erase its files |\n\nThe browser sign-in has the `read` and `deploy` scopes, which covers every tool above.\n\n## Remote server (no CLI)\n\nFor a client that cannot run a local command, the same tools are served over Streamable HTTP at `https://api.dockhold.eu/mcp`. Create a token in the [Dockhold dashboard](https://app.dockhold.eu) under Settings, then API tokens (read-only, read+deploy, or with secrets), and pass it as a bearer:\n\n```json\n{\n  \"type\": \"streamable-http\",\n  \"url\": \"https://api.dockhold.eu/mcp\",\n  \"headers\": { \"Authorization\": \"Bearer dh_mcp_...\" }\n}\n```\n\nClaude Code: `claude mcp add --transport http dockhold https://api.dockhold.eu/mcp --header \"Authorization: Bearer dh_mcp_...\"`. This is the one setup that puts a token in a config file, so keep that file out of version control.\n\nA dashboard token can also carry the `secrets` scope, which unlocks five more tools over this connection: `set_app_secret`, `unset_app_secret`, `bind_app_secret`, `list_secrets`, `list_app_secrets`. The browser sign-in never has that scope; with the plugin, secrets are added in the dashboard's Secrets section.\n\n## Getting started with Dockhold\n\nDockhold is the easiest way to put your app online: push from GitHub or deploy from a folder, always on, secure by default. Sign in at [app.dockhold.eu](https://app.dockhold.eu). The free tier needs no card.\n"}