Latitude.sh bare metal infrastructure management via API, MCP server, or CLI. Use when provisioning servers, managing VLANs, checking plans/regions, or automating bare metal deployments.
Manage bare metal servers on Latitude.sh via direct API, MCP server, or CLI.
| Method | Use Case | Location |
|---|---|---|
| Rust API Client | Programmatic access from Metal/GPU crates | crates/metal/src/providers/latitude/ |
| MCP Server | AI agent workflows (natural language) | npx latitudesh start |
CLI (lsh) | Interactive debugging | brew install latitudesh/tools/lsh |
The platform's native Latitude client lives in crates/metal/src/providers/latitude/.
use metal::providers::latitude::Latitude;
let client = Latitude::new(api_key, project_id)?;
// Create server
let server = client.create_server(CreateServerRequest {
hostname: "node-1".to_string(),
plan: "c2-small-x86".to_string(),
region: "MIA2".to_string(),
os: "ubuntu_22_04".to_string(),
ssh_keys: vec!["key-id".to_string()],
}).await?;
// Wait for ready
let server = client.wait_ready(&server.id, 600).await?;
// Reinstall with iPXE (for Talos)
client.reinstall_ipxe(&server.id, ReinstallIpxeRequest {
hostname: "node-1".to_string(),
ipxe_url: "https://example.com/talos.ipxe".to_string(),
}).await?;
| Operation | Method |
|---|---|
| Create server | create_server() |
| Get server | get_server(id) |
| List servers | list_servers() |
| Wait for ready | wait_ready(id, timeout) |
| Reinstall iPXE | reinstall_ipxe(id, req) |
| Delete server | delete_server(id) |
| List plans | list_plans() |
| List regions | list_regions() |
| Create VLAN | create_virtual_network(site, desc) |
| Assign to VLAN | assign_server_to_vlan(vlan_id, server_id) |
| Delete VLAN | delete_virtual_network(vlan_id) |
For natural language infrastructure management in Cursor, Claude, or VS Code.
# Cursor: Settings → Tools and Integrations → New MCP Server
{
"mcpServers": {
"latitudesh": {
"command": "npx",
"args": ["latitudesh", "start", "--bearer", "YOUR_API_TOKEN"]
}
}
}
# Claude Code CLI
claude mcp add latitudesh npx latitudesh start -- --bearer YOUR_API_TOKEN
"List all my Latitude servers"
"Create a c2-small-x86 server in MIA2 named test-node"
"What GPU plans are available in Dallas?"
"Delete server srv_xxx"
lsh)For interactive exploration and debugging.
brew install latitudesh/tools/lsh
# or
curl -fsSL https://cli.latitude.sh/install.sh | sh
lsh login API_KEY
lsh servers list
lsh servers create --hostname test --plan c2-small-x86 --site MIA2 --os ubuntu_22_04
lsh servers get srv_xxx
lsh servers delete srv_xxx
lsh plans list --json
Base URL: https://api.latitude.sh
Authorization: Bearer <API_KEY>
| Endpoint | Method | Description |
|---|---|---|
/servers | GET | List servers |
/servers | POST | Create server |
/servers/{id} | GET | Get server |
/servers/{id} | DELETE | Delete server |
/servers/{id}/reinstall | POST | Reinstall server |
/plans | GET | List plans |
/regions | GET | List regions |
/virtual_networks | GET/POST | VLANs |
All requests use JSON:API specification:
{
"data": {
"type": "servers",
"attributes": {
"hostname": "node-1",
"plan": "c2-small-x86",
"site": "MIA2"
}
}
}
// 1. Create server with any OS
let server = client.create_server(req).await?;
// 2. Wait for ready
let server = client.wait_ready(&server.id, 600).await?;
// 3. Reinstall with Talos iPXE
client.reinstall_ipxe(&server.id, ReinstallIpxeRequest {
hostname: server.hostname.clone(),
ipxe_url: talos_ipxe_url,
}).await?;
// 4. Wait for reinstall to complete
let server = client.wait_ready(&server.id, 600).await?;
let plans = client.list_plans().await?;
for plan in plans {
if let Some(regions) = &plan.attributes.regions {
for region in regions {
if region.stock_level.as_deref() == Some("high") {
println!("{}: available in {:?}",
plan.attributes.slug.as_deref().unwrap_or("unknown"),
region.locations.as_ref().and_then(|l| l.in_stock.as_ref())
);
}
}
}
}
| Variable | Description |
|---|---|
LATITUDE_API_KEY | API key from dashboard |
LATITUDE_PROJECT_ID | Project ID for operations |