Cloud Compute & Storage MCP — Full Capabilities Reference
Complete technical reference for every tool, action, and parameter exposed by this MCP server.
Overview
| Property | Value |
|---|---|
| Tools | 10 |
| Total actions | 85 |
| Transport | Streamable HTTP (/mcp) + optional STDIO |
| Auth | Authorization: apikey <key>, x-api-key, or CLOUD_API_KEY env |
| Domains | Compute, Storage, Networking, Load Balancing, Security, IP Management |
1. discover_infrastructure
One-stop discovery of projects, regions, and quota capacity.
| Action | Description | Required Params | Optional Params |
|---|---|---|---|
discover | Returns all projects and regions. Optionally enriches each region with quota data (fetched in parallel). | — | include_quotas, client_id |
create_project | Creates a new project. | project_name | — |
Parameters:
| Name | Type | Default | Description |
|---|---|---|---|
action | "discover" | "create_project" | "discover" | Operation to perform |
include_quotas | bool | false | Enrich regions with quota capacity (needs client_id) |
client_id | int | — | Account ID for quota lookups |
project_name | str | — | Name for the new project (only with create_project) |
Returns:
discover:{"projects": [...], "regions": [...]}
Withinclude_quotas=True: each region getsquotasandhas_capacityfields, sorted capacity-first.create_project:{"project": {...}}
2. provision_vm
Smart, quota-aware VM provisioning in a single call. Replaces the 6-step manual workflow: list_projects → list_regions → list_images → list_flavors → create → poll.
Parameters:
| Name | Type | Default | Required | Description |
|---|---|---|---|---|
name | str | — | Yes | VM name (3-63 chars, alphanumeric + . - _) |
image_pattern | str | — | Yes | Regex to match OS image (e.g. "ubuntu.*24", "centos") |
flavor_pattern | str | — | Yes | Regex to match flavor (e.g. "g1-standard-2-4", "standard-2") |
boot_disk_gb | int | 20 | No | Boot disk size in GB |
project_id | int | env default | No | Project ID |
region_id | int | env default | No | Region ID. Omit + provide client_id for auto-selection |
client_id | int | — | No | Enables quota pre-check and auto-region selection |
user_data | str | — | No | Cloud-init script in base64. Ignored when password is set. See cloud-init examples |
network_type | str | "external" | No | Interface type: "external", "subnet", "any_subnet", "reserved_fixed_ip" |
volume_ids | list[str] | — | No | Existing volume IDs to attach as data disks alongside the boot disk |
Intelligence built-in:
- Fetches images + flavors in parallel
- Matches by regex on
display_namethenname - Detects image architecture (ARM/x86) and filters flavors for compatibility
- Pre-checks VM count, external IP, and volume storage quotas when
client_idprovided - Auto-selects first region with capacity when
region_idomitted +client_idgiven
Returns: {"instance": {...}, "region_id": int, "image_used": {...}, "flavor_used": str}
3. provision_baremetal
Smart, quota-aware bare metal server provisioning.
Parameters:
| Name | Type | Default | Required | Description |
|---|---|---|---|---|
name | str | — | Yes | Server name |
image_pattern | str | — | Yes | Regex to match OS image |
flavor_pattern | str | — | Yes | Regex to match bare metal flavor (e.g. "bm1-hf") |
project_id | int | env default | No | Project ID |
region_id | int | env default | No | Region ID |
client_id | int | — | No | For auto-region selection via quota check |
user_data | str | — | No | Cloud-init user data (base64) |
network_type | str | "external" | No | Network type |
Returns: {"server": {...}, "region_id": int, "image_used": {...}, "flavor_used": str}
4. provision_load_balancer
Create a load balancer with optional quota pre-check.
Parameters:
| Name | Type | Default | Required | Description |
|---|---|---|---|---|
name | str | — | Yes | LB name |
project_id | int | env default | No | Project ID |
region_id | int | env default | No | Region ID |
client_id | int | — | No | Checks LB quota before creating |
flavor | str | — | No | LB flavor (e.g. "lb1-1-2", "lb2-2-2"). Use manage_compute(action="list_lb_flavors") to see options |
listeners | list[dict] | — | No | Listener configs. Each needs: name, protocol, protocol_port. Can include nested pools with members |
vip_network_id | str | — | No | VIP network. Default: external network |
vip_subnet_id | str | — | No | VIP subnet within the VIP network |
Returns: {"load_balancer": {...}}
5. manage_compute
VM and bare metal lifecycle, network interfaces, and catalog browsing.
Actions
| Action | Description | Required Params | Optional Params |
|---|---|---|---|
| VM Lifecycle | |||
list_vms | List all VMs | — | project_id, region_id, limit, offset |
get_vm | VM details (status, IPs, flavor, volumes) | instance_id | project_id, region_id |
start_vm | Power on a VM | instance_id | project_id, region_id |
stop_vm | Power off a VM | instance_id | project_id, region_id |
delete_vm | Delete a VM (stop first!) | instance_id | project_id, region_id |
resize_vm | Change VM flavor (stop first!) | instance_id, flavor_id | project_id, region_id |
update_vm | Rename a VM | instance_id | name, project_id, region_id |
| Network Interfaces | |||
list_interfaces | List VM network interfaces | instance_id | project_id, region_id |
attach_interface | Add network to running VM | instance_id, network_type | network_id, subnet_id, port_id, project_id, region_id |
detach_interface | Remove network from VM | instance_id, port_id, ip_address | project_id, region_id |
| Bare Metal | |||
list_baremetal | List bare metal servers | — | project_id, region_id, limit, offset |
rebuild_baremetal | Rebuild server OS | server_id, image_id | user_data, project_id, region_id |
| Catalog | |||
list_images | List available VM OS images | — | project_id, region_id, limit, offset |
list_vm_flavors | List VM sizes/pricing | — | include_prices, project_id, region_id |
list_baremetal_images | List bare metal OS images | — | project_id, region_id |
list_baremetal_flavors | List bare metal sizes | — | project_id, region_id |
list_lb_flavors | List load balancer sizes | — | project_id, region_id |
attach_interface network_type options:
"external"— public IP (default)"subnet"— private; also needsnetwork_id+subnet_id"any_subnet"— auto-picks subnet; needsnetwork_id"reserved_fixed_ip"— use existing reserved IP; needsport_id
6. manage_storage
Block storage volumes and volume snapshots.
Actions
| Action | Description | Required Params | Optional Params |
|---|---|---|---|
| Volumes | |||
list_volumes | List all volumes | — | project_id, region_id, limit, offset |
get_volume | Volume details (size, status, attachments) | volume_id | project_id, region_id |
create_volume | Create a new volume | name, size | type_name, source, project_id, region_id |
delete_volume | Delete a volume (detach first!) | volume_id | project_id, region_id |
extend_volume | Resize volume (increase only) | volume_id, size (new total GB) | project_id, region_id |
attach_volume | Attach volume to a VM | volume_id, instance_id | attachment_tag, project_id, region_id |
detach_volume | Detach volume from a VM | volume_id | project_id, region_id |
| Snapshots | |||
create_snapshot | Snapshot a volume | name, volume_id | description, project_id, region_id |
get_snapshot | Snapshot details | snapshot_id | project_id, region_id |
update_snapshot | Rename a snapshot | snapshot_id | name, project_id, region_id |
delete_snapshot | Delete a snapshot | snapshot_id | project_id, region_id |
Volume source values:
| Value | Description |
|---|---|
"new-volume" | Blank disk (default) |
"image" | Boot from an OS image |
"snapshot" | Restore from a snapshot |
Volume type_name values:
| Value | Description |
|---|---|
"standard" | Network SSD, 6 IOPS/GiB, max 4500 IOPS |
"ssd_hiiops" | High-performance SSD, 60 IOPS/GiB, max 9000 IOPS |
"ssd_lowlatency" | Low-latency SSD, avg 300µs. No snapshots or resize |
"cold" | Cold storage, cost-optimized |
"ultra" | Ultra-high performance |
7. manage_networking
Networks, subnets, and routers.
Actions
| Action | Description | Required Params | Optional Params |
|---|---|---|---|
| Networks | |||
list_networks | List all networks | — | project_id, region_id, limit, offset |
get_network | Network details | network_id | project_id, region_id |
create_network | Create a network | name | create_router_flag, network_type, project_id, region_id |
update_network | Rename a network | network_id | name, project_id, region_id |
delete_network | Delete a network | network_id | project_id, region_id |
| Subnets | |||
list_subnets | List subnets in a network | network_id | project_id, region_id, limit, offset |
get_subnet | Subnet details | subnet_id | project_id, region_id |
create_subnet | Create a subnet | name, network_id, cidr | enable_dhcp, dns_nameservers, gateway_ip, connect_to_network_router, project_id, region_id |
delete_subnet | Delete a subnet | subnet_id | project_id, region_id |
| Routers | |||
list_routers | List all routers | — | project_id, region_id, limit, offset |
get_router | Router details | router_id | project_id, region_id |
create_router | Create a router | name | external_gateway_info, interfaces, routes, project_id, region_id |
update_router | Update a router | router_id | name, external_gateway_info, routes, project_id, region_id |
delete_router | Delete a router | router_id | project_id, region_id |
attach_subnet | Attach subnet to router | router_id, subnet_id | ip_address, project_id, region_id |
detach_subnet | Detach subnet from router | router_id, subnet_id | project_id, region_id |
create_subnet defaults: DHCP enabled, auto-connects to network's router.
8. manage_ips
Floating IPs (public) and reserved fixed IPs (private or VIP).
Actions
| Action | Description | Required Params | Optional Params |
|---|---|---|---|
| Floating IPs | |||
list_floating_ips | List public IPs | — | project_id, region_id, limit, offset |
get_floating_ip | Floating IP details | floating_ip_id | project_id, region_id |
create_floating_ip | Allocate a new public IP | — | port_id, project_id, region_id |
assign_floating_ip | Assign to a port/VM | floating_ip_id, port_id | fixed_ip_address, project_id, region_id |
unassign_floating_ip | Detach from port | floating_ip_id | project_id, region_id |
delete_floating_ip | Release a public IP | floating_ip_id | project_id, region_id |
| Reserved Fixed IPs | |||
list_reserved_ips | List reserved IPs | — | project_id, region_id, limit, offset |
get_reserved_ip | Reserved IP details | port_id | project_id, region_id |
create_reserved_ip_external | Reserve on external network | — | is_vip, project_id, region_id |
create_reserved_ip_subnet | Reserve on a subnet | subnet_id | is_vip, project_id, region_id |
update_reserved_ip | Toggle VIP flag | port_id | is_vip, project_id, region_id |
delete_reserved_ip | Delete reserved IP | port_id | project_id, region_id |
9. manage_security
Security groups (firewall rules) and SSH keys.
Actions
| Action | Description | Required Params | Optional Params |
|---|---|---|---|
| Security Groups | |||
list_security_groups | List all groups | — | project_id, region_id, limit, offset |
get_security_group | Group details + rules | group_id | project_id, region_id |
create_security_group | Create group with rules | name | description, rules, project_id, region_id |
update_security_group | Update group/rules | group_id | name, description, rules, project_id, region_id |
delete_security_group | Delete a group | group_id | project_id, region_id |
| SSH Keys | |||
list_ssh_keys | List SSH keys (project-scoped) | — | project_id, limit, offset |
get_ssh_key | Key details | ssh_key_id | project_id |
create_ssh_key | Import or generate an SSH key | name | public_key, shared_in_project, project_id |
update_ssh_key | Update sharing flag | ssh_key_id | shared_in_project, project_id |
delete_ssh_key | Delete an SSH key | ssh_key_id | project_id |
Security group rule example:
{
"direction": "ingress",
"protocol": "tcp",
"port_range_min": 80,
"port_range_max": 80,
"remote_ip_prefix": "0.0.0.0/0"
}
SSH key modes:
- Import: provide
public_key(e.g."ssh-rsa AAAA...") - Generate: omit
public_key— server generates a keypair and returns the private key (save it immediately!)
10. manage_load_balancers
Full load balancer lifecycle: LBs, listeners (front-end ports), pools (backend groups), and members (backend servers).
Actions
| Action | Description | Required Params | Optional Params |
|---|---|---|---|
| LB Lifecycle | |||
list | List all load balancers | — | project_id, region_id, limit, offset |
get | LB details (VIP, listeners, status) | load_balancer_id | project_id, region_id |
update | Rename a LB | load_balancer_id | name, project_id, region_id |
delete | Delete a LB | load_balancer_id | project_id, region_id |
| Listeners | |||
list_listeners | List listeners on a LB | load_balancer_id | project_id, region_id |
create_listener | Add front-end listener | load_balancer_id, name, protocol, protocol_port | project_id, region_id |
get_listener | Listener details | listener_id | project_id, region_id |
delete_listener | Remove a listener | listener_id | project_id, region_id |
| Pools | |||
list_pools | List pools on a LB | load_balancer_id | project_id, region_id |
create_pool | Create backend pool | name, lb_algorithm, protocol | load_balancer_id, listener_id, project_id, region_id |
get_pool | Pool details + members | pool_id | project_id, region_id |
delete_pool | Delete a pool | pool_id | project_id, region_id |
| Members | |||
add_member | Add backend server to pool | pool_id, address, protocol_port | instance_id, subnet_id, weight, project_id, region_id |
delete_member | Remove server from pool | pool_id, member_id | project_id, region_id |
Listener protocols: HTTP, HTTPS, TCP, UDP, TERMINATED_HTTPS
Pool algorithms: ROUND_ROBIN, LEAST_CONNECTIONS, SOURCE_IP
Pool protocols: HTTP, HTTPS, TCP, UDP
Common Parameters (All Tools)
| Parameter | Description | Default Behavior |
|---|---|---|
project_id | Substrate Cloud project ID | Falls back to CLOUD_DEFAULT_PROJECT_ID env var |
region_id | Substrate Cloud region ID | Falls back to CLOUD_DEFAULT_REGION_ID env var |
limit | Pagination page size | 100 |
offset | Pagination offset | 0 |
Environment Variables
| Variable | Required | Description |
|---|---|---|
CLOUD_API_KEY | Yes (or via header) | Substrate Cloud API key |
CLOUD_DEFAULT_PROJECT_ID | No | Default project for all tools |
CLOUD_DEFAULT_REGION_ID | No | Default region for all tools |
HOST | No | Server bind address (default 0.0.0.0) |
PORT | No | Server port (default 8000) |
LOG_LEVEL | No | Logging level (default info) |
Error Handling
All API errors return detailed messages in the format:
Cloud API error <status_code>: <detailed response body>
Common error patterns:
- 400 — Invalid parameters (missing required fields, wrong values)
- 403 — Insufficient permissions or API key issue
- 404 — Resource not found (wrong ID)
- 409 — Conflict (e.g. deleting attached volume, resizing running VM)
- Quota exceeded — Pre-check catches this before API call when
client_idis provided