Skip to main content
Glama

DigitalOcean MCP Server

droplets.goβ€’3 kB
package handlers import ( "context" "fmt" "github.com/digitalocean/godo" mcp_golang "github.com/metoro-io/mcp-golang" ) func (h *Handler) ListDroplets(page, perPage int) (*mcp_golang.ToolResponse, error) { client := h.doClient.GetClient() // Set default values if not provided if page <= 0 { page = 1 } if perPage <= 0 { perPage = 25 } // Limit perPage to DigitalOcean's maximum of 200 if perPage > 200 { perPage = 200 } droplets, response, err := client.Droplets.List(context.Background(), &godo.ListOptions{ Page: page, PerPage: perPage, }) if err != nil { return h.HandleError(err, "list_droplets") } // Transform droplets to only include ID, Name, and Status simplifiedDroplets := make([]map[string]interface{}, len(droplets)) for i, droplet := range droplets { simplifiedDroplets[i] = map[string]interface{}{ "id": droplet.ID, "name": droplet.Name, "status": droplet.Status, } } // Include pagination metadata in response result := map[string]interface{}{ "droplets": simplifiedDroplets, "meta": map[string]interface{}{ "total": response.Meta.Total, "page": page, "per_page": perPage, "pages": (response.Meta.Total + perPage - 1) / perPage, }, "links": response.Links, } return h.HandleSuccess(result, "list_droplets") } func (h *Handler) GetDroplet(dropletID int) (*mcp_golang.ToolResponse, error) { client := h.doClient.GetClient() droplet, _, err := client.Droplets.Get(context.Background(), dropletID) if err != nil { return h.HandleError(err, "get_droplet") } return h.HandleSuccess(droplet, "get_droplet") } func (h *Handler) CreateDroplet(name, region, size, image string) (*mcp_golang.ToolResponse, error) { client := h.doClient.GetClient() createRequest := &godo.DropletCreateRequest{ Name: name, Region: region, Size: size, Image: godo.DropletCreateImage{ Slug: image, }, } droplet, _, err := client.Droplets.Create(context.Background(), createRequest) if err != nil { return h.HandleError(err, "create_droplet") } return h.HandleSuccess(droplet, "create_droplet") } func (h *Handler) DeleteDroplet(dropletID int) (*mcp_golang.ToolResponse, error) { client := h.doClient.GetClient() _, err := client.Droplets.Delete(context.Background(), dropletID) if err != nil { return h.HandleError(err, "delete_droplet") } return h.HandleSuccess(map[string]string{ "status": "success", "message": fmt.Sprintf("Droplet %d deleted successfully", dropletID), }, "delete_droplet") } func (h *Handler) ResizeDroplet(dropletID int, size string, disk bool) (*mcp_golang.ToolResponse, error) { client := h.doClient.GetClient() _, _, err := client.DropletActions.Resize(context.Background(), dropletID, size, disk) if err != nil { return h.HandleError(err, "resize_droplet") } return h.HandleSuccess(map[string]string{ "status": "success", "message": fmt.Sprintf("Droplet %d resize initiated", dropletID), }, "resize_droplet") }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/rohit-kaundal/digitalocean-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server