{"openapi":"3.1.0","info":{"title":"Digital Ocean Droplets (BYOK) API","version":"0.1.0","description":"Digital Ocean Droplets (BYOK) lets an AI assistant read your own Digital Ocean Droplets data through the Digital Ocean Droplets API with a key you supply (personal access token with Droplet read scope). Read-only: 11 tools (get_droplet, list_droplet_backups, list_droplet_snapshots, get_backup_policy, list_droplet_firewalls, list_droplet_neighbors, list_autoscale_pools, list_autoscale_members,...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-digitalocean-droplets.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-digitalocean-droplets/docs"},"termsOfService":"https://connectorbay.com/byok-digitalocean-droplets/terms"},"servers":[{"url":"https://byok-digitalocean-droplets.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-digitalocean-droplets/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/get_droplet":{"post":{"operationId":"get_droplet","summary":"Get one Droplet: status, size, memory, CPUs, disk, region, image, tags, VPC, features, attached volumes and network addr","description":"Get one Droplet: status, size, memory, CPUs, disk, region, image, tags, VPC, features, attached volumes and network addresses. Use for \"What are the IP addresses and size of Droplet 3164444\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"droplet_id":{"description":"Droplet id (number), as returned by the Droplet list of the main DigitalOcean connector.","title":"Droplet Id","type":"integer"}},"required":["droplet_id"],"title":"get_dropletArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_droplet_backups":{"post":{"operationId":"list_droplet_backups","summary":"List the backups of a Droplet with size, regions and creation time. Use for \"Does Droplet 3164444 have backups\".","description":"List the backups of a Droplet with size, regions and creation time. Use for \"Does Droplet 3164444 have backups\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"droplet_id":{"description":"Droplet id (number), as returned by the Droplet list of the main DigitalOcean connector.","title":"Droplet Id","type":"integer"},"per_page":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many results per page (1 to 200).","title":"Per Page"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1; meta.total says how many items exist.","title":"Page"}},"required":["droplet_id"],"title":"list_droplet_backupsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_droplet_snapshots":{"post":{"operationId":"list_droplet_snapshots","summary":"List the snapshots of a Droplet with size, regions and creation time. Use for \"Which snapshots exist for Droplet 3164444","description":"List the snapshots of a Droplet with size, regions and creation time. Use for \"Which snapshots exist for Droplet 3164444\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"droplet_id":{"description":"Droplet id (number), as returned by the Droplet list of the main DigitalOcean connector.","title":"Droplet Id","type":"integer"},"per_page":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many results per page (1 to 200).","title":"Per Page"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1; meta.total says how many items exist.","title":"Page"}},"required":["droplet_id"],"title":"list_droplet_snapshotsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_backup_policy":{"post":{"operationId":"get_backup_policy","summary":"Get the backup policy of a Droplet: whether backups are enabled, the plan and the next backup window. Use for \"When is t","description":"Get the backup policy of a Droplet: whether backups are enabled, the plan and the next backup window. Use for \"When is the next backup of Droplet 3164444\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"droplet_id":{"description":"Droplet id (number), as returned by the Droplet list of the main DigitalOcean connector.","title":"Droplet Id","type":"integer"}},"required":["droplet_id"],"title":"get_backup_policyArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_droplet_firewalls":{"post":{"operationId":"list_droplet_firewalls","summary":"List the Cloud Firewalls applied to a Droplet with their rules. Use for \"Which firewalls apply to Droplet 3164444\".","description":"List the Cloud Firewalls applied to a Droplet with their rules. Use for \"Which firewalls apply to Droplet 3164444\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"droplet_id":{"description":"Droplet id (number), as returned by the Droplet list of the main DigitalOcean connector.","title":"Droplet Id","type":"integer"},"per_page":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many results per page (1 to 200).","title":"Per Page"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1; meta.total says how many items exist.","title":"Page"}},"required":["droplet_id"],"title":"list_droplet_firewallsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_droplet_neighbors":{"post":{"operationId":"list_droplet_neighbors","summary":"List the Droplets that share a physical host with a Droplet (noisy-neighbor check) with name, status and size. Use for \"","description":"List the Droplets that share a physical host with a Droplet (noisy-neighbor check) with name, status and size. Use for \"Which Droplets share a host with Droplet 3164444\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"droplet_id":{"description":"Droplet id (number), as returned by the Droplet list of the main DigitalOcean connector.","title":"Droplet Id","type":"integer"}},"required":["droplet_id"],"title":"list_droplet_neighborsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_autoscale_pools":{"post":{"operationId":"list_autoscale_pools","summary":"List Droplet autoscale pools with name, status and active Droplet count. Use for \"Which autoscale pools do I have\".","description":"List Droplet autoscale pools with name, status and active Droplet count. Use for \"Which autoscale pools do I have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"pool_name":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Only the pool with this exact name.","title":"Pool Name"},"per_page":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many results per page (1 to 200).","title":"Per Page"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1; meta.total says how many items exist.","title":"Page"}},"title":"list_autoscale_poolsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_autoscale_members":{"post":{"operationId":"list_autoscale_members","summary":"List the Droplets of an autoscale pool with health status, state and utilization. Use for \"Are all Droplets in my autosc","description":"List the Droplets of an autoscale pool with health status, state and utilization. Use for \"Are all Droplets in my autoscale pool healthy\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"autoscale_pool_id":{"description":"Autoscale pool id (UUID), as returned by list_autoscale_pools.","maxLength":64,"title":"Autoscale Pool Id","type":"string"},"per_page":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many results per page (1 to 200).","title":"Per Page"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1; meta.total says how many items exist.","title":"Page"}},"required":["autoscale_pool_id"],"title":"list_autoscale_membersArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_autoscale_history":{"post":{"operationId":"list_autoscale_history","summary":"List the scaling events of an autoscale pool: reason, current and desired instance count and status. Use for \"Why did my","description":"List the scaling events of an autoscale pool: reason, current and desired instance count and status. Use for \"Why did my autoscale pool scale up\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"autoscale_pool_id":{"description":"Autoscale pool id (UUID), as returned by list_autoscale_pools.","maxLength":64,"title":"Autoscale Pool Id","type":"string"},"per_page":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many results per page (1 to 200).","title":"Per Page"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1; meta.total says how many items exist.","title":"Page"}},"required":["autoscale_pool_id"],"title":"list_autoscale_historyArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_sizes":{"post":{"operationId":"list_sizes","summary":"List Droplet sizes with slug, memory, CPUs, disk, transfer, monthly and hourly price in USD, and availability. Use for \"","description":"List Droplet sizes with slug, memory, CPUs, disk, transfer, monthly and hourly price in USD, and availability. Use for \"How much does a 2 vCPU Droplet cost per month\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"per_page":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many results per page (1 to 200).","title":"Per Page"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1; meta.total says how many items exist.","title":"Page"}},"title":"list_sizesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_regions":{"post":{"operationId":"list_regions","summary":"List DigitalOcean regions with slug, name, features, availability and the Droplet sizes offered. Use for \"Which DigitalO","description":"List DigitalOcean regions with slug, name, features, availability and the Droplet sizes offered. Use for \"Which DigitalOcean regions are available and what do they support\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"per_page":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many results per page (1 to 200).","title":"Per Page"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1; meta.total says how many items exist.","title":"Page"}},"title":"list_regionsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}