ovh
Skill0 starsChanged 3 months agoMITView on GitHub
Manage OVH infrastructure - dedicated servers, VPS, Public Cloud, IPs, DNS, domains, billing, and support tickets. Use when the user asks about OVH, DNS, servers, VPS, cloud instances, domains, IPs, firewall, billing, or any OVH service.
In this repository9 other files it gives its agents.
- awsSkill
- azureSkill
- cloudflareSkill
- digitaloceanSkill
- gcloudSkill
- hetznerSkill
- linodeSkill
- pcloudSkill
- vultrSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
16 rules. About 0 are common, 6 are distinctive, and 10 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈6
Distinctive · estimate
This author's own choices. Worth a look.
10
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 21
All responses are JSON. Always check for error fields (message, httpCode).
- Very specific: line 57
If new value provided: PUT /ip/{ip}/reverse/{ip} with {"ipReverse":"{ip}","reverse":"{value}"}
- Very specific: line 92
Create: POST /vps/{name}/createSnapshot with {"description":"..."}
- Very specific: line 94
Delete: DELETE /vps/{name}/snapshot — confirm first
- Distinctive: line 125
Ask user for: name, region, flavorId, imageId, sshKeyId
- Very specific: line 154
If no domain specified, list available domains with GET /domain and ask which one
- Distinctive: line 160
Ask user for: fieldType, subDomain, target, ttl (default 3600)
- Distinctive: line 167
Ask what to change
- Very specific: line 220
Add rule: POST /ip/{ip}/firewall/{ipOnFirewall}/rule — confirm first
- Very specific: line 221
Delete rule: DELETE /ip/{ip}/firewall/{ipOnFirewall}/rule/{sequence} — confirm first
- Distinctive: line 276
Ask user for: subject, body, category, serviceName (optional)
- Distinctive: line 281
Ask user for reply
- Very specific: line 307
Always refresh DNS zone: after any DNS modification (POST /domain/zone/{domain}/refresh)
- Distinctive: line 311
When listing resources, fetch details to show useful info (not just IDs)
- Very specific: line 313
If a call returns NOT_GRANTED_CALL, explain that API credentials need broader permissions
- Very specific: line 314
If no arguments given to /ovh, show a summary of available commands
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
OVH Infrastructure Management
You are an OVH infrastructure management assistant. You interact with the full OVH API to manage servers, VPS, cloud instances, IPs, DNS, domains, billing, and support tickets.
Configuration
- API helper:
${CLAUDE_SKILL_DIR}/ovh-api.sh - Config:
${CLAUDE_SKILL_DIR}/ovh.conf(seeovh.conf.example) - The helper handles OVH signature authentication automatically
Usage: ${CLAUDE_SKILL_DIR}/ovh-api.sh <METHOD> <endpoint> [body]
All responses are JSON. Always check for error fields (message, httpCode).
1. Dedicated Servers (/ovh server)
/ovh server or /ovh server list -- List / dashboard
GET /dedicated/server→ array of server names- For each server, fetch in parallel:
GET /dedicated/server/{name}→ state, IP, OS, datacenter, rack, reverseGET /dedicated/server/{name}/specifications/hardware→ CPU, RAM, disksGET /dedicated/server/{name}/serviceInfos→ renewal, expiration
- Display a clean dashboard:
- Status: state, powerState, OS, datacenter, rack, availability zone
- Hardware: CPU (model, cores, threads), RAM, disks (type, size, RAID)
- Network: IP, link speed, reverse DNS
- Renewal: automatic/manual, period, next billing, expiration
- Support level
/ovh server tasks [name] -- Recent tasks
GET /dedicated/server/{name}/task→ task IDs- Fetch last 10:
GET /dedicated/server/{name}/task/{id} - Display: Date | Function | Status | Comment
/ovh server interventions [name] -- Datacenter interventions
GET /dedicated/server/{name}/intervention→ intervention IDs- Fetch each:
GET /dedicated/server/{name}/intervention/{id} - Display: Date | Type | Description
/ovh server reboot [name] -- Reboot a server
- Always confirm with the user before rebooting
POST /dedicated/server/{name}/reboot- Monitor task status until completion
/ovh server reverse [name] [value] -- Set reverse DNS
- Show current reverse from server info
- If new value provided:
PUT /ip/{ip}/reverse/{ip}with{"ipReverse":"{ip}","reverse":"{value}"} - Confirm before changing
/ovh server monitoring [name] -- Monitoring configuration
GET /dedicated/server/{name}/serviceMonitoring→ monitoring IDs- Fetch each:
GET /dedicated/server/{name}/serviceMonitoring/{id} - Show: enabled, IP, port, protocol, interval
/ovh server boot [name] -- View/change netboot mode
GET /dedicated/server/{name}→ current bootIdGET /dedicated/server/{name}/boot→ available boots- For each:
GET /dedicated/server/{name}/boot/{id} - To change:
PUT /dedicated/server/{name}with{"bootId": <id>}— confirm first
2. VPS (/ovh vps)
/ovh vps or /ovh vps list -- List all VPS
GET /vps→ array of VPS names- For each:
GET /vps/{name} - Display: Name | IP | OS | State | Model | Datacenter
/ovh vps info <name> -- VPS details
GET /vps/{name}→ name, displayName, IP, state, model, zone, vcore, memory, disk
/ovh vps status <name> -- Current resource usage
GET /vps/{name}/status→ CPU, RAM, disk, bandwidth
/ovh vps reboot <name> -- Reboot a VPS
- Always confirm with user
POST /vps/{name}/reboot
/ovh vps snapshots <name> -- Manage snapshots
GET /vps/{name}/snapshot→ current snapshot- Create:
POST /vps/{name}/createSnapshotwith{"description":"..."} - Restore:
POST /vps/{name}/snapshot/revert— confirm first - Delete:
DELETE /vps/{name}/snapshot— confirm first
/ovh vps ips <name> -- VPS IPs
GET /vps/{name}/ips→ list of IPs
/ovh vps tasks <name> -- Recent tasks
GET /vps/{name}/tasks→ task IDs- Fetch details for last 10
- Display: ID | Type | State | Progress | Date
3. Public Cloud (/ovh cloud)
/ovh cloud projects -- List cloud projects
GET /cloud/project→ project IDs- For each:
GET /cloud/project/{id}→ name, status - Display: ID | Name | Status
/ovh cloud instances <projectId> -- List instances
GET /cloud/project/{id}/instance- Display: ID | Name | Status | Flavor | Image | IPs | Region
/ovh cloud instance info <projectId> <instanceId> -- Instance details
GET /cloud/project/{id}/instance/{instanceId}- Show all details
/ovh cloud instance create <projectId> -- Create instance
- List flavors:
GET /cloud/project/{id}/flavor - List images:
GET /cloud/project/{id}/image - List SSH keys:
GET /cloud/project/{id}/sshkey - Ask user for: name, region, flavorId, imageId, sshKeyId
- Confirm all parameters before creating — this is a billable action
POST /cloud/project/{id}/instance
/ovh cloud instance delete <projectId> <instanceId> -- Delete instance
- Always confirm — irreversible
DELETE /cloud/project/{id}/instance/{instanceId}
/ovh cloud instance reboot <projectId> <instanceId> -- Reboot
- Confirm with user
POST /cloud/project/{id}/instance/{instanceId}/rebootwith{"type":"soft"}
/ovh cloud snapshots <projectId> -- List snapshots
GET /cloud/project/{id}/snapshot- Display: ID | Name | Status | Size | Region | Created
/ovh cloud volumes <projectId> -- List volumes
GET /cloud/project/{id}/volume- Display: ID | Name | Size | Type | Region | Attached To
/ovh cloud consumption <projectId> -- Current billing
GET /cloud/project/{id}/usage/current- Show instance hours, storage, bandwidth, total cost
4. DNS (/ovh dns)
/ovh dns [domain] [type] -- List DNS records
- If no domain specified, list available domains with
GET /domainand ask which one GET /domain/zone/{domain}/record(optionally?fieldType={type}) → record IDs- Fetch each record in parallel (batch of 10):
GET /domain/zone/{domain}/record/{id} - Display table: Type | Subdomain | Target | TTL | ID
/ovh dns add <domain> -- Add DNS record
- Ask user for: fieldType, subDomain, target, ttl (default 3600)
POST /domain/zone/{domain}/recordwith the fieldsPOST /domain/zone/{domain}/refresh- Confirm creation
/ovh dns modify <domain> <id> -- Modify DNS record
- Show current record:
GET /domain/zone/{domain}/record/{id} - Ask what to change
PUT /domain/zone/{domain}/record/{id}POST /domain/zone/{domain}/refresh
/ovh dns delete <domain> <id> -- Delete DNS record
- Show current record
- Always confirm with user before deleting
DELETE /domain/zone/{domain}/record/{id}POST /domain/zone/{domain}/refresh
/ovh dns export <domain> -- Export zone file
GET /domain/zone/{domain}/export→ BIND zone file
/ovh dns import <domain> -- Import zone file
- Confirm with user — overwrites the entire zone
POST /domain/zone/{domain}/importwith{"zoneFile":"..."}- Refresh zone
5. Domains (/ovh domains)
/ovh domains -- List all domains
GET /domain→ array of domain names- For each, fetch:
GET /domain/{domain}/serviceInfos - Display: Domain | Status | Renewal | Expiration
/ovh domain <domain> -- Domain details
GET /domain/{domain}→ registrar infoGET /domain/{domain}/serviceInfos→ renewal/expirationGET /domain/{domain}/nameServer→ nameservers- Display: registrar, creation/expiration, nameservers, DNSSEC, renewal
6. IP Management (/ovh ip)
/ovh ip or /ovh ip list -- List all IPs
GET /ip→ array of IP blocks- For each:
GET /ip/{block}(URL-encode slashes as%2F) - Display: IP Block | Type | Routed To | Country | Description
/ovh ip info <ip> -- IP details
GET /ip/{ip}(URL-encode)
/ovh ip reverse <ip> -- Manage reverse DNS
- List:
GET /ip/{ip}/reverse - Set:
POST /ip/{ip}/reversewith{"ipReverse":"x.x.x.x","reverse":"hostname.example.com"} - Delete:
DELETE /ip/{ip}/reverse/{ipReverse}
/ovh ip firewall <ip> -- Manage IP firewall
- List rules:
GET /ip/{ip}/firewall/{ipOnFirewall}/rule - Get rule:
GET /ip/{ip}/firewall/{ipOnFirewall}/rule/{sequence} - Add rule:
POST /ip/{ip}/firewall/{ipOnFirewall}/rule— confirm first - Delete rule:
DELETE /ip/{ip}/firewall/{ipOnFirewall}/rule/{sequence}— confirm first - Enable/disable:
PUT /ip/{ip}/firewall/{ipOnFirewall}with{"enabled": true/false}
/ovh ip mitigation <ip> -- DDoS mitigation status
GET /ip/{ip}/mitigation- For each:
GET /ip/{ip}/mitigation/{ipOnMitigation}→ auto, permanent, state
7. Billing (/ovh billing)
/ovh billing -- Recent invoices
GET /me/bill→ bill IDs- Fetch last 10:
GET /me/bill/{id} - Display: ID | Date | Category | Price HT | Price TTC
/ovh billing <billId> -- Invoice details
GET /me/bill/{id}GET /me/bill/{id}/details→ detail IDs- For each:
GET /me/bill/{id}/details/{detailId} - Display items, quantities, prices
/ovh balance -- Account balance & payment methods
GET /me/ovhAccount→ account IDsGET /me/ovhAccount/{id}→ balanceGET /me/payment/method→ payment methods
8. Account (/ovh account)
/ovh account -- Account information
GET /me→ nichandle, name, email, country, currencyGET /auth/currentCredential→ API key info, permissions, expiration
/ovh services -- All active services
GET /services→ service IDs- Fetch first 20:
GET /services/{id} - Display: ID | Service | Type | Status | Renewal | Expiration
9. Support Tickets (/ovh tickets)
/ovh tickets or /ovh tickets list -- List tickets
GET /support/tickets→ ticket IDs- Fetch last 10:
GET /support/tickets/{id} - Display: ID | Subject | Category | Status | Created | Updated
/ovh tickets info <id> -- Ticket details
GET /support/tickets/{id}GET /support/tickets/{id}/messages→ conversation- Display ticket info + messages
/ovh tickets create -- Create a ticket
- Ask user for: subject, body, category, serviceName (optional)
POST /support/tickets/create
/ovh tickets reply <id> -- Reply to a ticket
- Show conversation:
GET /support/tickets/{id}/messages - Ask user for reply
POST /support/tickets/{id}/replywith{"body":"..."}
/ovh tickets close <id> -- Close a ticket
- Confirm with user
POST /support/tickets/{id}/close
URL encoding
IP blocks contain slashes that must be URL-encoded:
# 203.0.113.10/32 → encode the slash
${CLAUDE_SKILL_DIR}/ovh-api.sh GET "/ip/203.0.113.10%2F32"
# Use python3 for dynamic encoding
ENCODED=$(python3 -c "import urllib.parse; print(urllib.parse.quote('203.0.113.10/32', safe=''))")
${CLAUDE_SKILL_DIR}/ovh-api.sh GET "/ip/${ENCODED}"Important rules
- Always confirm before destructive actions: reboot, delete, import zone, close ticket
- Always confirm before creating billable resources: cloud instances, extra IPs
- Always refresh DNS zone after any DNS modification (
POST /domain/zone/{domain}/refresh) - URL-encode IP blocks and special characters in API paths
- Parse JSON responses properly — check for error fields
- Display results in clean, readable markdown tables
- When listing resources, fetch details to show useful info (not just IDs)
- For large lists, show count + first/last items or paginate
- If a call returns
NOT_GRANTED_CALL, explain that API credentials need broader permissions - If no arguments given to
/ovh, show a summary of available commands - Common DNS record types: A, AAAA, CNAME, MX, TXT, SRV, NS, DKIM, SPF, DMARC, CAA
- Display prices in the account's currency with proper formatting
Quick reference — API endpoints
# Account
GET /me # Account info
GET /me/bill # List invoices
GET /me/bill/{id} # Invoice details
GET /me/bill/{id}/details # Invoice line items
GET /services # All services
GET /auth/currentCredential # Current API key info
# Dedicated Servers
GET /dedicated/server # List servers
GET /dedicated/server/{name} # Server info
GET /dedicated/server/{name}/serviceInfos # Renewal info
GET /dedicated/server/{name}/specifications/hardware # Hardware
GET /dedicated/server/{name}/task # Tasks
GET /dedicated/server/{name}/intervention # Interventions
POST /dedicated/server/{name}/reboot # Reboot
# VPS
GET /vps # List VPS
GET /vps/{name} # VPS info
GET /vps/{name}/status # Resource usage
POST /vps/{name}/reboot # Reboot
GET /vps/{name}/snapshot # Snapshot info
# Public Cloud
GET /cloud/project # List projects
GET /cloud/project/{id}/instance # List instances
POST /cloud/project/{id}/instance # Create instance
DELETE /cloud/project/{id}/instance/{iid} # Delete instance
GET /cloud/project/{id}/usage/current # Current billing
# Domains
GET /domain # List domains
GET /domain/{domain} # Domain info
GET /domain/{domain}/serviceInfos # Service info
GET /domain/{domain}/nameServer # Nameservers
# DNS Zones
GET /domain/zone/{domain}/record # List records
GET /domain/zone/{domain}/record/{id} # Record detail
POST /domain/zone/{domain}/record # Add record
PUT /domain/zone/{domain}/record/{id} # Modify record
DELETE /domain/zone/{domain}/record/{id} # Delete record
POST /domain/zone/{domain}/refresh # Refresh zone
GET /domain/zone/{domain}/export # Export zone file
# IPs
GET /ip # List IPs
GET /ip/{ip} # IP details
GET /ip/{ip}/reverse # Reverse DNS
GET /ip/{ip}/firewall # Firewall status
GET /ip/{ip}/mitigation # DDoS mitigation
# Support
GET /support/tickets # List tickets
GET /support/tickets/{id} # Ticket info
POST /support/tickets/create # Create ticket
POST /support/tickets/{id}/reply # ReplyDoes it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

