MCP server for Linode API
npm install @vadimcomanescu/linode-mcp-server



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!
Ask Codex, Claude Code, Cursor, or OpenCode 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, and billing
You'll need a Linode API token to use this server. Create one in your Linode Cloud Manager profile settings.
``bash`Start the server with your API token
npx @vadimcomanescu/linode-mcp-server --token YOUR_LINODE_API_TOKEN
You can provide your token in several ways:
1. Command line option:
`bash`
npx @vadimcomanescu/linode-mcp-server --token YOUR_LINODE_API_TOKEN
2. Environment variable:
`bash`
export LINODE_API_TOKEN=your_token_here
npx @vadimcomanescu/linode-mcp-server
3. Environment file:
Create a .env file in your project directory with:`
`
LINODE_API_TOKEN=your_token_here
`
Then run:
bash`
npx @vadimcomanescu/linode-mcp-server
#### Codex CLI / IDE
Codex reads MCP servers from ~/.codex/config.toml and shares that config between the CLI and IDE extension. You can add this server either via the CLI or by editing the TOML directly:
`bash`Add via CLI (stdio)
codex mcp add linode --env LINODE_API_TOKEN=YOUR_LINODE_API_TOKEN -- npx -y @vadimcomanescu/linode-mcp-server
`toml`Or add in ~/.codex/config.toml
[mcp_servers.linode]
command = "npx"
args = ["-y", "@vadimcomanescu/linode-mcp-server", "--token", "YOUR_LINODE_API_TOKEN"]
#### Claude Desktop
Open Claude settings > Developer > Edit Config:
`json`
{
"mcpServers": {
"linode": {
"command": "npx",
"args": ["-y", "@vadimcomanescu/linode-mcp-server", "--token", "YOUR_LINODE_API_TOKEN"]
}
}
}
#### VSCode/Cursor/Windsurf
Add to your settings.json:
`json`
{
"mcpServers": {
"linode": {
"command": "npx",
"args": ["-y", "@vadimcomanescu/linode-mcp-server", "--token", "YOUR_LINODE_API_TOKEN", "--categories", "instances,volumes,regions"]
}
}
}--categories
β οΈ Note: For GPT-4o based clients, use to limit tools and avoid context window errors.
For the easiest setup, use Smithery:
`bash`
npx -y @smithery/cli install @vadimcomanescu/linode-mcp-server --client claude
You can selectively enabled tools with --categories parameter:
`bash`Enable only instances and volumes tools
npx @vadimcomanescu/linode-mcp-server --token YOUR_TOKEN --categories instances,volumes
Or in Claude Desktop config:
`json`
{
"mcpServers": {
"linode": {
"command": "npx",
"args": [
"-y",
"@vadimcomanescu/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
To see all available categories:
`bash`
npx @vadimcomanescu/linode-mcp-server --list-categories
1. stdio transport - Default transport compatible with Codex/Claude Desktop
`bash`
# Default stdio transport
npx @vadimcomanescu/linode-mcp-server --token YOUR_TOKEN
2. httpStream transport - HTTP streaming transport for web clients
`bash`
# Start with HTTP streaming transport on port 8080 /mcp
npx @vadimcomanescu/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)
For http transport, you can run mcp server without --token parameter.
`bash`
# Start with HTTP streaming transport on port 8080 /mcp at localhost
npx @vadimcomanescu/linode-mcp-server --transport http
Configure your mcp client to add Authorization Header. linode-mcp-server forward this API token to access Linode API at backend.
`json`
{
"mcpServers": {
"linode-remote-mcp": {
"command": "npx",
"args": [
"mcp-remote",
"http://localhost:8080/mcp",
"--header",
"Authorization: Bearer ${LINODE_API_TOKEN}"
],
"env": {
"LINODE_API_TOKEN": "..."
}
},
}
}
This MCP server provides the following tools for interacting with Linode API services:
#### Instance Operations
- list_instances - Get a list of all Linode instancesget_instance
- - Get details for a specific Linode instancecreate_instance
- - Create a new Linode instanceupdate_instance
- - Update a Linode instancedelete_instance
- - Delete a Linode instancereboot_instance
- - Reboot a Linode instanceboot_instance
- - Power on a Linode instanceshutdown_instance
- - Power off a Linode instanceresize_instance
- - Resize a Linode instanceclone_instance
- - Clone a Linode instance to a new Linoderebuild_instance
- - Rebuild a Linode instance with a new imagerescue_instance
- - Boot a Linode instance into rescue modereset_root_password
- - Reset the root password for a Linode instanceinitiate_migration
- - Initiate a DC migration for a Linode instanceupgrade_linode
- - Upgrade a Linode instance
#### Instance Configuration
- list_instance_configs - Get all configuration profiles for a Linode instanceget_instance_config
- - Get a specific configuration profile for a Linode instancecreate_instance_config
- - Create a new configuration profile for a Linode instanceupdate_instance_config
- - Update a configuration profile for a Linode instancedelete_instance_config
- - Delete a configuration profile for a Linode instance
#### Configuration Profile Interfaces
- list_config_interfaces - List all interfaces for a configuration profileget_config_interface
- - Get details for a specific configuration profile interfacecreate_config_interface
- - Create a new interface for a configuration profileupdate_config_interface
- - Update an interface for a configuration profiledelete_config_interface
- - Delete an interface from a configuration profilereorder_config_interfaces
- - Reorder interfaces for a configuration profile
#### Instance Disks
- list_instance_disks - Get all disks for a Linode instanceget_instance_disk
- - Get a specific disk for a Linode instancecreate_instance_disk
- - Create a new disk for a Linode instanceupdate_instance_disk
- - Update a disk for a Linode instancedelete_instance_disk
- - Delete a disk for a Linode instanceresize_instance_disk
- - Resize a disk for a Linode instanceclone_disk
- - Clone a disk to a new diskreset_disk_root_password
- - Reset a disk root password
#### Instance Backups
- list_backups - Get a list of all backups for a Linode instanceget_backup
- - Get details for a specific backupcreate_snapshot
- - Create a snapshot for a Linode instancecancel_backups
- - Cancel backups for a Linode instanceenable_backups
- - Enable backups for a Linode instancerestore_backup
- - Restore a backup to a Linode instance
#### IP Management
- get_networking_information - Get networking information for a Linode instanceallocate_ipv4_address
- - Allocate an IPv4 address for a Linode instanceget_ip_address
- - Get details for a specific IP addressupdate_ip_address_rdns
- - Update reverse DNS for an IP addressdelete_ipv4_address
- - Delete an IPv4 address
#### Firewall Management
- list_linode_firewalls - List firewalls for a Linode instanceapply_linode_firewalls
- - Apply firewalls to a Linode instance
#### Instance Stats and Transfer
- get_instance_stats - Get current statistics for a Linode instanceget_instance_stats_by_date
- - Get statistics for a Linode instance for a specific monthget_network_transfer
- - Get network transfer information for a Linode instanceget_monthly_network_transfer
- - Get monthly network transfer stats for a Linode instance
#### Related Resources
- list_instance_nodebalancers - List NodeBalancers attached to a Linode instancelist_instance_volumes
- - List volumes attached to a Linode instance
#### Kernels and Instance Types
- list_kernels - Get a list of all available kernelsget_kernel
- - Get details for a specific kernellist_instance_types
- - Get a list of all available Linode typesget_instance_type
- - Get details for a specific Linode type
- list_volumes - Get a list of all volumesget_volume
- - Get details for a specific volumecreate_volume
- - Create a new volumedelete_volume
- - Delete a volumeattach_volume
- - Attach a volume to a Linode instancedetach_volume
- - Detach a volume from a Linode instanceresize_volume
- - Resize a volume
#### IP Address Management
- get_ip_addresses - Get all IP addressesget_ip_address
- - Get details for a specific IP addressupdate_ip_address
- - Update reverse DNS for an IP addressallocate_ip
- - Allocate a new IP addressshare_ips
- - Share IP addresses between Linodes
#### IPv6 Management
- get_ipv6_ranges - Get all IPv6 rangesget_ipv6_range
- - Get a specific IPv6 rangeget_ipv6_pools
- - Get all IPv6 pools
#### Firewall Management
- get_firewalls - Get all firewallsget_firewall
- - Get details for a specific firewallcreate_firewall
- - Create a new firewallupdate_firewall
- - Update a firewalldelete_firewall
- - Delete a firewall
#### Firewall Rules
- get_firewall_rules - Get all rules for a specific firewallupdate_firewall_rules
- - Update rules for a specific firewall
#### Firewall Devices
- get_firewall_devices - Get all devices for a specific firewallcreate_firewall_device
- - Create a new device for a specific firewalldelete_firewall_device
- - Delete a device from a specific firewall
#### VLAN Management
- get_vlans - Get all VLANsget_vlan
- - Get a specific VLAN
- list_domains - Get a list of all domainsget_domain
- - Get details for a specific domaincreate_domain
- - Create a new domainupdate_domain
- - Update an existing domaindelete_domain
- - Delete a domainlist_domain_records
- - Get a list of all domain records for a domainget_domain_record
- - Get details for a specific domain recordcreate_domain_record
- - Create a new domain recordupdate_domain_record
- - Update a domain recorddelete_domain_record
- - Delete a domain recordimport_domain_zone
- - Import a domain zone from a remote nameserverclone_domain
- - Clone an existing domain to a new domainget_zone_file
- - Get DNS zone file for a domain
#### General Database Operations
- list_database_engines - Get a list of all available database engines (MySQL, PostgreSQL versions)get_database_engine
- - Get details for a specific database engine versionlist_database_types
- - Get a list of all available database instance types (sizes)get_database_type
- - Get details for a specific database instance typelist_database_instances
- - Get a list of all database instances (both MySQL and PostgreSQL)
#### MySQL Database Operations
- list_mysql_instances - Get a list of all MySQL database instancesget_mysql_instance
- - Get details for a specific MySQL database instancecreate_mysql_instance
- - Create a new MySQL database instanceupdate_mysql_instance
- - Update an existing MySQL database instance settingsdelete_mysql_instance
- - Delete a MySQL database instanceget_mysql_credentials
- - Get admin credentials for a MySQL database instancereset_mysql_credentials
- - Reset admin credentials for a MySQL database instanceget_mysql_ssl_certificate
- - Get the SSL certificate for a MySQL database instancepatch_mysql_instance
- - Apply the latest software updates to a MySQL database instancesuspend_mysql_instance
- - Suspend a MySQL database instance (billing continues)resume_mysql_instance
- - Resume a suspended MySQL database instance
#### PostgreSQL Database Operations
- list_postgresql_instances - Get a list of all PostgreSQL database instancesget_postgresql_instance
- - Get details for a specific PostgreSQL database instancecreate_postgresql_instance
- - Create a new PostgreSQL database instanceupdate_postgresql_instance
- - Update an existing PostgreSQL database instance settingsdelete_postgresql_instance
- - Delete a PostgreSQL database instanceget_postgresql_credentials
- - Get admin credentials for a PostgreSQL database instancereset_postgresql_credentials
- - Reset admin credentials for a PostgreSQL database instanceget_postgresql_ssl_certificate
- - Get the SSL certificate for a PostgreSQL database instancepatch_postgresql_instance
- - Apply the latest software updates to a PostgreSQL database instancesuspend_postgresql_instance
- - Suspend a PostgreSQL database instance (billing continues)resume_postgresql_instance
- - Resume a suspended PostgreSQL database instance
- list_nodebalancers - Get a list of all NodeBalancersget_nodebalancer
- - Get details for a specific NodeBalancercreate_nodebalancer
- - Create a new NodeBalancerdelete_nodebalancer
- - Delete a NodeBalancerlist_nodebalancer_configs
- - Get a list of config nodes for a NodeBalancercreate_nodebalancer_config
- - Create a new config for a NodeBalancerdelete_nodebalancer_config
- - Delete a NodeBalancer configlist_nodebalancer_nodes
- - Get a list of nodes for a NodeBalancer configcreate_nodebalancer_node
- - Create a new node for a NodeBalancer configdelete_nodebalancer_node
- - Delete a node from a NodeBalancer config
#### Bucket Management
- list_object_storage_clusters - Get a list of all Object Storage clusterslist_object_storage_buckets
- - Get a list of all Object Storage bucketsget_object_storage_bucket
- - Get details for a specific Object Storage bucketcreate_object_storage_bucket
- - Create a new Object Storage bucketdelete_object_storage_bucket
- - Delete an Object Storage bucketget_object_storage_bucket_access
- - Get access configuration for an Object Storage bucketupdate_object_storage_bucket_access
- - Update access configuration for an Object Storage bucket
#### Object Operations
- list_object_storage_objects - List objects in an Object Storage bucketupload_object
- - Upload a new object to a bucket from various sources (string, file, or URL)download_object
- - Download an object from a bucket to your local file systemdelete_object
- - Delete an object from a bucketupdate_object_acl
- - Update access control level (ACL) for an object in a bucketgenerate_object_url
- - Generate a pre-signed URL for an object in a bucket
#### Certificate Management
- get_object_storage_bucket_certificate - Get SSL/TLS certificate for an Object Storage bucketupload_object_storage_bucket_certificate
- - Upload SSL/TLS certificate for an Object Storage bucketdelete_object_storage_bucket_certificate
- - Delete SSL/TLS certificate for an Object Storage bucket
#### Access Key Management
- list_object_storage_keys - Get a list of all Object Storage keysget_object_storage_key
- - Get details for a specific Object Storage keycreate_object_storage_key
- - Create a new Object Storage keyupdate_object_storage_key
- - Update an Object Storage keydelete_object_storage_key
- - Delete an Object Storage keyget_object_storage_default_bucket_access
- - Get default bucket access configurationupdate_object_storage_default_bucket_access
- - Update default bucket access configuration
#### Usage and Service Information
- get_object_storage_transfer - Get Object Storage transfer statisticslist_object_storage_types
- - Get a list of all available Object Storage types with pricingcancel_object_storage
- - Cancel Object Storage service
- list_vpcs - Get a list of all VPCsget_vpc
- - Get details for a specific VPCcreate_vpc
- - Create a new VPCupdate_vpc
- - Update an existing VPCdelete_vpc
- - Delete a VPClist_vpc_subnets
- - List all subnets in a VPCget_vpc_subnet
- - Get details for a specific subnet in a VPCcreate_vpc_subnet
- - Create a new subnet in a VPCupdate_vpc_subnet
- - Update an existing subnet in a VPCdelete_vpc_subnet
- - Delete a subnet in a VPClist_vpc_ips
- - List all IP addresses in a VPC
- list_placement_groups - List all placement groupsget_placement_group
- - Get details for a specific placement groupcreate_placement_group
- - Create a new placement groupupdate_placement_group
- - Update an existing placement groupdelete_placement_group
- - Delete a placement groupassign_instances
- - Assign Linode instances to a placement groupunassign_instances
- - Unassign Linode instances from a placement group
- list_regions - Get a list of all available regionsget_region
- - Get details for a specific region
#### Cluster Operations
- list_kubernetes_clusters - List all Kubernetes clustersget_kubernetes_cluster
- - Get details for a specific Kubernetes clustercreate_kubernetes_cluster
- - Create a new Kubernetes clusterupdate_kubernetes_cluster
- - Update an existing Kubernetes clusterdelete_kubernetes_cluster
- - Delete a Kubernetes clusterget_kubernetes_kubeconfig
- - Get the kubeconfig for a Kubernetes clusterget_kubernetes_api_endpoints
- - Get the API endpoints for a Kubernetes clusterget_kubernetes_dashboard_url
- - Get the dashboard URL for a Kubernetes clusterdelete_kubernetes_service_token
- - Delete the service token for a Kubernetes clusterrecycle_kubernetes_cluster
- - Recycle all nodes in a Kubernetes clusterupgrade_kubernetes_cluster
- - Upgrade a Kubernetes cluster to the latest patch versionlist_kubernetes_versions
- - List all available Kubernetes versionsget_kubernetes_version
- - Get details for a specific Kubernetes versionlist_kubernetes_types
- - List all available Kubernetes types
#### Node Pool Operations
- list_kubernetes_node_pools - List all node pools in a Kubernetes clusterget_kubernetes_node_pool
- - Get details for a specific node poolcreate_kubernetes_node_pool
- - Create a new node pool for a Kubernetes clusterupdate_kubernetes_node_pool
- - Update an existing node pooldelete_kubernetes_node_pool
- - Delete a node pool from a Kubernetes clusterrecycle_kubernetes_nodes
- - Recycle specific nodes in a Kubernetes node pool
#### Node Operations
- delete_kubernetes_node - Delete a node from a Kubernetes clusterrecycle_kubernetes_node
- - Recycle a node in a Kubernetes cluster
- list_images - Get a list of all available imagesget_image
- - Get details for a specific imagecreate_image
- - Create a new image from an existing diskupload_image
- - Initialize an image uploadupdate_image
- - Update an existing imagedelete_image
- - Delete an imagereplicate_image
- - Replicate an image to other regions
- list_stackscripts - Get a list of all StackScriptsget_stackscript
- - Get details for a specific StackScriptcreate_stackscript
- - Create a new StackScriptupdate_stackscript
- - Update an existing StackScriptdelete_stackscript
- - Delete a StackScript
- list_tags - Get a list of all Tagsget_tag
- - Get details for a specific Tagcreate_tag
- - Create a new Tagdelete_tag
- - Delete a Tag
- list_tickets - List support tickets for your accountget_ticket
- - Get details of a specific support ticketcreate_ticket
- - Open a new support ticketclose_ticket
- - Close a support ticketlist_replies
- - List replies to a support ticketcreate_reply
- - Reply to a support ticketupload_attachment
- - Upload an attachment to a support ticket
- list_longview_clients - Get a list of all Longview clientsget_longview_client
- - Get details for a specific Longview clientcreate_longview_client
- - Create a new Longview clientupdate_longview_client
- - Update a Longview clientdelete_longview_client
- - Delete a Longview clientlist_longview_subscriptions
- - Get a list of all Longview subscription plansget_longview_subscription
- - Get details for a specific Longview subscription planget_longview_data
- - Get monitoring data from a Longview client
#### Profile Operations
- get_profile - Get your user profile informationupdate_profile
- - Update your user profile information
#### SSH Key Operations
- list_ssh_keys - List SSH keys associated with your profileget_ssh_key
- - Get details for a specific SSH keycreate_ssh_key
- - Add a new SSH key to your profileupdate_ssh_key
- - Update an existing SSH keydelete_ssh_key
- - Delete an SSH key from your profile
#### API Token Operations
- list_api_tokens - List API tokens associated with your profileget_api_token
- - Get details for a specific API tokencreate_personal_access_token
- - Create a new personal access tokenupdate_api_token
- - Update an existing API tokendelete_api_token
- - Delete an API tokenlist_api_scopes
- - List available API scopes for tokens and OAuth clients
#### Two-Factor Authentication
- get_two_factor_secret - Get a two-factor authentication secret and QR codeenable_two_factor
- - Enable two-factor authentication for your accountdisable_two_factor
- - Disable two-factor authentication for your account
#### Authorized Apps
- list_authorized_apps - List OAuth apps authorized to access your accountget_authorized_app
- - Get details about a specific authorized OAuth apprevoke_authorized_app
- - Revoke access for an authorized OAuth app
#### Trusted Devices
- list_trusted_devices - List devices trusted for two-factor authenticationget_trusted_device
- - Get details about a specific trusted devicerevoke_trusted_device
- - Revoke trusted status for a device
#### Grants
- list_grants - List grants for a restricted user
#### Login History
- list_logins - List login history for your accountget_login
- - Get details about a specific login event
#### Phone Verification
- delete_phone_number - Delete the phone number associated with your accountsend_phone_verification
- - Send a verification code to a phone numberverify_phone_number
- - Verify a phone number with a received code
#### User Preferences
- get_user_preferences - Get user interface preferencesupdate_user_preferences
- - Update user interface preferences
#### Security Questions
- get_security_questions - Get available security questionsanswer_security_questions
- - Answer security questions for account recovery
#### Account Operations
- get_account - Get your account informationupdate_account
- - Update your account information
#### Agreements and Services
- list_agreements - List legal agreementsacknowledge_agreements
- - Acknowledge legal agreementslist_available_services
- - List available services by regionget_region_service_availability
- - Get service availability for a specific region
#### Account Management
- cancel_account - Cancel your accountlist_child_accounts
- - List child accountsget_child_account
- - Get a child accountcreate_proxy_token
- - Create a proxy user token for a child account
#### Events
- list_events - List account eventsget_event
- - Get a specific eventmark_event_as_read
- - Mark an event as readmark_event_as_seen
- - Mark an event as seen
#### Billing
- list_invoices - List invoicesget_invoice
- - Get a specific invoicelist_invoice_items
- - List items for a specific invoiceget_account_network_transfer
- - Get network transfer information for the entire account
#### Login & Maintenance
- list_account_logins - List account loginsget_account_login
- - Get a specific account loginlist_maintenances
- - List maintenance eventslist_notifications
- - List notifications
#### OAuth Clients
- list_oauth_clients - List OAuth clientscreate_oauth_client
- - Create an OAuth clientget_oauth_client
- - Get an OAuth clientupdate_oauth_client
- - Update an OAuth clientdelete_oauth_client
- - Delete an OAuth clientreset_oauth_client_secret
- - Reset an OAuth client secret
#### Account Settings
- get_account_settings - Get account settingsupdate_account_settings
- - Update account settingsenable_managed_service
- - Enable Linode Managed service
#### User Management
- list_users - List userscreate_user
- - Create a userget_user
- - Get a userupdate_user
- - Update a userdelete_user
- - Delete a userget_user_grants
- - Get a user's grantsupdate_user_grants
- - Update a user's grants
MIT
To keep the npm README and GitHub README in sync, publish only from a clean main that is fast-forwarded to origin/main.
`bash`Patch release (recommended for docs-only changes)
npm run release:patch
Options:
- npm run release:dry-run (does everything except bump/publish/push)npm run release:patch -- --skip-lint
- (skip lint step)npm run release:patch -- --dry-run --allow-dirty` (dry run even if you have local changes)
-