Provider REST API

Infrastructure

Connect Claude to DigitalOcean

Inspect droplets, managed databases, App Platform apps, Kubernetes clusters, load balancers, and billing. Toolspoke puts 12 of its actions behind one MCP endpoint that Claude, Cursor, and Codex all speak.

Connection
Provider REST API
Authentication
Personal access token
Actions exposed
12
Cost per call (typical)
1 credit
Adapter
Maintained by Toolspoke

Connected in three steps

  1. 1

    Install DigitalOcean

    Open the marketplace in your workspace, add DigitalOcean to the project your agents work in, and it appears on the gateway immediately.

  2. 2

    Connect the credential

    Authenticate with personal access token. Where to get one, and what it has to be able to reach, is the next section.

  3. 3

    Point your agent at the gateway

    Give your client one address, https://toolspoke.com/mcp. Claude Code takes it as a command, Claude and Claude Desktop add it as a custom connector, and Cursor, Codex and VS Code each read it from a config file of their own.

.mcp.json
{
  "mcpServers": {
    "toolspoke": {
      "type": "http",
      "url": "https://toolspoke.com/mcp"
    }
  }
}

One block covers every tool you have installed. DigitalOcean shows up in the client as soon as your policy allows it, and so does everything else you install later.

Where the address goes, per client

Claude Code

Run it in your project, then /mcp to sign in

claude mcp add --transport http toolspoke https://toolspoke.com/mcp
Claude and Claude Desktop

Settings, then Connectors, then Add custom connector

https://toolspoke.com/mcp
Cursor

~/.cursor/mcp.json, or .cursor/mcp.json for one project

{ "mcpServers": { "toolspoke": { "url": "https://toolspoke.com/mcp" } } }
Codex

~/.codex/config.toml

[mcp_servers.toolspoke]
url = "https://toolspoke.com/mcp"
VS Code

.vscode/mcp.json, or the MCP: Add Server command

{ "servers": { "toolspoke": { "type": "http", "url": "https://toolspoke.com/mcp" } } }

What DigitalOcean asks for

Personal access token. You provide it once, when you install the connector. Toolspoke encrypts it at rest and decrypts it only for the length of a single call, and the gateway attaches it to the outbound request itself, so it is never part of the arguments an agent sends.

Personal access tokenRequired
Cloud control panel → API → Tokens → Generate New Token. A read-only token covers every operation here except reboot_droplet, which needs write. Scopes can be narrowed further per resource - droplet:read, app:read, database:read, kubernetes:read, load_balancer:read, billing:read and account:read are the full set these reads use.
dop_v1_…

What Claude can do in DigitalOcean

12 actions, each one declared and named by the connector rather than discovered at runtime. A workspace policy grants a person all of them, a hand-picked selection, everything on the read side, everything on the write side, or none.

Reads
11Reads
Writes
0Writes
Destructive
1Destructive

Reads

11

Fetches data and changes nothing.

  • get_account

    Return the account this token belongs to - its email, team, status, and the droplet, volume and floating-IP limits it is allowed. Call it to confirm which account the connection reaches before acting on anything in it.

  • list_droplets

    List the account's droplets with each one's id, name, status, region, size, image and network addresses. Call this first to get the numeric droplet id every other droplet action takes. Note that tag_name cannot be combined with name or type - DigitalOcean rejects the request rather than intersecting them.

  • get_droplet

    Fetch one droplet by id, including its region, size, attached volumes, backup and monitoring features, kernel, and every network interface with its addresses.

  • list_droplet_actions

    List the actions that have run against one droplet, newest last, with each action's type, status, and start and completion times. Use it to see whether a reboot finished, and to read the history of what has been done to a machine before doing anything else to it.

  • list_databases

    List the account's managed database clusters with each one's engine, version, size, region, node count and status. The response carries each cluster's connection block, which includes the admin user's password, so it is recorded as a call but its body is never written to the audit log.

  • get_database_cluster

    Fetch one managed database cluster by its UUID - engine and version, node count and size, region, maintenance window, firewall rules, and its connection details. Those connection details include the admin password in plain text, which is why this response is never written to the audit log.

  • list_apps

    List the App Platform apps in the account with each one's id, name, region, live deployment and spec. The spec carries the app's environment variables - values typed SECRET come back encrypted, but everything else comes back as written - so this response is not kept in the audit log.

  • get_app

    Fetch one App Platform app - its full spec (services, workers, static sites, databases, routes and environment variables), its active deployment, and its default ingress hostname. The app id is always required; name is an extra filter DigitalOcean accepts alongside it, not a substitute for it. Environment variables are part of the spec, so this response is not written to the audit log.

  • list_kubernetes_clusters

    List the account's DOKS clusters with each one's id, name, region, Kubernetes version, VPC, node pools and status. Reading a cluster's workloads is the Kubernetes connector's job - this one answers what clusters exist and how they are configured.

  • list_load_balancers

    List the account's load balancers with each one's public IP, algorithm, forwarding rules, health check, sticky-session settings, and the droplet ids sitting behind it. Use it to find out what actually receives traffic before touching any of those droplets.

  • list_billing_history

    List the account's billing history - invoices, payments and other charges, each with its type, description, amount and date. Use it to answer what this account has been charged and when. Needs the billing:read scope.

Destructive

1

Deletes or permanently alters something. Worth granting on purpose.

  • reboot_droplet

    Restart one droplet. "reboot" asks the guest operating system to restart cleanly; "power_cycle" is the equivalent of pushing the reset button, and DigitalOcean documents it as such. Both drop every live connection to the machine, and nothing replays what was in flight, which is why this is gated as destructive rather than as an ordinary write - a write grant cannot reach it. The disk is preserved either way. Returns an action; poll it with list_droplet_actions. This connector deliberately exposes only these two of the action types the endpoint accepts: rebuild and restore overwrite the disk, resize with disk changes is not reversible downward, and enable_ipv6 cannot be undone, so none of them are reachable here.

What it will not do

Enforced by the gateway rather than left to convention, which is why each of these can be stated flatly.

It cannot call anything else
The 12 actions above are the whole of it. A call to any other name is refused before it reaches DigitalOcean rather than forwarded on, and connecting your account does not add to the list: it is fixed by the connector, not discovered at run time.
It reaches no further than your credential
Toolspoke holds no access to DigitalOcean of its own. Every call carries the credential you stored and nothing besides, so whatever that credential cannot reach, this connector cannot reach either.
It never hears from DigitalOcean
Nothing is pushed to it. There is no webhook, no subscription and no polling, so this connector cannot notice by itself that something changed in DigitalOcean. An agent has to ask.
It does not smooth over provider limits
Toolspoke does not retry, queue or back off around DigitalOcean's own rate limits. A call that DigitalOcean refuses comes back to the agent as a failed call.

Before you connect it

What can Claude do in DigitalOcean?

12 named actions: 11 that only read and 1 that delete or permanently alter something. They include get_account, list_droplets and get_droplet. Nothing outside that list is reachable: the connector declares each operation by name rather than proxying whatever an agent asks for.

What credentials does the DigitalOcean connector need?

Personal access token. The connector asks for personal access token. Values are encrypted at rest and attached to the outbound request by the gateway, so they are never part of the arguments an agent sends and never reach the audit log.

Does the DigitalOcean connector work with Cursor and Codex, or only Claude?

Any client that speaks MCP, and every one of them gets the same 12 actions. There is a single address, https://toolspoke.com/mcp. Claude Code adds it with claude mcp add --transport http, Claude and Claude Desktop take it as a custom connector in settings, Cursor reads it from .cursor/mcp.json, Codex from ~/.codex/config.toml, and VS Code from .vscode/mcp.json. Each of them signs in to the gateway itself, so there is no key to paste.

What does the DigitalOcean connector not do?

The 12 actions above are the whole of it. A call to any other name is refused before it reaches DigitalOcean rather than forwarded on, and connecting your account does not add to the list: it is fixed by the connector, not discovered at run time. Toolspoke holds no access to DigitalOcean of its own. Every call carries the credential you stored and nothing besides, so whatever that credential cannot reach, this connector cannot reach either. Nothing is pushed to it. There is no webhook, no subscription and no polling, so this connector cannot notice by itself that something changed in DigitalOcean. An agent has to ask. Toolspoke does not retry, queue or back off around DigitalOcean's own rate limits. A call that DigitalOcean refuses comes back to the agent as a failed call.

Can I limit which actions an agent can call?

Yes, in two places. The project switches DigitalOcean's actions on and off one at a time, for everyone in the project at once, and the screen groups them by read, write and destructive so turning off everything that deletes is one click. An individual agent key can then be narrowed further, to particular toolkits in a project and to particular actions in a toolkit. Whatever it was granted, a key never reaches a project its owner cannot.

What gets recorded when an agent calls DigitalOcean?

Every attempt, with the agent that made it and the person that agent belongs to, the full request payload, the response payload, the status, the duration, and the credits spent. Values whose key names a secret are masked out before the record is shown to anyone. An operation the connector marks as not retained never has its response body written at all, so the gateway keeps no second copy of what was read.