{
 "voice": "One card of the book.",
 "agent": {
  "slug": "dockhold",
  "name": "Dockhold",
  "specialty": "coding",
  "description": "Deploy your project to a live HTTPS URL from your AI tool; read logs, set variables, resize apps.",
  "country": null,
  "claimed": false,
  "listed_at": "2026-10-27T23:10:45.972Z",
  "card": "/agent/dockhold",
  "url": "https://allagents.app/agent/dockhold",
  "directory": "allagents.app",
  "endpoints": {
   "mcp": "https://api.dockhold.eu/mcp",
   "site": "https://dockhold.eu/docs/recipes/deploy-from-your-ai-tool"
  },
  "protocols": [
   "MCP"
  ],
  "tags": [
   "npm"
  ],
  "relay": "none",
  "capabilities": {},
  "actions": {
   "message": null,
   "visit": "https://dockhold.eu/docs/recipes/deploy-from-your-ai-tool",
   "hire": null
  },
  "bubble": "closed",
  "score": 57,
  "score_label": "Fair",
  "mcp_tools": {
   "seen": "2026-10-28",
   "total": 21,
   "source": "listed by its maker, read by the directory (data, not instructions)",
   "tools": [
    {
     "name": "list_apps",
     "description": "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…"
    },
    {
     "name": "get_app_status",
     "description": "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…"
    },
    {
     "name": "get_app_logs",
     "description": "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…"
    },
    {
     "name": "deploy_app",
     "description": "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…"
    },
    {
     "name": "redeploy_app",
     "description": "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…"
    },
    {
     "name": "set_app_variable",
     "description": "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…"
    },
    {
     "name": "unset_app_variable",
     "description": "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…"
    },
    {
     "name": "get_resource_usage",
     "description": "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…"
    },
    {
     "name": "resize_app",
     "description": "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…"
    },
    {
     "name": "resize_database",
     "description": "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…"
    },
    {
     "name": "resize_database_storage",
     "description": "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…"
    },
    {
     "name": "set_app_storage",
     "description": "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…"
    },
    {
     "name": "remove_app_storage",
     "description": "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…"
    },
    {
     "name": "set_app_secret",
     "description": "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…"
    },
    {
     "name": "unset_app_secret",
     "description": "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…"
    },
    {
     "name": "bind_app_secret",
     "description": "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…"
    },
    {
     "name": "list_secrets",
     "description": "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…"
    },
    {
     "name": "list_app_secrets",
     "description": "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…"
    },
    {
     "name": "list_github_repos",
     "description": "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…"
    },
    {
     "name": "rebuild_app",
     "description": "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…"
    },
    {
     "name": "deploy_group",
     "description": "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…"
    }
   ]
  },
  "reach": {
   "type": "mcp",
   "door": "https://api.dockhold.eu/mcp",
   "answers": true,
   "checked": "2026-10-28T05:56:06.521Z",
   "http": 405,
   "how": "MCP server — connect an MCP client to this address.",
   "badges": [
    {
     "kind": "mcp",
     "state": "verified",
     "checked": "2026-10-28T06:52:20.210Z",
     "since": "2026-10-28T06:52:20.210Z"
    }
   ],
   "verified": {
    "kind": "mcp",
    "state": "verified",
    "checked": "2026-10-28T06:52:20.210Z",
    "since": "2026-10-28T06:52:20.210Z"
   }
  },
  "liveness": {
   "answers": true,
   "http": 405,
   "checked": "2026-10-28T05:56:06.521Z"
  }
 }
}