Dockhold

eu.dockhold由 dockhold.eu 發布官方發布者v0.2.0更新於 Oct 24, 2026

Deploy your project to a live HTTPS URL from your AI tool; read logs, set variables, resize apps.

已驗證Streamable HTTP可網頁執行雲端與基礎設施開發者工具

概覽

AI 產生的概覽

Dockhold 讓助理把 GitHub 儲存庫部署成可存取的 HTTPS 網頁應用程式,並查看狀態與日誌、設定變數與密鑰、調整應用程式與資料庫規格。

可以做什麼
列出應用程式與已連結的 GitHub 儲存庫,讀取單一應用程式的部署狀態、網址、最近提交與錯誤訊息,以及最近的執行日誌和帳戶資源池(運算、資料庫記憶體、儲存空間)。將公開或私有 GitHub 儲存庫部署為線上網頁應用程式,一次部署多個互相串接的服務,零停機重啟應用程式或從最新提交重新建置。設定或移除一般環境變數並推送生效。依名稱儲存、綁定、解除綁定和列出密鑰,但無法讀回密鑰值。調整應用程式記憶體、受管資料庫記憶體,擴充資料庫磁碟;新增或移除應用程式的持久儲存空間。
適用情境
適合在 AI 程式開發工具內直接把專案上線並取得可分享的 HTTPS 網址,接著查看部署狀態、讀取日誌、調整設定,或在不離開編輯器的情況下擴充應用程式與受管資料庫。
執行需求
可使用透過 npx 執行的本機伺服器(需 Node.js 18 或更新版本),或遠端 Streamable HTTP 端點。本機方式需透過 Dockhold CLI 在瀏覽器一次性登入,各用戶端共用,有效期 90 天。遠端方式需在 Authorization 標頭中帶入 Dockhold 主控台建立的 bearer 權杖。需要 Dockhold 帳戶;免費方案不需信用卡。
安裝前請注意
部署、擴充、變數與儲存空間類工具會改動線上基礎設施,並可能消耗付費帳戶資源。remove_app_storage 會永久刪除所有檔案,無法復原且沒有備份;resize_database 會短暫重啟資料庫。密鑰值無法讀回,但密鑰類工具需要具備 secrets 權限的主控台權杖。遠端方式會把權杖寫入設定檔,應避免納入版本控制。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Dockhold,將其新增到工作區。
  2. 連接 Authorization token 憑證。它們會被私密儲存,絕不會在公開頁面上展示。
  3. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/eu.dockhold%2Fdockhold/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "dockhold": {
      "type": "http",
      "url": "https://api.dockhold.eu/mcp",
      "headers": {
        "Authorization": "Bearer <YOUR_TOKEN>"
      }
    }
  }
}

README

Dockhold for your AI coding tool

Put 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 and reports a live HTTPS URL. It can also read status and logs, set variables, and resize apps and managed databases.

No token to copy. Sign-in happens through the browser, the same way as the Dockhold CLI, and every client below shares it.

Install

Every 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.

Claude Code

/plugin marketplace add dockhold/mcp/plugin install dockhold@dockhold

This 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.

Cursor

[Add to Cursor]

The button opens this link in Cursor:

cursor://anysphere.cursor-deeplink/mcp/install?name=dockhold&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsImRvY2tob2xkIiwibWNwIl0sImVudiI6eyJET0NLSE9MRF9SRUYiOiJjdXJzb3IifX0=

Or add it by hand to ~/.cursor/mcp.json (all projects) or .cursor/mcp.json (one project):

json
{  "mcpServers": {    "dockhold": {      "command": "npx",      "args": ["-y", "dockhold", "mcp"],      "env": { "DOCKHOLD_REF": "cursor" }    }  }}

This repo is also an Agent Plugin (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.

VS Code

sh
code --add-mcp '{"name":"dockhold","command":"npx","args":["-y","dockhold","mcp"],"env":{"DOCKHOLD_REF":"vscode"}}'

Gemini CLI

sh
gemini extensions install https://github.com/dockhold/mcp

This 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.

Cline

Ask Cline to "install the MCP server from https://github.com/dockhold/mcp". It follows 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" }.

Any other MCP client

Use the same server entry in your client's config:

json
{  "mcpServers": {    "dockhold": {      "command": "npx",      "args": ["-y", "dockhold", "mcp"]    }  }}

If 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.

Sign in

The 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.

What it looks like

You: put this online

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.

(you sign in, the tab says you are done)

AI: Signed in. Deploying with npx dockhold deploy --name recipe-box. Uploading, building...

AI: Your app is live: https://recipe-box-a1b2c3.dockhold.app

You: show me the logs

AI: (calls get_app_logs) The last 100 lines: the server started on port 8080 and has served 3 requests. No errors.

Local 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.

Tools

ToolScopeWhat it does
list_appsreadList your apps with id, status, and URL
get_app_statusreadDeploy status, URL, last commit, error message for one app
get_app_logsreadRecent runtime logs for one app
get_resource_usagereadAccount pools (compute, database RAM, storage) and per-app sizes
list_github_reposreadYour connected GitHub repos, with the id needed to deploy private ones
deploy_appdeployDeploy a GitHub repo as a live web app
deploy_groupdeployDeploy several connected services in one go
redeploy_appdeployZero-downtime restart of an app
set_app_variabledeploySet a non-secret environment variable and roll it out
unset_app_variabledeployRemove a plain environment variable and roll it out
resize_appdeployChange an app's memory
resize_databasedeployChange a managed database's memory
resize_database_storagedeployGrow a managed database's disk
set_app_storagedeployGive an app storage that survives restarts and deploys, or grow it
remove_app_storagedeployRemove an app's storage and erase its files

The browser sign-in has the read and deploy scopes, which covers every tool above.

Remote server (no CLI)

For 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 under Settings, then API tokens (read-only, read+deploy, or with secrets), and pass it as a bearer:

json
{  "type": "streamable-http",  "url": "https://api.dockhold.eu/mcp",  "headers": { "Authorization": "Bearer dh_mcp_..." }}

Claude 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.

A 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.

Getting started with Dockhold

Dockhold 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. The free tier needs no card.

來源:README.md,提交 9d56079

工具

21

list_apps

List apps

List the apps in your Dockhold account, with each app's id, status, URL, and source repo. Call this first whenever the user asks about their apps, or when you need an app_id for any other tool.

無需輸入參數。

get_app_status

Get app status

Get detailed status for one app: deploy status, URL, last deployed commit, and any error message. Call this to check whether a deploy has finished, to get an app's live URL, or to see why an app is in error. Status DEPLOYING with ready_at set means the new version is already reachable at its URL and Dockhold is confirming it stays up; the user can open it now. It moves to RUNNING once confirmed, or to ERROR with an error_message if it crashed.

輸入參數app_id必填

get_app_logs

Get app logs

Get the most recent runtime logs for one app. Call this when an app is crashing, returning errors, or a deploy succeeded but the app misbehaves: the logs usually name the cause.

輸入參數tailapp_id必填

deploy_app

Deploy an app

Deploy a GitHub repository as a live web app on Dockhold. Call this when the user wants to put an app online, get a shareable HTTPS URL, or host a demo. Returns the new app id. Two paths: a PUBLIC repo needs only repo_url; a PRIVATE repo needs repo_url plus github_installation_id (call list_github_repos first, each repo comes with the installation_id to pass here). Deploying a private repo turns on auto-deploy: future pushes to that repo redeploy the app automatically. The app builds and comes online automatically; poll get_app_status to watch it. Set memory_mb to size the app's compute, one of the values get_resource_usage reports under compute.steps_mb: 256 MB fits a static site or a small API, 512 MB fits a typical Node or Python web app, and anything that holds data in memory needs more. Omit it and the app gets the minimum slice (256 MB) so it doesn't take your whole compute pool; resize_app changes the size later with no rebuild, applied as a rolling update that replaces the app's instances. The response reports memory_mb (what this app got) and compute_available_mb (what's left in your pool), so size the next app off that. This tool needs a GitHub repo URL: if the code only exists locally (no repo), it cannot be used here, and the user should run `npx dockhold login` then `npx dockhold deploy` in the project folder instead. Requires a token with the deploy scope.

輸入參數name必填repo_url必填memory_mbwith_databasegithub_installation_id

redeploy_app

Restart an app

Restart an existing app (rolling restart with zero downtime). Call this after changing configuration, or to recover an app that is stuck or misbehaving. It restarts the version already running. It does not build or pull new code: call rebuild_app for that. If this app has storage, it is stopped and started again instead, so it is unreachable for a few seconds.

輸入參數app_id必填

set_app_variable

Set an app variable

Set a single environment variable on an app and roll it out. Call this when an app needs plain configuration such as LOG_LEVEL or a feature flag. For secrets (API keys, passwords, tokens) call set_app_secret instead: this tool rejects secret-looking keys.

輸入參數key必填value必填app_id必填

unset_app_variable

Remove an app variable

Remove a single plain environment variable from an app and roll it out. The pair to set_app_variable; setting a variable to an empty string is not the same thing to most apps. Variables Dockhold sets itself (PORT, DATABASE_URL, DATA_DIR and the app's address) cannot be removed. For a secret, call unset_app_secret instead.

輸入參數key必填app_id必填

get_resource_usage

Show resource usage

Show your account's compute, database-RAM, and storage pools: how much you've bought, how much is used, and how much is free, plus every app's current size. Call this before any resize tool (the allowed sizes come from its steps fields), and to explain to the user why an app ran out of memory or a deploy was refused for capacity.

無需輸入參數。

resize_app

Resize app memory

Change how much memory one app gets. Call this when an app is running out of memory (OOM) or the user asks to make an app bigger or smaller. memory_mb must be one of the sizes get_resource_usage reports under compute.steps_mb, and the new size has to fit your available compute pool (call get_resource_usage first). Applied with a zero-downtime rolling update. If this app has storage, it is stopped and started again instead, so it is unreachable for a few seconds.

輸入參數app_id必填memory_mb必填

resize_database

Resize database memory

Change how much memory an app's managed database gets. Call this when the database is slow or out of memory. db_ram_mb must be one of the sizes get_resource_usage reports under db_ram.steps_mb and fit your database-RAM pool. WARNING: the database restarts briefly to apply the new size, so the app loses its database connection for a few seconds. Only works if the app has a managed database.

輸入參數app_id必填db_ram_mb必填

resize_database_storage

Grow database storage

Grow the disk of an app's managed database. Call this when the database is running out of disk space. GROW-ONLY: you can increase storage but never shrink it. storage_gb must be one of the sizes get_resource_usage reports under storage.steps_gb and fit your storage pool. Applied online with no database restart. Only works if the app has a managed database.

輸入參數app_id必填storage_gb必填

set_app_storage

Add or grow app storage

Give an app storage that survives restarts and deploys, or grow the storage it already has. Call this when the app has to keep files: a SQLite database file, uploads, or anything the user expects to still be there tomorrow. The app reads and writes the folder at the path in the DATA_DIR environment variable, which Dockhold sets; anything written outside DATA_DIR is scratch space and is lost on the next restart. size_gb must be one of the sizes get_resource_usage reports under volume.steps_gb and has to fit your storage pool, which is the same pool a managed database draws on, so call get_resource_usage first. Storage can grow but never shrink. Three things to tell the user before calling this: an app with storage runs as a single copy, it cannot have scheduled tasks, and from now on each deploy stops the running version before the new one starts, so the app is unreachable for a few seconds. Write the app to save its files when it receives SIGTERM.

輸入參數app_id必填size_gb必填

remove_app_storage

Remove app storage

Remove an app's storage and erase every file on it. This destroys data permanently: there is no undo and no backup. Ask the user to confirm in their own words first, then pass confirm true. Call it when the user asks for the storage to go, or when they want something storage rules out: running more than one copy of the app, or a scheduled task. Afterwards the app is back to scratch space, where anything it writes is lost on the next restart.

輸入參數app_id必填confirm必填

set_app_secret

Store an app secret

Store a sensitive value (an API key, a token, a password, a connection string) for one app. Use this instead of set_app_variable whenever the value would be damaging if someone else read it. The value is encrypted at rest, is injected into the app's environment under the name you give, and the app restarts to pick it up. Storing a secret takes effect on the next boot, so call this before telling the user the app is ready. This tool never reads a value back: there is no way to retrieve a stored secret through this connection, only through the dashboard while signed in. Two things to tell the user before you call it. First, this token can write secrets to every app on their account, not only this one. Second, any value they give you has passed through your context, so prefer a value you read from a local file such as .env over one you asked them to type into the chat, and suggest they rotate anything that was pasted. If the vault key name is already used by a different app, this call is refused rather than overwriting it, and the message tells you what to pass as vault_key_name.

輸入參數name必填value必填app_id必填vault_key_name

unset_app_secret

Remove an app secret

Stop injecting a stored secret into one app. The app restarts without it, so call this only when the app no longer needs that variable. The stored value stays in the account vault and any other app using it keeps working; deleting the stored value itself is a dashboard action. Do not report the secret as deleted, report it as removed from this app.

輸入參數name必填app_id必填

bind_app_secret

Attach a stored secret to an app

Attach a secret that is already stored in the account vault to one app, under the environment variable name the app reads, and restart the app. Call this when the user says the key already exists in Dockhold (call list_secrets to see the names), or when a second app should use the same stored value: nothing passes through your context and no value is stored again. Sharing one entry between apps means they share the value; if the user wants separate credentials per app, store a new value with set_app_secret under a distinct vault_key_name instead. This token can attach any secret on the account to any app on the account.

輸入參數nameapp_id必填vault_key_name必填

list_secrets

List the account's secret names

List the names of every secret stored in the account vault and how many apps use each, so you can attach an existing one with bind_app_secret instead of asking the user for the value again. Returns names and counts only. Secret values cannot be read back through this connection at all.

無需輸入參數。

list_app_secrets

List an app's secret names

List the names of the secrets attached to one app, so you can tell which ones an app already has before setting another. Returns names only. Secret values cannot be read back through this connection at all.

輸入參數app_id必填

list_github_repos

List connected GitHub repos

List the GitHub repositories you have connected to Dockhold, across every installation. Call this before deploy_app when the target repo is private, or when the user asks which repos they can deploy. Each repo comes with its installation_id: pass that (with the repo's clone URL) to deploy_app to deploy a PRIVATE repository. Public repos don't need it.

無需輸入參數。

rebuild_app

Build an app again

Builds the app again from the latest commit of its repository (or its last upload) and deploys it when the build passes. Use after a failed build, or to ship new commits when auto-deploy is off. One build per app at a time; limits on builds running and builds per hour; a refusal says when to try again. Poll get_app_status.

輸入參數app_id必填

deploy_group

Deploy a service group

Deploy several connected services in one go (e.g. a frontend + an API). Call this when the user's project is split across multiple repos that must talk to each other; for a single repo use deploy_app. Each service is a public GitHub repo that gets its own URL. Wire them by setting an env var to the exact token ${services.<otherServiceName>.url} — Dockhold injects that service's live URL once it deploys. Give the backend its own database with "db":"enable" (DATABASE_URL is injected; a pure frontend doesn't need one). Builds run in parallel; poll get_app_status with each returned app_id.

輸入參數services必填

版本歷史

2
  1. v0.2.0最新Sep 26, 2026
  2. v0.1.0Sep 16, 2026

評分

已滿足適用檢查項的 100%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分