Linode MCP Server
About
Manage Linode cloud infrastructure resources through natural language conversation.
Details
- Author
- takashito
- Categories
- Cloud Service, Infrastructure
Jump to
Setup
Install Linode MCP Server in your MCP client (Claude Desktop, Cursor, Windsurf, and others).
Repository: https://github.com/takashito/linode-mcp-server
Follow the installation instructions in the repository README, then restart your MCP client.
Manage Linode cloud infrastructure resources through natural language conversation.
An MCP (Model Context Protocol) server that connects your AI Assistant or Agent to your Linode cloud infrastructure allowing you to manage your cloud resources through natural conversation. Built with FastMCP framework and supports stdio and HTTP streaming transports!
FastMCP v3: This project usesFastMCP v3for typed sessions, cleaner token handling, and improved security. Supports stdio and HTTP streaming (StreamableHTTP) transports.
Ask Claude Desktop or VSCode Copilot Agent to help you with tasks like:
- "Show me all my instances in the Frankfurt region"
- "Create a new instance in Osaka"
- "Create a load balancer for my web servers"
- "Set up a managed MySQL database" etc
This server provides tools for the following Linode service categories:
- π₯οΈinstances- Linode compute instances
- πΎvolumes- Block storage volumes
- πnetworking- IP addresses, firewalls, VLANs
- βοΈnodebalancers- Load balancers for distributing traffic
- πregions- Data center locations
- πplacement- Instance placement policies
- πvpcs- Virtual Private Cloud networks
- π¦objectStorage- S3-compatible object storage
- π€domains- DNS management
- ποΈdatabases- Managed MySQL/PostgreSQL databases
- βΈοΈkubernetes- Kubernetes container orchestration (LKE)
- πΏimages- Custom disk images for instances
- πstackScripts- Deployment automation scripts
- π·οΈtags- Resource organization labels
- π«support- Support tickets and requests
- πlongview- System metrics and monitoring
- π€profile- User profile and security settings
- π’account- Account management, users, billing, IAM, and resource locks
- π‘monitor- Alerts, logs, metrics, and dashboards
You'll need a Linode API token to use this server. Create one in yourLinode Cloud Manager profile settings.
# Start the server with your API token npx @takashito/linode-mcp-server --token YOUR_LINODE_API_TOKEN
You can provide your token in several ways.Precedence (highest first):
- Authorization: Bearer <token>request header(HTTP transport only) β a token sent by the MCP client on each request. SeePass Linode API Key via Authorization Headerbelow. This wins over every fallback so multiple users can share one server.
- --tokencommand-line option:
npx @takashito/linode-mcp-server --token YOUR_LINODE_API_TOKEN
export LINODE_API_TOKEN=your_token_here npx @takashito/linode-mcp-server
β οΈ Gotcha for HTTP transport:a.envfile orLINODE_API_TOKENenv var in the server's launch environment acts as afallbackwhen the client omits theAuthorizationheader. If you want to require every client to authenticate with its own header (e.g. multi-user setup), make sure the server process has noLINODE_API_TOKENin envandno.envin its working directory.
Open Claude settings > Developer > Edit Config:
{ "mcpServers": { "linode": { "command": "npx", "args": ["-y", "@takashito/linode-mcp-server", "--token", "YOUR_LINODE_API_TOKEN"] } } }
{ "mcpServers": { "linode": { "command": "npx", "args": ["-y", "@takashito/linode-mcp-server", "--token", "YOUR_LINODE_API_TOKEN", "--categories", "instances,volumes,regions"] } } }
Enabling every tool exposes~416 tool definitionsto the model on every turn. The tool listing (name + description + JSON-Schema for each) is sent as part of the system prompt and is charged as input tokens oneveryrequest.
Rough estimate with all categories enabled:the full tool manifest is ~80β120 k input tokens, depending on the client's JSON-Schema serialization. For small-context clients this alone can exceed the window before the user's prompt is even added.
Per-category tool count (order-of-magnitude tokens, assuming ~200 tokens per tool):
- Always scope to what you need.Pass--categories instances,volumes,regionsrather than enabling all β this is by far the biggest cost lever.
- Small-context clients(GPT-4o/GPT-4o-mini 128 k, Claude Haiku 200 k, most local models β€32 k): enable 2β4 categories max. All-enabled will either truncate or outright fail.
- Large-context clients(Claude Sonnet/Opus 200 kβ1 M, GPT-5, Gemini): all-enabled works, but every unused tool still costs input tokens per turn β be mindful of API cost even if it fits.
- Caching matters.Anthropic/OpenAI prompt caching only rewards identical tool manifests across calls; changing--categoriesbetween sessions breaks the cache.
- Prefer--list-categoriesto see everything available, then enable only what your current task needs. You can start a second server with a different category set if you need different tooling mid-flight.
- Token counts above are estimates; your client may serialize JSON Schema differently (zod β JSON Schema can expand). Measure with your own client's token counter if you need exact numbers.
You can selectively enable tools with the--categoriesparameter:
# Enable only instances and volumes tools npx @takashito/linode-mcp-server --token YOUR_TOKEN --categories instances,volumes
{ "mcpServers": { "linode": { "command": "npx", "args": [ "-y", "@takashito/linode-mcp-server", "--token", "YOUR_LINODE_API_TOKEN", "--categories", "instances,volumes,regions" ] } } }
Available categories: instances, volumes, networking, nodebalancers, regions, placement, vpcs, objectStorage, domains, databases, kubernetes, images, stackScripts, tags, support, longview, profile, account, monitor
npx @takashito/linode-mcp-server --list-categories
-
stdio transport- Default transport compatible with Claude Desktop
# Default stdio transport npx @takashito/linode-mcp-server --token YOUR_TOKEN
httpStream transport- HTTP streaming transport (StreamableHTTP) for web clients
# Start with HTTP streaming transport on port 8080 /mcp npx @takashito/linode-mcp-server --token YOUR_TOKEN --transport http --port 8080 --endpoint /mcp
You can customize port and host for HTTP streaming transport:
- --port: Server port (default: 8080)
- --endpoint: Server Path (default: /mcp)
- --host: Server host (default: 127.0.0.1)
Pass Linode API Key via Authorization Header β
For HTTP transport, you can run the MCP serverwithoutthe--tokenparameter and have the client supply the token on each request via anAuthorization: Bearer <token>header. The server forwards that token to the Linode API as-is β no token ever needs to live in the server's argv or environment.
- Multi-user / shared server.Run one server and let multiple clients/users authenticate with their own tokens.
- Secrets hygiene.Token stays on the client side; the server process doesn't need it in its command line (visible inps) or environment.
- Token rotation.Clients can switch tokens without restarting the server.
# Start with HTTP streaming transport on port 8080 /mcp at localhost npx @takashito/linode-mcp-server --transport http
Configure your MCP client to add theAuthorizationheader.linode-mcp-serverforwards this API token to the Linode API at the backend:
{ "mcpServers": { "linode-remote-mcp": { "command": "npx", "args": [ "mcp-remote", "http://localhost:8080/mcp", "--header", "Authorization: Bearer ${LINODE_API_TOKEN}" ], "env": { "LINODE_API_TOKEN": "..." } } } }
Note:If both--token(server-side) and anAuthorizationheader (client-side) are provided, the request-level header takes precedence. The--tokenflag is useful as a fallback default in single-user setups.
Run the MCP server as a container with httpStream transport.
docker build -t takashito/linode-mcp-server .
# Basic usage (port 8080, all tool categories) docker run -e LINODE_API_TOKEN=your_token -p 8080:8080 takashito/linode-mcp-server # Custom port docker run -e LINODE_API_TOKEN=your_token -e PORT=3000 -p 3000:3000 takashito/linode-mcp-server # Limit tool categories docker run -e LINODE_API_TOKEN=your_token -e CATEGORIES=instances,volumes,regions -p 8080:8080 takashito/linode-mcp-server # Custom endpoint docker run -e LINODE_API_TOKEN=your_token -e ENDPOINT=/api -p 8080:8080 takashito/linode-mcp-server
{ "mcpServers": { "linode": { "command": "npx", "args": [ "mcp-remote", "http://localhost:8080/mcp", "--header", "Authorization: Bearer ${LINODE_API_TOKEN}" ], "env": { "LINODE_API_TOKEN": "your_token" } } } }
This MCP server provides the following tools for interacting with Linode API services:
β
MCP parameter serializationAll tool input schemas are wrapped with a universal preprocessor (mcpInput()) that auto-coerces string-serialized values back to their expected types (arrays, objects, numbers, booleans). This means MCP clients that stringify nested JSON params (common with Claude Code and other implementations) work correctly without the caller having to pre-parse values.
Legendπ§ͺbetaβ tool targets a Linode v4beta API endpoint or a feature that may be gated on your account (log streams, delegation, image sharegroups). Behavior/schema may change without notice, and some return 404 if the feature isn't provisioned.
β οΈ Beta API endpointsThe following tools call the Linodev4betaAPI (not the stablev4). They may change without notice, and some are only available on accounts with the corresponding feature provisioned. If you see a 404, your account likely lacks access.
- LKE tier versionsβlist_kubernetes_tier_versions,get_kubernetes_tier_version(/v4beta/lke/tiers/{tier}/versions)
- Resource locksβlist_resource_locks,get_resource_lock,create_resource_lock,delete_resource_lock(/v4beta/locks)
- Monitor alertsβlist_alert_definitions,get_alert_definition,create_alert_definition,update_alert_definition,delete_alert_definition,list_service_alert_definitions,list_notification_channels,get_notification_channel,create_notification_channel,update_notification_channel,delete_notification_channel,list_channel_alerts(/v4beta/monitor/alert-*)
Account-gated endpoints(may 404 even for admins β feature not provisioned for the account):
- Delegation:get_delegation_default_roles,list_delegation_child_accounts,list_delegation_profile_accounts,update_delegation_default_roles,get_delegation_child_account_users,update_delegation_child_account_users,get_delegation_profile_account,create_delegation_token
- Log streams / log destinations:list_log_streams,list_log_destinations, and related CRUD tools (API path currently undiscoverable)
Manage Linode compute instances, including creation, deletion, and power operations.
- list_instances- Get a list of all Linode instances
- get_instance- Get details for a specific Linode instance
- create_instance- Create a new Linode instance
- update_instance- Update a Linode instance
- delete_instance- Delete a Linode instance
- reboot_instance- Reboot a Linode instance
- boot_instance- Power on a Linode instance
- shutdown_instance- Power off a Linode instance
- resize_instance- Resize a Linode instance
- clone_instance- Clone a Linode instance to a new Linode
- rebuild_instance- Rebuild a Linode instance with a new image
- rescue_instance- Boot a Linode instance into rescue mode
- reset_root_password- Reset the root password for a Linode instance
- initiate_migration- Initiate a DC migration for a Linode instance
- upgrade_linode- Upgrade a Linode instance
- list_instance_configs- Get all configuration profiles for a Linode instance
- get_instance_config- Get a specific configuration profile for a Linode instance
- create_instance_config- Create a new configuration profile for a Linode instance
- update_instance_config- Update a configuration profile for a Linode instance
- delete_instance_config- Delete a configuration profile for a Linode instance
- list_config_interfaces- List all interfaces for a configuration profile
- get_config_interface- Get details for a specific configuration profile interface
- create_config_interface- Create a new interface for a configuration profile
- update_config_interface- Update an interface for a configuration profile
- delete_config_interface- Delete an interface from a configuration profile
- reorder_config_interfaces- Reorder interfaces for a configuration profile
- list_instance_disks- Get all disks for a Linode instance
- get_instance_disk- Get a specific disk for a Linode instance
- create_instance_disk- Create a new disk for a Linode instance
- update_instance_disk- Update a disk for a Linode instance
- delete_instance_disk- Delete a disk for a Linode instance
- resize_instance_disk- Resize a disk for a Linode instance
- clone_disk- Clone a disk to a new disk
- reset_disk_root_password- Reset a disk root password
- list_backups- Get a list of all backups for a Linode instance
- get_backup- Get details for a specific backup
- create_snapshot- Create a snapshot for a Linode instance
- cancel_backups- Cancel backups for a Linode instance
- enable_backups- Enable backups for a Linode instance
- restore_backup- Restore a backup to a Linode instance
- get_networking_information- Get networking information for a Linode instance
- allocate_ipv4_address- Allocate an IPv4 address for a Linode instance
- get_ip_address- Get details for a specific IP address
- update_ip_address_rdns- Update reverse DNS for an IP address
- delete_ipv4_address- Delete an IPv4 address
- list_linode_firewalls- List firewalls for a Linode instance
- apply_linode_firewalls- Apply firewalls to a Linode instance
- update_linode_firewalls- Update a Linode's assigned firewalls
- get_instance_stats- Get current statistics for a Linode instance
- get_instance_stats_by_date- Get statistics for a Linode instance for a specific month
- get_network_transfer- Get network transfer information for a Linode instance
- get_monthly_network_transfer- Get monthly network transfer stats for a Linode instance
- list_instance_nodebalancers- List NodeBalancers attached to a Linode instance
- list_instance_volumes- List volumes attached to a Linode instance
- list_kernels- Get a list of all available kernels
- get_kernel- Get details for a specific kernel
- list_instance_types- Get a list of all available Linode types
- get_instance_type- Get details for a specific Linode type
Manage block storage volumes that can be attached to Linode instances.
- list_volumes- Get a list of all volumes
- get_volume- Get details for a specific volume
- create_volume- Create a new volume
- delete_volume- Delete a volume
- attach_volume- Attach a volume to a Linode instance
- detach_volume- Detach a volume from a Linode instance
- resize_volume- Resize a volume
Manage IP addresses, firewalls, and network infrastructure.
- get_ip_addresses- Get all IP addresses
- get_ip_address- Get details for a specific IP address
- update_ip_address- Update reverse DNS for an IP address
- allocate_ip- Allocate a new IP address
- share_ips- Share IP addresses between Linodes
- get_ipv6_ranges- Get all IPv6 ranges
- get_ipv6_range- Get a specific IPv6 range
- get_ipv6_pools- Get all IPv6 pools
- create_ipv6_range- Create an IPv6 range
- delete_ipv6_range- Delete an IPv6 range
- assign_ipv4_addresses- Assign IPv4 addresses to Linodes
- share_ipv4_addresses- Configure IPv4 sharing
- assign_ips- Assign IP addresses to Linodes
- get_firewalls- Get all firewalls
- get_firewall- Get details for a specific firewall
- create_firewall- Create a new firewall
- update_firewall- Update a firewall
- delete_firewall- Delete a firewall
- get_firewall_rules- Get all rules for a specific firewall
- update_firewall_rules- Update rules for a specific firewall
- get_firewall_devices- Get all devices for a specific firewall
- get_firewall_device- Get a specific firewall device
- create_firewall_device- Create a new device for a specific firewall
- delete_firewall_device- Delete a device from a specific firewall
- list_firewall_history- List firewall rule versions
- get_firewall_rule_version- Get a specific firewall rule version
- get_firewall_settings- Get default firewall settings
- update_firewall_settings- Update default firewall settings
- list_firewall_templates- List firewall templates
- get_firewall_template- Get a firewall template
- get_vlans- Get all VLANs
- get_vlan- Get a specific VLAN
- delete_vlan- Delete a VLAN
- list_linode_interfaces- List Linode interfaces
- get_linode_interface- Get a Linode interface
- create_linode_interface- Add a Linode interface
- update_linode_interface- Update a Linode interface
- delete_linode_interface- Delete a Linode interface
- list_linode_interface_history- List interface history
- get_linode_interface_settings- Get interface settings
- update_linode_interface_settings- Update interface settings
- list_linode_interface_firewalls- List interface firewalls
- upgrade_linode_interfaces- Upgrade to Linode interfaces
- list_network_transfer_prices- List network transfer prices
Manage DNS domains and records hosted by Linode's DNS services.
- list_domains- Get a list of all domains
- get_domain- Get details for a specific domain
- create_domain- Create a new domain
- update_domain- Update an existing domain
- delete_domain- Delete a domain
- list_domain_records- Get a list of all domain records for a domain
- get_domain_record- Get details for a specific domain record
- create_domain_record- Create a new domain record
- update_domain_record- Update a domain record
- delete_domain_record- Delete a domain record
- import_domain_zone- Import a domain zone from a remote nameserver
- clone_domain- Clone an existing domain to a new domain
- get_zone_file- Get DNS zone file for a domain
Manage Linode Managed Database services for MySQL and PostgreSQL.
- list_database_engines- Get a list of all available database engines (MySQL, PostgreSQL versions)
- get_database_engine- Get details for a specific database engine version
- list_database_types- Get a list of all available database instance types (sizes)
- get_database_type- Get details for a specific database instance type
- list_database_instances- Get a list of all database instances (both MySQL and PostgreSQL)
- list_mysql_instances- Get a list of all MySQL database instances
- get_mysql_instance- Get details for a specific MySQL database instance
- create_mysql_instance- Create a new MySQL database instance
- update_mysql_instance- Update an existing MySQL database instance settings
- delete_mysql_instance- Delete a MySQL database instance
- get_mysql_credentials- Get admin credentials for a MySQL database instance
- reset_mysql_credentials- Reset admin credentials for a MySQL database instance
- get_mysql_ssl_certificate- Get the SSL certificate for a MySQL database instance
- patch_mysql_instance- Apply the latest software updates to a MySQL database instance
- suspend_mysql_instance- Suspend a MySQL database instance (billing continues)
- resume_mysql_instance- Resume a suspended MySQL database instance
Sign in to leave a review
Use Google, GitHub, or an email account so ratings stay tied to real people.
No reviews posted yet.

