{"name":"digitalocean-openapi-agent","description":"Cloud control-plane API for compute, storage, networking, databases, and AI features.","version":"2.0","skills":[{"id":"auto","name":"auto","description":"Use the OpenAPI service to complete a natural-language goal.","tags":["openapi","auto"],"scopes":[],"stream":false,"policy":{"timeout_seconds":900.0,"idempotent":false,"max_retries":0,"cost_class":null,"allow_scope_expansion":false,"grant_mode":null,"grant_allow_patterns":[],"grant_deny_patterns":[],"grant_outputs_prefix":null,"grant_write_prefixes":[],"grant_ttl_seconds":null,"grant_run_timeout_seconds":null,"grant_approval_timeout_seconds":null,"grant_scope_approval_timeout_seconds":null},"input_schema":{"type":"object","properties":{"goal":{"type":"string"}},"required":["goal"],"additionalProperties":false},"output_schema":{"additionalProperties":true,"type":"object"}}],"capabilities":{"openapi_auto_agent":{"operation_count":500,"default_base_url":"https://api.digitalocean.com","source_openapi_url":"https://raw.githubusercontent.com/digitalocean/openapi/main/specification/DigitalOcean-public.v2.yaml","source_openapi_urls":["https://raw.githubusercontent.com/digitalocean/openapi/main/specification/DigitalOcean-public.v2.yaml"],"server_urls":["https://api.digitalocean.com"],"regenerable":true,"security_schemes":["bearer_auth","inference_bearer_auth"]},"a2a_pack":{"package":"a2a-pack","version":"0.1.102"},"mcp":{"standard":{"path":"/mcp","intended_for":"code_sdk_clients"},"connector":{"path":"/connector-mcp","intended_for":["chatgpt","claude","hosted_connectors"],"supports_async_jobs":true,"supports_structured_interrupts":true,"poll_tool":"job_result","resume_tool":"submit_interaction","instructions":"Use this URL for hosted connector UIs. Use /mcp for normal code or SDK MCP clients."}}},"input_modes":["application/json"],"output_modes":["application/json"],"required_secrets":[],"required_env":[],"consumer_setup":{"fields":[{"name":"OPENAPI_BASE_URL","kind":"config","label":"API base URL","description":"Override the default API server (https://api.digitalocean.com).","required":false,"input_type":"url","options":[]},{"name":"HTTP_METHOD","kind":"secret","label":"bearer_auth bearer credential","description":"## OAuth Authentication\n\nIn order to interact with the DigitalOcean API, you or your application must\nauthenticate.\n\nThe DigitalOcean API handles this through OAuth, an open standard for\nauthorization. OAuth allows you to delegate access to your account.\nScopes can be used to grant full access, read-only access, or access to\na specific set of endpoints.\n\nYou can generate an OAuth token by visiting the [Apps & API](https://cloud.digitalocean.com/account/api/tokens)\nsection of the DigitalOcean control panel for your account.\n\nAn OAuth token functions as a complete authentication request. In effect, it\nacts as a substitute for a username and password pair.\n\nBecause of this, it is absolutely **essential** that you keep your OAuth\ntokens secure. In fact, upon generation, the web interface will only display\neach token a single time in order to prevent the token from being compromised.\n\nDigitalOcean access tokens begin with an identifiable prefix in order to\ndistinguish them from other similar tokens.\n\n- `dop_v1_` for personal access tokens generated in the control panel\n- `doo_v1_` for tokens generated by applications using [the OAuth flow](https://docs.digitalocean.com/reference/api/oauth-api/)\n- `dor_v1_` for OAuth refresh tokens\n\n### Scopes\n\nScopes act like permissions assigned to an API token. These permissions\ndetermine what actions the token can perform. You can create API\ntokens that grant read-only access, full access, or limited access to\nspecific endpoints by using custom scopes.\n\nGenerally, scopes are designed to match HTTP verbs and common CRUD\noperations (Create, Read, Update, Delete).\n\n| HTTP Verb | CRUD Operation | Scope |\n|---|---|---|\n| GET | Read | `<resource>:read` |\n| POST | Create | `<resource>:create` |\n| PUT/PATCH | Update | `<resource>:update` |\n| DELETE | Delete | `<resource>:delete` |\n\nFor example, creating a new Droplet by making a `POST` request to the\n`/v2/droplets` endpoint requires the `droplet:create` scope while\nlisting Droplets by making a `GET` request to the `/v2/droplets`\nendpoint requires the `droplet:read` scope.\n\nEach endpoint below specifies which scope is required to access it when\nusing custom scopes.\n\n### How to Authenticate with OAuth\n\nIn order to make an authenticated request, include a bearer-type\n`Authorization` header containing your OAuth token. All requests must be\nmade over HTTPS.\n\n### Authenticate with a Bearer Authorization Header\n\n```\ncurl -X $HTTP_METHOD -H \"Authorization: Bearer $DIGITALOCEAN_TOKEN\" \"https://api.digitalocean.com/v2/$OBJECT\"\n```","required":true,"input_type":"password","options":[]},{"name":"DIGITALOCEAN_TOKEN","kind":"secret","label":"inference_bearer_auth bearer credential","description":"## OAuth Authentication\n\nIn order to interact with the DigitalOcean API, you or your application must\nauthenticate.\n\nThe DigitalOcean API handles this through OAuth, an open standard for\nauthorization. OAuth allows you to delegate access to your account.\nScopes can be used to grant full access, read-only access, or access to\na specific set of endpoints.\n\nYou can generate an OAuth token by visiting the [Apps & API](https://cloud.digitalocean.com/account/api/tokens)\nsection of the DigitalOcean control panel for your account.\n\nAn OAuth token functions as a complete authentication request. In effect, it\nacts as a substitute for a username and password pair.\n\nBecause of this, it is absolutely **essential** that you keep your OAuth\ntokens secure. In fact, upon generation, the web interface will only display\neach token a single time in order to prevent the token from being compromised.\n\nDigitalOcean access tokens begin with an identifiable prefix in order to\ndistinguish them from other similar tokens.\n\n- `dop_v1_` for personal access tokens generated in the control panel\n- `doo_v1_` for tokens generated by applications using [the OAuth flow](https://docs.digitalocean.com/reference/api/oauth-api/)\n- `dor_v1_` for OAuth refresh tokens\n\n### Authenticate with a Bearer Authorization Header\n\n**Serverless Inference:**\n\n```\ncurl -X POST -H \"Authorization: Bearer $DIGITALOCEAN_TOKEN\" \"https://inference.do-ai.run/v1/chat/completions\"\n```\n\n**Agent Inference:**\n\n```\ncurl -X POST -H \"Authorization: Bearer $AGENT_ACCESS_KEY\" \"https://{your-agent-url}.agents.do-ai.run/v1/chat/completions?agent=true\"\n```\n\n**Note:** Agent Inference APIs use an `agent_access_key` (endpoint access\nkey) instead of a DigitalOcean OAuth token. The `agent_access_key` is\nprovided when you provision an agent endpoint and is scoped to that\nspecific agent. It is not interchangeable with DigitalOcean OAuth tokens\n(`dop_v1_*`, `doo_v1_*`, `dor_v1_*`), which are used with Serverless\nInference and the control-plane API at `https://api.digitalocean.com`.","required":false,"input_type":"password","options":[]}]},"runtime":{"lifecycle":"ephemeral","availability":"on_demand","state":"none","sandbox":"microsandbox","resources":{"cpu":"200m","memory":"512Mi","gpu":0,"max_runtime_seconds":600},"concurrency":1,"egress":{"allow_hosts":["api.digitalocean.com"],"allow_internal_services":[],"deny_internet_by_default":true},"tools_used":["openapi","deepagents"],"llm_provisioning":"platform","pricing":{"price_per_call_usd":0.0,"caller_pays_llm":true,"notes":"Uses the caller's saved LLM credential through ctx.llm."},"wants_cp_jwt":false,"platform_resources":{"memory":null,"databases":[]},"endpoints":[],"apt_packages":[]},"state_schema":null,"workspace_access":{"enabled":false,"max_files":0,"allowed_modes":[],"require_reason":true,"deny_patterns":[],"require_human_approval":false,"max_total_size_bytes":104857600},"mcp_endpoint":"/mcp","connector_mcp_endpoint":"/connector-mcp","mcp_endpoints":{"standard":{"path":"/mcp","intended_for":"code_sdk_clients"},"connector":{"path":"/connector-mcp","intended_for":["chatgpt","claude","hosted_connectors"],"supports_async_jobs":true,"supports_structured_interrupts":true,"poll_tool":"job_result","resume_tool":"submit_interaction","instructions":"Use this URL for hosted connector UIs. Use /mcp for normal code or SDK MCP clients."}}}