{"openapi":"3.1.0","info":{"title":"Digital Ocean Monitoring (BYOK) API","version":"0.1.0","description":"Digital Ocean Monitoring (BYOK) lets an AI assistant read your own Digital Ocean Monitoring data through the Digital Ocean Monitoring API with a key you supply (personal access token with monitoring read scope). Read-only: 9 tools (list_alert_policies, get_alert_policy, list_log_sinks, list_log_destinations, get_droplet_cpu_metrics, get_droplet_memory_available_metrics, get_droplet_load_metrics,...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-digitalocean-monitoring.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-digitalocean-monitoring/docs"},"termsOfService":"https://connectorbay.com/byok-digitalocean-monitoring/terms"},"servers":[{"url":"https://byok-digitalocean-monitoring.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-digitalocean-monitoring/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/list_alert_policies":{"post":{"operationId":"list_alert_policies","summary":"List alert policies with metric type, comparison, threshold, window, enabled flag, targeted Droplets or tags and notific","description":"List alert policies with metric type, comparison, threshold, window, enabled flag, targeted Droplets or tags and notification channels. Use for \"Which DigitalOcean monitoring alerts are configured\".","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 to return per page.","title":"Per Page"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"title":"list_alert_policiesArguments","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_alert_policy":{"post":{"operationId":"get_alert_policy","summary":"Get one alert policy by UUID with metric type, threshold, window, targets and notification channels. Use for \"What are t","description":"Get one alert policy by UUID with metric type, threshold, window, targets and notification channels. Use for \"What are the settings of alert policy 78b3da73-4e4d-4d11-9a54-a2bfe2bfe9a3\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"alert_uuid":{"description":"UUID of the alert policy, as shown by list_alert_policies.","maxLength":64,"title":"Alert Uuid","type":"string"}},"required":["alert_uuid"],"title":"get_alert_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_log_sinks":{"post":{"operationId":"list_log_sinks","summary":"List log forwarding sinks with their destination and the resources that send logs to them. Use for \"Where are my Digital","description":"List log forwarding sinks with their destination and the resources that send logs to them. Use for \"Where are my DigitalOcean resources sending logs\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"resource_id":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only sinks for the resource with this URN.","title":"Resource Id"}},"title":"list_log_sinksArguments","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_log_destinations":{"post":{"operationId":"list_log_destinations","summary":"List logging destinations (managed OpenSearch or external) with name, type, endpoint and retention. Use for \"Which loggi","description":"List logging destinations (managed OpenSearch or external) with name, type, endpoint and retention. Use for \"Which logging destinations exist on my DigitalOcean account\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_log_destinationsArguments","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_droplet_cpu_metrics":{"post":{"operationId":"get_droplet_cpu_metrics","summary":"Get CPU time series of a Droplet between two Unix timestamps, split by CPU mode (idle, user, system and others). Use for","description":"Get CPU time series of a Droplet between two Unix timestamps, split by CPU mode (idle, user, system and others). Use for \"How busy was Droplet 3164444 over the last hour\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"host_id":{"description":"Droplet id (number) whose metrics to read, as shown by the Droplet list of the main DigitalOcean connector.","maxLength":20,"title":"Host Id","type":"string"},"start":{"description":"Start of the range as a Unix timestamp in seconds, for example 1760000000.","maxLength":12,"title":"Start","type":"string"},"end":{"description":"End of the range as a Unix timestamp in seconds, later than start.","maxLength":12,"title":"End","type":"string"}},"required":["host_id","start","end"],"title":"get_droplet_cpu_metricsArguments","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_droplet_memory_available_metrics":{"post":{"operationId":"get_droplet_memory_available_metrics","summary":"Get available memory in bytes of a Droplet as a time series between two Unix timestamps. Use for \"How much free memory d","description":"Get available memory in bytes of a Droplet as a time series between two Unix timestamps. Use for \"How much free memory did Droplet 3164444 have this morning\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"host_id":{"description":"Droplet id (number) whose metrics to read, as shown by the Droplet list of the main DigitalOcean connector.","maxLength":20,"title":"Host Id","type":"string"},"start":{"description":"Start of the range as a Unix timestamp in seconds, for example 1760000000.","maxLength":12,"title":"Start","type":"string"},"end":{"description":"End of the range as a Unix timestamp in seconds, later than start.","maxLength":12,"title":"End","type":"string"}},"required":["host_id","start","end"],"title":"get_droplet_memory_available_metricsArguments","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_droplet_load_metrics":{"post":{"operationId":"get_droplet_load_metrics","summary":"Get the 5-minute load average of a Droplet as a time series between two Unix timestamps. Use for \"What was the load aver","description":"Get the 5-minute load average of a Droplet as a time series between two Unix timestamps. Use for \"What was the load average on Droplet 3164444 yesterday\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"host_id":{"description":"Droplet id (number) whose metrics to read, as shown by the Droplet list of the main DigitalOcean connector.","maxLength":20,"title":"Host Id","type":"string"},"start":{"description":"Start of the range as a Unix timestamp in seconds, for example 1760000000.","maxLength":12,"title":"Start","type":"string"},"end":{"description":"End of the range as a Unix timestamp in seconds, later than start.","maxLength":12,"title":"End","type":"string"}},"required":["host_id","start","end"],"title":"get_droplet_load_metricsArguments","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_droplet_disk_free_metrics":{"post":{"operationId":"get_droplet_disk_free_metrics","summary":"Get free filesystem space in bytes of a Droplet as a time series between two Unix timestamps. Use for \"Is Droplet 316444","description":"Get free filesystem space in bytes of a Droplet as a time series between two Unix timestamps. Use for \"Is Droplet 3164444 running out of disk space\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"host_id":{"description":"Droplet id (number) whose metrics to read, as shown by the Droplet list of the main DigitalOcean connector.","maxLength":20,"title":"Host Id","type":"string"},"start":{"description":"Start of the range as a Unix timestamp in seconds, for example 1760000000.","maxLength":12,"title":"Start","type":"string"},"end":{"description":"End of the range as a Unix timestamp in seconds, later than start.","maxLength":12,"title":"End","type":"string"}},"required":["host_id","start","end"],"title":"get_droplet_disk_free_metricsArguments","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_droplet_bandwidth_metrics":{"post":{"operationId":"get_droplet_bandwidth_metrics","summary":"Get network traffic of a Droplet in megabits per second for one interface and direction between two Unix timestamps. Use","description":"Get network traffic of a Droplet in megabits per second for one interface and direction between two Unix timestamps. Use for \"How much public outbound traffic did Droplet 3164444 send in the last hour\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"host_id":{"description":"Droplet id (number) whose metrics to read, as shown by the Droplet list of the main DigitalOcean connector.","maxLength":20,"title":"Host Id","type":"string"},"interface":{"description":"Network interface: public or private.","enum":["public","private"],"title":"Interface","type":"string"},"direction":{"description":"Traffic direction: inbound or outbound.","enum":["inbound","outbound"],"title":"Direction","type":"string"},"start":{"description":"Start of the range as a Unix timestamp in seconds, for example 1760000000.","maxLength":12,"title":"Start","type":"string"},"end":{"description":"End of the range as a Unix timestamp in seconds, later than start.","maxLength":12,"title":"End","type":"string"}},"required":["host_id","interface","direction","start","end"],"title":"get_droplet_bandwidth_metricsArguments","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}}}}