ASI Cloud developers
Automate your cloud, or let your AI agent run it.
Manage VMs, S3 storage, firewall rules and AI Inference with the REST API, or connect Claude Code, OpenCode, Cursor or VS Code through the MCP server. Hosted in New Zealand.
curl https://cloud.asi.nz/api/v1/vm-data/costs?current_only=true \
-H "Authorization: Bearer $ASI_CLOUD_TOKEN"Quick start
Up and running in three steps
One organisation API token works for the REST API and the MCP server. It can do everything your account can, so keep it out of code and shared files.
Create a token
Sign in to the ASI Cloud portal and open API Tokens. Copy the token straight away: it is shown once.
Make your first call
Keep the token in an environment variable and call the API:
export ASI_CLOUD_TOKEN='your-api-token'
curl https://cloud.asi.nz/api/v1/vm-data/costs?current_only=true \
-H "Authorization: Bearer $ASI_CLOUD_TOKEN"Connect an AI agent
Add the MCP server to your coding agent and ask in plain language, for example "What's running, and what does it cost this month?"
Set up MCPWhat you can do
Everything in the portal, from code
The REST API and the MCP server cover the same products, with the same rules and limits as the portal.
| Area | Read | Change |
|---|---|---|
| Virtual machines | VMs with this month's cost, live state and IP addresses, snapshots, templates, regions | Deploy, power on and off, rename, resize, delete, snapshots Operations run in the background: poll their operation_id. |
| SSH keys | Keys with fingerprints | Upload a public key, delete Generating a key pair is REST only, so private keys never pass through an AI chat. |
| Firewall rules | Port forwards and their public address, per region | Add a port forward with optional source IPs and expiry, delete |
| S3 storage | Buckets, permissions and IP allowlists | Create, rotate key, set permissions or allowlist, delete, empty and delete Secret keys are shown once and never stored. |
| AI Inference | Status, models and prices, keys | Turn on or off, create, revoke and delete keys |
| Billing | Billing records and summaries, prices, organisations | Read only |
MCP server
Connect your AI agent
A remote MCP server at https://cloud.asi.nz/mcp gives your agent 43 tools that call the same API with your organisation token.
Run once in a terminal where your token is set:
export ASI_CLOUD_TOKEN='your-api-token'
claude mcp add --transport http asi-cloud https://cloud.asi.nz/mcp \
--header "Authorization: Bearer $ASI_CLOUD_TOKEN"Claude Code saves the server, with the token, in its own configuration. Check it with claude mcp list.
Keep the token in a file only you can read, then add the server to your global configuration:
printf '%s' 'your-api-token' > ~/.config/opencode/asi-cloud-token
chmod 600 ~/.config/opencode/asi-cloud-tokenopencode mcp add asi-cloud --global --url https://cloud.asi.nz/mcp \
--header 'Authorization=Bearer {file:~/.config/opencode/asi-cloud-token}'
opencode reload
opencode mcp listUse --global, or OpenCode saves the server to the nearest project folder instead. OpenCode runs a background service that reads environment variables only when it starts, so use the {file:...} form, and run opencode reload after any change.
Add to ~/.cursor/mcp.json, with ASI_CLOUD_TOKEN set in the environment Cursor starts from:
{
"mcpServers": {
"asi-cloud": {
"url": "https://cloud.asi.nz/mcp",
"headers": {
"Authorization": "Bearer ${env:ASI_CLOUD_TOKEN}"
}
}
}
}Restart Cursor after editing the file.
Add to .vscode/mcp.json in your project. VS Code asks for the token the first time and stores it securely:
{
"servers": {
"asi-cloud": {
"type": "http",
"url": "https://cloud.asi.nz/mcp",
"headers": {
"Authorization": "Bearer ${input:asi-cloud-token}"
}
}
},
"inputs": [
{
"type": "promptString",
"id": "asi-cloud-token",
"description": "ASI Cloud API token",
"password": true
}
]
}The file holds no secret, so it is safe to commit.
What your agent can do
Read tools answer questions. The others act on your account, and a well-configured client asks you first.
Check your client's permissions
- Allowing every tool of this server also allows deleting VMs and buckets and turning on paid services.
- Deploying VMs, creating buckets and turning on AI Inference cost money but are not marked destructive, so some clients run them without asking.
- Secrets returned by a tool appear in the conversation and in your AI provider's logs.
Coming later
Claude.ai and ChatGPT connectors need OAuth sign-in, which is on the way. Staff admin tokens are refused.
All 43 MCP tools
Virtual machines
list_vms
Read only
The VMs that exist now, with specs, power state and this month's estimated cost (month-to-date and full-month estimate, NZD excluding GST), as on the portal's VM list.
get_vm_state
Read only
Live power state and IP addresses of a VM, read from the hypervisor now.
list_vm_snapshots
Read only
Snapshots of a VM (at most 3 per VM), with their snapshot ids.
list_regions
Read only
Regions (deployment presets) that accept new VMs.
list_vm_templates
Read only
Templates a VM can be deployed from, with default specs.
get_operation_status
Read only
Progress of an asynchronous VM operation (deploy, delete, power, rename, resize, snapshot) by the operation_id it returned.
deploy_vm
Changes
Create a new VM from a template (list_vm_templates).
power_on_vm
Changes
Start a powered-off VM.
power_off_vm
Destructive
Shut a VM down: whatever runs on it stops.
rename_vm
Changes
Change a VM's name.
resize_vm
Changes
Change a powered-off VM's vCPUs, memory or disk (disk can only grow).
delete_vm
Destructive
Permanently delete a powered-off VM and its disks.
create_vm_snapshot
Changes
Take a snapshot of a VM (at most 3 per VM).
delete_vm_snapshot
Destructive
Permanently delete a snapshot.
restore_vm_snapshot
Destructive
Roll a powered-off VM back to a snapshot.
SSH keys
list_ssh_keys
Read only
SSH keys on the account (name, type, fingerprint, public key).
upload_ssh_key
Changes
Add the user's own OpenSSH public key (one line: ssh-ed25519, ssh-rsa or ecdsa-sha2-nistp256/384/521), for example the contents of ~/.ssh/id_ed25519.pub.
delete_ssh_key
Destructive
Remove an SSH key from the account.
Firewall rules
list_firewall_rules
Read only
Port-forwarding rules from the region's public IP to VMs, plus the region's public IP and subnet.
add_firewall_rule
Changes
Forward a port on the region's public IP to a VM.
delete_firewall_rule
Destructive
Remove a port forward: traffic to that port stops at once.
S3 storage
list_s3_buckets
Read only
S3 buckets with their access key id, permissions, IP allowlist and endpoint (path-style addressing).
create_s3_bucket
Changes
Create a bucket with its own access key.
rotate_s3_key
Destructive
Issue a new access key for a bucket.
set_s3_permissions
Destructive
Replace what the bucket's key may do.
set_s3_allowlist
Destructive
Replace the public IPv4 /32s the bucket's key works from (at most 20); an empty list removes the restriction.
delete_s3_bucket
Destructive
Delete a bucket that is already empty.
empty_and_delete_s3_bucket
Destructive
Permanently delete every object in a bucket, then the bucket.
AI Inference
get_ai_inference_status
Read only
Whether AI Inference is on, whether it can be turned on (and why not), the base URLs for OpenAI- and Anthropic-compatible clients, rate limits, and the models with prices (NZD per million tokens, excluding GST).
list_ai_inference_keys
Read only
AI Inference API keys (name, prefix, status, expiry, last used, updated hourly).
enable_ai_inference
Changes
Turn on pay-per-token AI Inference.
disable_ai_inference
Destructive
Turn off AI Inference: every API key stops working within seconds, including keys the user may be using right now.
create_ai_inference_key
Changes
Create an API key for the AI Inference endpoints (base URLs in get_ai_inference_status).
revoke_ai_inference_key
Destructive
Revoke a key: anything using it stops within seconds.
delete_ai_inference_key
Destructive
Remove a revoked or expired key from the list (revoke it first).
Product pricing
search_products
Read only
Search ASI's product catalogue by keyword (product name, model, brand) or by manufacturer part number.
price_products
Read only
ASI's current sell price and stock for up to 50 manufacturer part numbers, the codes that go on a purchase order (for example SMT1500IC or MG8J4X/A), not product names.
Account and billing
list_organisations
Read only
The organisations this token can read: its own and, for a white-label parent, its direct child organisations.
get_billing_summary
Read only
Totals of the latest daily billing run, by resource type.
list_billing_records
Read only
Billing lines (one per resource per daily run).
list_prices
Read only
The organisation's prices per resource type (NZD excluding GST).
list_support_tickets
Read only
Support tickets with ASI (subject, description, status, priority, category), most recently updated first.
create_support_ticket
Changes
Open a support ticket with ASI's support team, who reply to the account's email.
Reference
Docs, specs and agent skills
API reference
Every endpoint with its parameters, responses and errors. Try calls in the browser with your token.
API skill
A Markdown guide that teaches an agent to use the REST API correctly. Use it where MCP is not available.
Product pricing
Look up the IT products ASI sells and quote indicative NZD prices by part number. 20 requests a minute per IP address.
Good to know
Things that trip people up
Your VM list
Use GET /vm-data/costs?current_only=true. Each row's id works with every VM operation. GET /vm-data is a cursor-paged history of hourly snapshots, so one VM appears many times, and a page greater than 1 returns 422.
Costs and invoices
VM costs are estimates in NZD excluding GST. GET /billings/summary is the latest daily billing run, not the invoice: a month has many runs, and the largest batch_id carries the month's figures.
Secrets are shown once
S3 secret keys, AI Inference keys and generated SSH private keys come back in one response and are never stored. If one is lost, rotate or replace it.
Public pages, private API
These docs are public. Every cloud call under /api/v1 and the MCP server need a bearer token. Product pricing under /api/v1/products does not, and neither does the product pricing MCP server at https://cloud.asi.nz/mcp/products; adding an organisation token raises their limit from 20 to 60 lookups a minute.
Product search
Quote by part number with POST /price. Search returns at most 25 rows a page (per_page up to 25), and meta.total includes rows that have no sell price.
Limits
60 requests a minute per token and per_page up to 100. One VM deployment and one new SSH key per minute. S3 endpoints accept connections from New Zealand IP addresses only.