# Linode MCP Server — 179 tools via DADL

The Linode DADL turns Linode's API into an MCP server that Claude, GPT or any MCP-compatible agent can consume directly. One YAML file declares all 179 tools — linode, lke, nodebalancer, domain, firewall, volume, and more — and ToolMesh serves them at runtime. No Python boilerplate, no per-endpoint code, no separate MCP server process.

Below: the endpoint coverage matrix, a two-block ToolMesh setup, the full tool reference grouped by Linode feature area, required credential scopes.

**Source:** [Linode REST API v4](https://techdocs.akamai.com/linode-api/reference/api)

**Updated:** 2026-03-29

**Tags:** cloud, dns, storage, databases, containers, networking, crud, authentication, auth:bearer

## Which Linode endpoints are covered?

**30%** (118 of ~400 endpoints).

**Focus:** linodes, volumes, domains, nodebalancers, firewalls, VPCs, LKE, databases, object storage, images, stackscripts, regions, account, profile, events, tags

**Missing:** longview, managed services, monitor, IAM/delegation, service transfers, beta programs, placement groups, support tickets

*Last reviewed: 2026-03-29*

## How do you configure the Linode DADL?

1. Log in to Linode Cloud Manager at https://cloud.linode.com
2. Navigate to your profile icon (top right) → API Tokens
3. Click 'Create a Personal Access Token'
4. Set a label, expiry, and select scopes (Read/Write per category)
5. Copy the token immediately -- it is shown only once

**Environment variable:** `CREDENTIAL_LINODE_TOKEN`

[Authentication docs](https://techdocs.akamai.com/linode-api/reference/get-started)

*Personal Access Tokens (PATs) are the simplest auth method. OAuth2 is also supported for third-party apps. Scopes are per-category with read_only or read_write levels.*

## How do you install the Linode MCP server with ToolMesh?

Add to your `backends.yaml`:

```yaml
- name: linode
  transport: rest
  dadl: /app/dadl/linode.dadl

```

Set the credential:

```
CREDENTIAL_LINODE_TOKEN=your-token-here
```

## What 179 tools does the Linode DADL expose?

- **GET** `list_linodes` — List all Linode instances. Supports X-Filter header for filtering by region, status, tags, etc.
- **GET** `get_linode` — Get details of a specific Linode instance
- **POST** `create_linode` — Create a new Linode instance. Requires region and type. Set image to auto-provision and boot.
- **PUT** `update_linode` — Update a Linode's label, tags, alerts, backups schedule, or watchdog
- **DELETE** `delete_linode` — Delete a Linode instance and all associated disks and IPs. Irreversible.
- **POST** `boot_linode` — Boot a Linode instance
- **POST** `reboot_linode` — Reboot a Linode instance
- **POST** `shutdown_linode` — Shut down a Linode instance
- **POST** `rebuild_linode` — Rebuild a Linode from an image. Destroys all existing disks. Irreversible.
- **POST** `resize_linode` — Resize a Linode to a new plan type. Powers off the instance during resize.
- **POST** `clone_linode` — Clone a Linode to a new instance
- **POST** `migrate_linode` — Initiate a DC migration or accept a pending host migration
- **POST** `reset_linode_password` — Reset the root password for a Linode. Instance must be powered off.
- **POST** `rescue_linode` — Boot a Linode into rescue mode with optional device mappings
- **GET** `list_linode_disks` — List disks for a Linode
- **GET** `get_linode_disk` — Get a specific disk
- **POST** `create_linode_disk` — Create a new disk for a Linode
- **PUT** `update_linode_disk` — Update a disk's label
- **DELETE** `delete_linode_disk` — Delete a disk
- **POST** `resize_linode_disk` — Resize a disk. Linode must be powered off.
- **GET** `get_linode_ips` — Get all networking information (IPv4, IPv6) for a Linode
- **POST** `allocate_linode_ip` — Allocate an additional IPv4 address for a Linode
- **GET** `list_linode_backups` — List backups for a Linode (automatic daily/weekly + manual snapshots)
- **POST** `create_linode_snapshot` — Create a manual snapshot backup
- **GET** `get_linode_backup` — Get a specific backup
- **POST** `restore_linode_backup` — Restore a backup to a Linode
- **POST** `enable_linode_backups` — Enable the backups service for a Linode
- **POST** `cancel_linode_backups` — Cancel the backups service for a Linode. All backups are deleted.
- **GET** `get_linode_stats` — Get CPU, IO, network, and netv6 stats for the current month
- **GET** `get_linode_stats_by_month` — Get statistics for a specific year/month
- **GET** `get_linode_transfer` — Get network transfer usage for the current month
- **GET** `list_linode_types` — List available Linode instance types (plans) with pricing and specs
- **GET** `get_linode_type` — Get a specific instance type by slug
- **GET** `list_kernels` — List available kernels
- **GET** `list_volumes` — List all block storage volumes
- **GET** `get_volume` — Get a specific volume
- **POST** `create_volume` — Create a block storage volume. Set linode_id to auto-attach.
- **PUT** `update_volume` — Update a volume's label or tags
- **DELETE** `delete_volume` — Delete a volume. Must be detached first.
- **POST** `attach_volume` — Attach a volume to a Linode
- **POST** `detach_volume` — Detach a volume from its Linode
- **POST** `resize_volume` — Resize a volume. Can only increase size.
- **POST** `clone_volume` — Clone a volume
- **GET** `list_domains` — List all domains
- **GET** `get_domain` — Get a specific domain
- **POST** `create_domain` — Create a domain (DNS zone)
- **PUT** `update_domain` — Update a domain
- **DELETE** `delete_domain` — Delete a domain and all its records
- **GET** `list_domain_records` — List DNS records for a domain
- **GET** `get_domain_record` — Get a specific DNS record
- **POST** `create_domain_record` — Create a DNS record (A, AAAA, CNAME, MX, TXT, SRV, NS, CAA)
- **PUT** `update_domain_record` — Update a DNS record
- **DELETE** `delete_domain_record` — Delete a DNS record
- **GET** `list_nodebalancers` — List all NodeBalancers
- **GET** `get_nodebalancer` — Get a specific NodeBalancer
- **POST** `create_nodebalancer` — Create a NodeBalancer
- **PUT** `update_nodebalancer` — Update a NodeBalancer's label, throttle, or tags
- **DELETE** `delete_nodebalancer` — Delete a NodeBalancer
- **GET** `list_nodebalancer_configs` — List configs (ports) for a NodeBalancer
- **POST** `create_nodebalancer_config` — Create a NodeBalancer config (listener port)
- **PUT** `update_nodebalancer_config` — Update a NodeBalancer config
- **DELETE** `delete_nodebalancer_config` — Delete a NodeBalancer config
- **GET** `list_nodebalancer_nodes` — List backend nodes for a NodeBalancer config
- **POST** `create_nodebalancer_node` — Add a backend node to a NodeBalancer config
- **PUT** `update_nodebalancer_node` — Update a backend node
- **DELETE** `delete_nodebalancer_node` — Remove a backend node
- **GET** `list_firewalls` — List all firewalls
- **GET** `get_firewall` — Get a specific firewall
- **POST** `create_firewall` — Create a firewall with inbound/outbound rules
- **PUT** `update_firewall` — Update a firewall's label, tags, or status
- **DELETE** `delete_firewall` — Delete a firewall
- **GET** `get_firewall_rules` — Get the current rules for a firewall
- **PUT** `update_firewall_rules` — Replace all rules for a firewall
- **GET** `list_firewall_devices` — List devices (Linodes, NodeBalancers) attached to a firewall
- **POST** `create_firewall_device` — Attach a device to a firewall
- **DELETE** `delete_firewall_device` — Detach a device from a firewall
- **GET** `list_ip_addresses` — List all IP addresses on the account
- **GET** `get_ip_address` — Get info about an IP address
- **PUT** `update_ip_rdns` — Update reverse DNS for an IP address
- **POST** `allocate_ip` — Allocate a new IP address
- **GET** `list_ipv6_ranges` — List all IPv6 ranges
- **GET** `list_vlans` — List all VLANs on the account
- **GET** `list_vpcs` — List all VPCs
- **GET** `get_vpc` — Get a specific VPC
- **POST** `create_vpc` — Create a VPC
- **PUT** `update_vpc` — Update a VPC's label or description
- **DELETE** `delete_vpc` — Delete a VPC. All subnets must be empty.
- **GET** `list_vpc_subnets` — List subnets in a VPC
- **POST** `create_vpc_subnet` — Create a subnet in a VPC
- **PUT** `update_vpc_subnet` — Update a subnet's label
- **DELETE** `delete_vpc_subnet` — Delete a subnet. Must have no attached Linodes.
- **GET** `list_lke_clusters` — List all LKE (Linode Kubernetes Engine) clusters
- **GET** `get_lke_cluster` — Get a specific LKE cluster
- **POST** `create_lke_cluster` — Create an LKE cluster
- **PUT** `update_lke_cluster` — Update an LKE cluster's label, k8s_version, tags, or control plane
- **DELETE** `delete_lke_cluster` — Delete an LKE cluster and all associated node pools
- **GET** `get_lke_kubeconfig` — Get the base64-encoded kubeconfig for a cluster
- **GET** `get_lke_dashboard` — Get the Kubernetes dashboard URL
- **GET** `list_lke_api_endpoints` — List API server endpoints for a cluster
- **POST** `recycle_lke_cluster` — Recycle (replace) all nodes in the cluster
- **GET** `list_lke_node_pools` — List node pools in an LKE cluster
- **GET** `get_lke_node_pool` — Get a specific node pool
- **POST** `create_lke_node_pool` — Add a node pool to an LKE cluster
- **PUT** `update_lke_node_pool` — Update a node pool's count, autoscaler, labels, or taints
- **DELETE** `delete_lke_node_pool` — Delete a node pool
- **POST** `recycle_lke_node_pool` — Recycle (replace) all nodes in a pool
- **GET** `list_lke_versions` — List available Kubernetes versions for LKE
- **GET** `list_databases` — List all managed database instances (MySQL, PostgreSQL)
- **GET** `list_database_engines` — List available database engines and versions
- **GET** `list_database_types` — List available database types (plans) with pricing
- **GET** `list_mysql_databases` — List all MySQL managed databases
- **GET** `get_mysql_database` — Get a specific MySQL database
- **POST** `create_mysql_database` — Create a managed MySQL database
- **PUT** `update_mysql_database` — Update a MySQL database's label, allow_list, or updates config
- **DELETE** `delete_mysql_database` — Delete a MySQL database
- **GET** `get_mysql_credentials` — Get connection credentials (username, password) for a MySQL database
- **POST** `reset_mysql_credentials` — Reset the root password for a MySQL database
- **GET** `get_mysql_ssl` — Get the SSL CA certificate for a MySQL database
- **POST** `patch_mysql_database` — Apply the latest patch to a MySQL database
- **GET** `list_postgresql_databases` — List all PostgreSQL managed databases
- **GET** `get_postgresql_database` — Get a specific PostgreSQL database
- **POST** `create_postgresql_database` — Create a managed PostgreSQL database
- **PUT** `update_postgresql_database` — Update a PostgreSQL database
- **DELETE** `delete_postgresql_database` — Delete a PostgreSQL database
- **GET** `get_postgresql_credentials` — Get connection credentials for a PostgreSQL database
- **POST** `reset_postgresql_credentials` — Reset the root password for a PostgreSQL database
- **GET** `list_object_storage_buckets` — List all Object Storage buckets
- **GET** `get_object_storage_bucket` — Get a specific bucket
- **POST** `create_object_storage_bucket` — Create an Object Storage bucket
- **DELETE** `delete_object_storage_bucket` — Delete an Object Storage bucket. Must be empty.
- **GET** `list_object_storage_bucket_contents` — List objects in a bucket
- **POST** `create_object_storage_object_url` — Create a pre-signed URL for upload or download
- **GET** `list_object_storage_keys` — List S3-compatible access keys
- **POST** `create_object_storage_key` — Create an S3-compatible access key
- **DELETE** `delete_object_storage_key` — Revoke an S3-compatible access key
- **GET** `list_object_storage_clusters` — List Object Storage cluster/region endpoints
- **GET** `list_images` — List all images (official + custom). Rate limited to 20 req/min.
- **GET** `get_image` — Get a specific image
- **POST** `create_image` — Create a custom image from an existing Linode disk
- **PUT** `update_image` — Update an image's label, description, or tags
- **DELETE** `delete_image` — Delete a custom image
- **POST** `upload_image` — Get a URL for uploading a machine image (raw or gzip compressed)
- **POST** `replicate_image` — Replicate a custom image to additional regions
- **GET** `list_stackscripts` — List StackScripts (yours + community). Rate limited to 60 req/min.
- **GET** `get_stackscript` — Get a specific StackScript
- **POST** `create_stackscript` — Create a StackScript
- **PUT** `update_stackscript` — Update a StackScript
- **DELETE** `delete_stackscript` — Delete a StackScript
- **GET** `list_regions` — List all available regions with capabilities and status
- **GET** `get_region` — Get a specific region
- **GET** `get_region_availability` — Get compute type availability for a region
- **GET** `list_tags` — List all tags
- **POST** `create_tag` — Create a tag and optionally attach it to resources
- **DELETE** `delete_tag` — Delete a tag from all resources
- **GET** `list_events` — List account events (create, delete, boot, etc.)
- **GET** `get_event` — Get a specific event
- **POST** `mark_event_seen` — Mark an event as seen
- **POST** `mark_event_read` — Mark an event as read
- **GET** `get_account` — Get account contact and billing info
- **GET** `get_account_settings` — Get account-wide settings (managed, backups defaults, network helper)
- **PUT** `update_account_settings` — Update account settings
- **GET** `get_account_transfer` — Get network transfer pool usage for the current month
- **GET** `list_users` — List account users
- **GET** `get_user` — Get a specific user
- **POST** `create_user` — Create a new user on the account
- **PUT** `update_user` — Update a user
- **DELETE** `delete_user` — Delete a user from the account
- **GET** `get_user_grants` — Get permissions/grants for a restricted user
- **PUT** `update_user_grants` — Update permissions/grants for a restricted user
- **GET** `get_profile` — Get the current user's profile
- **PUT** `update_profile` — Update the current user's profile
- **GET** `list_ssh_keys` — List SSH keys on the current user's profile
- **GET** `get_ssh_key` — Get a specific SSH key
- **POST** `create_ssh_key` — Add an SSH key to the profile
- **PUT** `update_ssh_key` — Update an SSH key's label
- **DELETE** `delete_ssh_key` — Remove an SSH key from the profile
- **GET** `list_tokens` — List personal access tokens
- **POST** `create_token` — Create a personal access token
- **DELETE** `delete_token` — Revoke a personal access token

## Which DADLs are related to Linode?

- [Cloudflare](https://www.dadl.ai/d/cloudflare/) — Cloudflare API -- DNS, Pages, Workers, KV, R2, D1, Zones, SSL/TLS, Cache, Load Balancers, Firewall/WAF, Page Rules, Access (Zero Trust), and account management
- [Tailscale](https://www.dadl.ai/d/tailscale/) — Tailscale API -- devices, users, auth keys, DNS, ACL/policy, webhooks, contacts, posture integrations, log streaming, and tailnet settings
- [Mikrotik](https://www.dadl.ai/d/mikrotik/) — MikroTik RouterOS REST API -- manage interfaces, IP addresses, routing, firewall, DHCP, DNS, PPP, queues, wireless, system configuration, users, certificates, files, logs, and diagnostics on RouterOS v7.1+ devices
- [NetBox](https://www.dadl.ai/d/netbox/) — NetBox DCIM/IPAM API -- full v4 coverage: sites, racks, devices, modules, interfaces, cables, power, IPAM (prefixes, IPs, VLANs, VRFs, route-targets, VLAN translation), virtualization, circuits (including virtual circuits), tenants, contacts, VPN (IKE/IPSec/L2VPN), wireless, extras (webhooks, event-rules, scripts, config-templates, bookmarks, notifications), users/permissions/tokens, and core data sources & jobs
- [Shelly Cloud](https://www.dadl.ai/d/shelly-cloud/) — Shelly Cloud Control API — monitor and control Shelly IoT devices (switches, covers, lights) via the Shelly Cloud
- [DokuWiki](https://www.dadl.ai/d/dokuwiki/) — DokuWiki JSON-RPC API — wiki pages, media files, search, ACL management, and user administration

---

**Canonical URL:** https://www.dadl.ai/d/linode/
**Raw DADL:** https://github.com/DunkelCloud/dadl-registry/blob/main/linode.dadl
