Skip to main content
Glama
rohit-kaundal

DigitalOcean MCP Server

tools.go16 kB
package server import ( "digitalocean-mcp-server/handlers" "digitalocean-mcp-server/types" "log" mcp_golang "github.com/metoro-io/mcp-golang" ) type ToolDefinition struct { Name string Description string Handler interface{} } func RegisterTools(server *mcp_golang.Server, handler *handlers.Handler) error { tools := []ToolDefinition{ // Test connection { Name: "test_connection", Description: "Test connection to DigitalOcean API", Handler: func(arguments types.EmptyArgs) (*mcp_golang.ToolResponse, error) { return handler.TestConnection() }, }, // Droplet tools { Name: "list_droplets", Description: "List all droplets in the account", Handler: func(arguments types.ListDropletsArgs) (*mcp_golang.ToolResponse, error) { return handler.ListDroplets(arguments.Page, arguments.PerPage) }, }, { Name: "get_droplet", Description: "Get details of a specific droplet", Handler: func(arguments types.GetDropletArgs) (*mcp_golang.ToolResponse, error) { return handler.GetDroplet(arguments.DropletID) }, }, { Name: "create_droplet", Description: "Create a new droplet", Handler: func(arguments types.CreateDropletArgs) (*mcp_golang.ToolResponse, error) { return handler.CreateDroplet(arguments.Name, arguments.Region, arguments.Size, arguments.Image) }, }, { Name: "delete_droplet", Description: "Delete a droplet", Handler: func(arguments types.DeleteDropletArgs) (*mcp_golang.ToolResponse, error) { return handler.DeleteDroplet(arguments.DropletID) }, }, { Name: "resize_droplet", Description: "Resize a droplet to a different size", Handler: func(arguments types.ResizeDropletArgs) (*mcp_golang.ToolResponse, error) { return handler.ResizeDroplet(arguments.DropletID, arguments.Size, arguments.Disk) }, }, { Name: "create_droplet_snapshot", Description: "Create a snapshot of a droplet", Handler: func(arguments types.CreateDropletSnapshotArgs) (*mcp_golang.ToolResponse, error) { return handler.CreateDropletSnapshot(arguments.DropletID, arguments.Name) }, }, // Volume tools { Name: "list_volumes", Description: "List all volumes in the account", Handler: func(arguments types.ListVolumesArgs) (*mcp_golang.ToolResponse, error) { return handler.ListVolumes(arguments.Region) }, }, { Name: "get_volume", Description: "Get details of a specific volume", Handler: func(arguments types.GetVolumeArgs) (*mcp_golang.ToolResponse, error) { return handler.GetVolume(arguments.VolumeID) }, }, { Name: "create_volume", Description: "Create a new volume", Handler: func(arguments types.CreateVolumeArgs) (*mcp_golang.ToolResponse, error) { return handler.CreateVolume(arguments.Name, arguments.Region, arguments.SizeGigaBytes, arguments.Description) }, }, { Name: "delete_volume", Description: "Delete a volume", Handler: func(arguments types.DeleteVolumeArgs) (*mcp_golang.ToolResponse, error) { return handler.DeleteVolume(arguments.VolumeID) }, }, { Name: "attach_volume", Description: "Attach a volume to a droplet", Handler: func(arguments types.AttachVolumeArgs) (*mcp_golang.ToolResponse, error) { return handler.AttachVolume(arguments.VolumeID, arguments.DropletID) }, }, { Name: "detach_volume", Description: "Detach a volume from a droplet", Handler: func(arguments types.DetachVolumeArgs) (*mcp_golang.ToolResponse, error) { return handler.DetachVolume(arguments.VolumeID, arguments.DropletID) }, }, { Name: "resize_volume", Description: "Resize a volume", Handler: func(arguments types.ResizeVolumeArgs) (*mcp_golang.ToolResponse, error) { return handler.ResizeVolume(arguments.VolumeID, arguments.SizeGigaBytes, arguments.Region) }, }, { Name: "create_volume_snapshot", Description: "Create a snapshot of a volume", Handler: func(arguments types.CreateVolumeSnapshotArgs) (*mcp_golang.ToolResponse, error) { return handler.CreateVolumeSnapshot(arguments.VolumeID, arguments.Name, arguments.Description) }, }, // Snapshot tools { Name: "list_snapshots", Description: "List all snapshots", Handler: func(arguments types.ListSnapshotsArgs) (*mcp_golang.ToolResponse, error) { return handler.ListSnapshots(arguments.ResourceType) }, }, { Name: "list_volume_snapshots", Description: "List all volume snapshots", Handler: func(arguments types.EmptyArgs) (*mcp_golang.ToolResponse, error) { return handler.ListVolumeSnapshots() }, }, { Name: "list_droplet_snapshots", Description: "List all droplet snapshots", Handler: func(arguments types.EmptyArgs) (*mcp_golang.ToolResponse, error) { return handler.ListDropletSnapshots() }, }, { Name: "get_snapshot", Description: "Get details of a specific snapshot", Handler: func(arguments types.GetSnapshotArgs) (*mcp_golang.ToolResponse, error) { return handler.GetSnapshot(arguments.SnapshotID) }, }, { Name: "delete_snapshot", Description: "Delete a snapshot", Handler: func(arguments types.DeleteSnapshotArgs) (*mcp_golang.ToolResponse, error) { return handler.DeleteSnapshot(arguments.SnapshotID) }, }, // Image tools { Name: "list_images", Description: "List all images", Handler: func(arguments types.ListImagesArgs) (*mcp_golang.ToolResponse, error) { return handler.ListImages(arguments.Type, arguments.IsPublic) }, }, { Name: "get_image", Description: "Get details of a specific image", Handler: func(arguments types.GetImageArgs) (*mcp_golang.ToolResponse, error) { return handler.GetImage(arguments.ImageID) }, }, { Name: "update_image", Description: "Update an image", Handler: func(arguments types.UpdateImageArgs) (*mcp_golang.ToolResponse, error) { return handler.UpdateImage(arguments.ImageID, arguments.Name) }, }, { Name: "delete_image", Description: "Delete an image", Handler: func(arguments types.DeleteImageArgs) (*mcp_golang.ToolResponse, error) { return handler.DeleteImage(arguments.ImageID) }, }, { Name: "transfer_image", Description: "Transfer an image to another region", Handler: func(arguments types.TransferImageArgs) (*mcp_golang.ToolResponse, error) { return handler.TransferImage(arguments.ImageID, arguments.RegionSlug) }, }, { Name: "convert_image_to_snapshot", Description: "Convert an image to snapshot", Handler: func(arguments types.ConvertImageToSnapshotArgs) (*mcp_golang.ToolResponse, error) { return handler.ConvertImageToSnapshot(arguments.ImageID) }, }, // Floating IP tools { Name: "list_floating_ips", Description: "List all floating IPs", Handler: func(arguments types.EmptyArgs) (*mcp_golang.ToolResponse, error) { return handler.ListFloatingIPs() }, }, { Name: "get_floating_ip", Description: "Get details of a specific floating IP", Handler: func(arguments types.GetFloatingIPArgs) (*mcp_golang.ToolResponse, error) { return handler.GetFloatingIP(arguments.IP) }, }, { Name: "create_floating_ip", Description: "Create a new floating IP", Handler: func(arguments types.CreateFloatingIPArgs) (*mcp_golang.ToolResponse, error) { return handler.CreateFloatingIP(arguments.Region, arguments.DropletID) }, }, { Name: "delete_floating_ip", Description: "Delete a floating IP", Handler: func(arguments types.DeleteFloatingIPArgs) (*mcp_golang.ToolResponse, error) { return handler.DeleteFloatingIP(arguments.IP) }, }, { Name: "assign_floating_ip", Description: "Assign a floating IP to a droplet", Handler: func(arguments types.AssignFloatingIPArgs) (*mcp_golang.ToolResponse, error) { return handler.AssignFloatingIP(arguments.IP, arguments.DropletID) }, }, { Name: "unassign_floating_ip", Description: "Unassign a floating IP from a droplet", Handler: func(arguments types.UnassignFloatingIPArgs) (*mcp_golang.ToolResponse, error) { return handler.UnassignFloatingIP(arguments.IP) }, }, // Load Balancer tools { Name: "list_load_balancers", Description: "List all load balancers", Handler: func(arguments types.EmptyArgs) (*mcp_golang.ToolResponse, error) { return handler.ListLoadBalancers() }, }, { Name: "get_load_balancer", Description: "Get details of a specific load balancer", Handler: func(arguments types.GetLoadBalancerArgs) (*mcp_golang.ToolResponse, error) { return handler.GetLoadBalancer(arguments.LoadBalancerID) }, }, { Name: "create_load_balancer", Description: "Create a new load balancer", Handler: func(arguments types.CreateLoadBalancerArgs) (*mcp_golang.ToolResponse, error) { return handler.CreateLoadBalancer(arguments.Name, arguments.Algorithm, arguments.Region, arguments.ForwardingRules, arguments.DropletIDs) }, }, { Name: "update_load_balancer", Description: "Update a load balancer", Handler: func(arguments types.UpdateLoadBalancerArgs) (*mcp_golang.ToolResponse, error) { return handler.UpdateLoadBalancer(arguments.LoadBalancerID, arguments.Name, arguments.Algorithm, arguments.Region, arguments.ForwardingRules, arguments.DropletIDs) }, }, { Name: "delete_load_balancer", Description: "Delete a load balancer", Handler: func(arguments types.DeleteLoadBalancerArgs) (*mcp_golang.ToolResponse, error) { return handler.DeleteLoadBalancer(arguments.LoadBalancerID) }, }, { Name: "add_droplets_to_load_balancer", Description: "Add droplets to a load balancer", Handler: func(arguments types.AddDropletsToLoadBalancerArgs) (*mcp_golang.ToolResponse, error) { return handler.AddDropletsToLoadBalancer(arguments.LoadBalancerID, arguments.DropletIDs) }, }, { Name: "remove_droplets_from_load_balancer", Description: "Remove droplets from a load balancer", Handler: func(arguments types.RemoveDropletsFromLoadBalancerArgs) (*mcp_golang.ToolResponse, error) { return handler.RemoveDropletsFromLoadBalancer(arguments.LoadBalancerID, arguments.DropletIDs) }, }, { Name: "add_forwarding_rules_to_load_balancer", Description: "Add forwarding rules to a load balancer", Handler: func(arguments types.AddForwardingRulesToLoadBalancerArgs) (*mcp_golang.ToolResponse, error) { return handler.AddForwardingRulesToLoadBalancer(arguments.LoadBalancerID, arguments.ForwardingRules) }, }, { Name: "remove_forwarding_rules_from_load_balancer", Description: "Remove forwarding rules from a load balancer", Handler: func(arguments types.RemoveForwardingRulesFromLoadBalancerArgs) (*mcp_golang.ToolResponse, error) { return handler.RemoveForwardingRulesFromLoadBalancer(arguments.LoadBalancerID, arguments.ForwardingRules) }, }, // Firewall tools { Name: "list_firewalls", Description: "List all firewalls", Handler: func(arguments types.EmptyArgs) (*mcp_golang.ToolResponse, error) { return handler.ListFirewalls() }, }, { Name: "get_firewall", Description: "Get details of a specific firewall", Handler: func(arguments types.GetFirewallArgs) (*mcp_golang.ToolResponse, error) { return handler.GetFirewall(arguments.FirewallID) }, }, { Name: "create_firewall", Description: "Create a new firewall", Handler: func(arguments types.CreateFirewallArgs) (*mcp_golang.ToolResponse, error) { return handler.CreateFirewall(arguments.Name, arguments.InboundRules, arguments.OutboundRules, arguments.DropletIDs, arguments.Tags) }, }, { Name: "update_firewall", Description: "Update a firewall", Handler: func(arguments types.UpdateFirewallArgs) (*mcp_golang.ToolResponse, error) { return handler.UpdateFirewall(arguments.FirewallID, arguments.Name, arguments.InboundRules, arguments.OutboundRules) }, }, { Name: "delete_firewall", Description: "Delete a firewall", Handler: func(arguments types.DeleteFirewallArgs) (*mcp_golang.ToolResponse, error) { return handler.DeleteFirewall(arguments.FirewallID) }, }, { Name: "add_droplets_to_firewall", Description: "Add droplets to a firewall", Handler: func(arguments types.AddDropletsToFirewallArgs) (*mcp_golang.ToolResponse, error) { return handler.AddDropletsToFirewall(arguments.FirewallID, arguments.DropletIDs) }, }, { Name: "remove_droplets_from_firewall", Description: "Remove droplets from a firewall", Handler: func(arguments types.RemoveDropletsFromFirewallArgs) (*mcp_golang.ToolResponse, error) { return handler.RemoveDropletsFromFirewall(arguments.FirewallID, arguments.DropletIDs) }, }, { Name: "add_tags_to_firewall", Description: "Add tags to a firewall", Handler: func(arguments types.AddTagsToFirewallArgs) (*mcp_golang.ToolResponse, error) { return handler.AddTagsToFirewall(arguments.FirewallID, arguments.Tags) }, }, { Name: "remove_tags_from_firewall", Description: "Remove tags from a firewall", Handler: func(arguments types.RemoveTagsFromFirewallArgs) (*mcp_golang.ToolResponse, error) { return handler.RemoveTagsFromFirewall(arguments.FirewallID, arguments.Tags) }, }, { Name: "add_rules_to_firewall", Description: "Add rules to a firewall", Handler: func(arguments types.AddRulesToFirewallArgs) (*mcp_golang.ToolResponse, error) { return handler.AddRulesToFirewall(arguments.FirewallID, arguments.InboundRules, arguments.OutboundRules) }, }, { Name: "remove_rules_from_firewall", Description: "Remove rules from a firewall", Handler: func(arguments types.RemoveRulesFromFirewallArgs) (*mcp_golang.ToolResponse, error) { return handler.RemoveRulesFromFirewall(arguments.FirewallID, arguments.InboundRules, arguments.OutboundRules) }, }, // Registry tools { Name: "list_registries", Description: "List all container registries", Handler: func(arguments types.EmptyArgs) (*mcp_golang.ToolResponse, error) { return handler.ListRegistries() }, }, { Name: "get_registry", Description: "Get details of a specific registry", Handler: func(arguments types.GetRegistryArgs) (*mcp_golang.ToolResponse, error) { return handler.GetRegistry(arguments.RegistryName) }, }, // Kubernetes tools { Name: "list_k8s_clusters", Description: "List all Kubernetes clusters", Handler: func(arguments types.EmptyArgs) (*mcp_golang.ToolResponse, error) { return handler.ListK8SClusters() }, }, { Name: "get_k8s_cluster", Description: "Get details of a specific Kubernetes cluster", Handler: func(arguments types.GetK8SClusterArgs) (*mcp_golang.ToolResponse, error) { return handler.GetK8SCluster(arguments.ClusterID) }, }, { Name: "create_k8s_cluster", Description: "Create a new Kubernetes cluster", Handler: func(arguments types.CreateK8SClusterArgs) (*mcp_golang.ToolResponse, error) { return handler.CreateK8SCluster(arguments.Name, arguments.Region, arguments.Version, arguments.NodePoolSize, arguments.NodeCount) }, }, { Name: "delete_k8s_cluster", Description: "Delete a Kubernetes cluster", Handler: func(arguments types.DeleteK8SClusterArgs) (*mcp_golang.ToolResponse, error) { return handler.DeleteK8SCluster(arguments.ClusterID) }, }, } for _, tool := range tools { if err := server.RegisterTool(tool.Name, tool.Description, tool.Handler); err != nil { log.Printf("Failed to register %s tool: %v", tool.Name, err) return err } } return nil }

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