Kubernetes MCP Server
Manage Kubernetes and OpenShift clusters from an assistant through the cluster's API
Manage DigitalOcean droplets, apps, databases, Kubernetes, networking and storage from an MCP client
Official · DigitalOcean Labs Go Remote (hosted) · Streamable HTTPLocal · stdio Cloud platformsDevOps and monitoringDatabases
65 popularity score ★ 138 ↓ 4.7k/wk
Opens the app, which asks before it adds the server.
claude mcp add --transport http digitalocean-apps https://apps.mcp.digitalocean.com/mcphttps://apps.mcp.digitalocean.com/mcp{
"mcpServers": {
"digitalocean-integration": {
"url": "https://apps.mcp.digitalocean.com/mcp"
}
}
}{
"servers": {
"digitalocean-integration": {
"type": "http",
"url": "https://apps.mcp.digitalocean.com/mcp"
}
}
}Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.
It needs DIGITALOCEAN_API_TOKEN. Replace each <NAME> with your value.
claude mcp add digitalocean-integration -e DIGITALOCEAN_API_TOKEN=<DIGITALOCEAN_API_TOKEN> -- npx @digitalocean/mcp --services apps{
"mcpServers": {
"digitalocean-integration": {
"command": "npx",
"args": [
"@digitalocean/mcp",
"--services",
"apps"
],
"env": {
"DIGITALOCEAN_API_TOKEN": "<DIGITALOCEAN_API_TOKEN>"
}
}
}
}{
"mcpServers": {
"digitalocean-integration": {
"command": "npx",
"args": [
"@digitalocean/mcp",
"--services",
"apps"
],
"env": {
"DIGITALOCEAN_API_TOKEN": "<DIGITALOCEAN_API_TOKEN>"
}
}
}
}{
"servers": {
"digitalocean-integration": {
"type": "stdio",
"command": "npx",
"args": [
"@digitalocean/mcp",
"--services",
"apps"
],
"env": {
"DIGITALOCEAN_API_TOKEN": "<DIGITALOCEAN_API_TOKEN>"
}
}
}
}[mcp_servers.digitalocean-integration]
command = "npx"
args = ["@digitalocean/mcp", "--services", "apps"]
[mcp_servers.digitalocean-integration.env]
DIGITALOCEAN_API_TOKEN = "<DIGITALOCEAN_API_TOKEN>"gemini mcp add --scope user -e DIGITALOCEAN_API_TOKEN=<DIGITALOCEAN_API_TOKEN> digitalocean-integration npx -- @digitalocean/mcp --services appsDIGITALOCEAN_API_TOKEN secret |
Required: DigitalOcean personal access token. The stdio server exits without it. |
|---|---|
SERVICES |
Optional: Comma-separated services to load, same as --services. All services load when empty. |
DIGITALOCEAN_API_ENDPOINT |
Optional: API base URL. |
LOG_LEVEL |
Optional: debug, info, warn or error. |
TRANSPORT |
Optional: stdio or http. |
| Set together: http | |
BIND_ADDR |
Optional: Listen address when TRANSPORT is http. |
ALLOW_ANONYMOUS |
Optional: Drops the bearer check and OAuth metadata on http transport. Needs SERVICES=docs alone and does nothing on stdio. |
MCP_RESOURCE_URL |
Optional: Public base URL named in the OAuth resource metadata on http transport, taken from each request when unset. |
This is DigitalOcean's own MCP server for its cloud. It calls the DigitalOcean public API through the godo Go client, so an assistant can list, create, change and delete resources in your account. That covers droplets and images, App Platform apps, managed databases, Kubernetes (DOKS) clusters, the container registry, domains and DNS, firewalls, load balancers, VPCs and CDNs, Spaces object storage, volumes, NFS shares, serverless functions, Marketplace apps, Insights monitoring and uptime checks, account and billing details, and several GenAI and inference products. A docs service searches DigitalOcean's public documentation.
Tools come in 24 services. Locally, the npm package @digitalocean/mcp starts a Go binary over stdio, and --services picks which groups load (apps,droplets for example). Leave it out and every service loads, which makes for a very long tool list. An unknown service name stops it at start. DigitalOcean also hosts each service at its own HTTPS address, such as https://apps.mcp.digitalocean.com/mcp, which takes OAuth sign-in or a personal access token as a bearer header.
The same binary can serve HTTP itself with --transport http. It binds to 127.0.0.1:8080 unless --bind-addr is set, and reads the token from each request's Authorization header. Since 1.6.5 there is an --allow-anonymous switch (or ALLOW_ANONYMOUS) for running the docs service over HTTP with no token check and no OAuth metadata. main.go refuses to start with it unless --services names docs alone, and on stdio it is ignored.
| To run it yourself | Node.js 18+ |
|---|---|
| Runs on | macOS, Windows, Linux |
| DigitalOcean | Paid planResources you create through the tools are billed to the account |
For the local npm way you need npm 8 or later and a personal access token in DIGITALOCEAN_API_TOKEN, created in the DigitalOcean control panel. The token's scopes decide what the tools can do. On stdio the binary exits without a token even when only the docs service is loaded, though the docs tools themselves never use it. The hosted endpoints need no local runtime: a client with OAuth support signs in through the browser, and others send the token as a bearer header.
The hosted endpoints are one URL per service, so you add one entry for each product you want. In stdio mode the server exits at start if it has no token (set by DIGITALOCEAN_API_TOKEN or --digitalocean-api-token). The README advises enabling only the services you need, to keep context small and answers accurate. Its example tool names for droplets (droplet-resize, droplet-enable-backups) differ from the names in the droplet service's own README (resize-droplet, enable-backups-droplet). The makers link a warning that using MCP with a DigitalOcean account carries risks. Actions such as creating droplets or databases bill your account.
Suits DigitalOcean users who want an assistant to inspect and run their infrastructure and prefer the vendor's own server. The hosted OAuth endpoints suit people who would rather not handle a token. The local npm way suits clients without OAuth, or anyone who wants one process carrying several services picked with --services. Teams self-hosting a public docs lookup can run the docs service over HTTP with --allow-anonymous. It is a poor fit for read-only use: delete tools for droplets, apps and VPC peerings load with their service, so limit what the token can do. Teams on AWS, Google Cloud or Azure need a different server.
21 only read, 13 change things, 3 can delete or overwrite.
droplet-create changesdroplet-delete deletesdroplet-getdroplet-listdroplet-reboot changesresize-droplet changessnapshot-droplet changespower-off-droplets-tag changesimage-listsize-listapps-listapps-get-infocreate-app-from-spec changesapps-update changesapps-delete deletesapps-get-deployment-statusapps-usagekey-create changesdomain-create changescdn-flush-cache changesvpc-peering-create changesvpc-peering-delete deletesmicrovm-exec changesinference-model-catalog-searchinference-model-catalog-get-cardinsights-resource-listinsights-resource-getinsights-resource-update-signals changesinsights-logs-searchinsights-trace-getuptimecheck-getdocs-searchdocs-get-pagedocs-find-for-servicedocs-get-quickstartdocs-troubleshootdocs-get-related