agentleFS
iboumedieniboumedien/claude-skills/ovh/SKILL.md

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.

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
  1. Very specific:

    All responses are JSON. Always check for error fields (message, httpCode).

    line 21
  2. Very specific:

    If new value provided: PUT /ip/{ip}/reverse/{ip} with {"ipReverse":"{ip}","reverse":"{value}"}

    line 57
  3. Very specific:

    Create: POST /vps/{name}/createSnapshot with {"description":"..."}

    line 92
  4. Very specific:

    Delete: DELETE /vps/{name}/snapshot — confirm first

    line 94
  5. Distinctive:

    Ask user for: name, region, flavorId, imageId, sshKeyId

    line 125
  6. Very specific:

    If no domain specified, list available domains with GET /domain and ask which one

    line 154
  7. Distinctive:

    Ask user for: fieldType, subDomain, target, ttl (default 3600)

    line 160
  8. Distinctive:

    Ask what to change

    line 167
  9. Very specific:

    Add rule: POST /ip/{ip}/firewall/{ipOnFirewall}/rule — confirm first

    line 220
  10. Very specific:

    Delete rule: DELETE /ip/{ip}/firewall/{ipOnFirewall}/rule/{sequence} — confirm first

    line 221
  11. Distinctive:

    Ask user for: subject, body, category, serviceName (optional)

    line 276
  12. Distinctive:

    Ask user for reply

    line 281
  13. Very specific:

    Always refresh DNS zone: after any DNS modification (POST /domain/zone/{domain}/refresh)

    line 307
  14. Distinctive:

    When listing resources, fetch details to show useful info (not just IDs)

    line 311
  15. Very specific:

    If a call returns NOT_GRANTED_CALL, explain that API credentials need broader permissions

    line 313
  16. Very specific:

    If no arguments given to /ovh, show a summary of available commands

    line 314

≈ “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.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

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 (see ovh.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

  1. GET /dedicated/server → array of server names
  2. For each server, fetch in parallel:
    • GET /dedicated/server/{name} → state, IP, OS, datacenter, rack, reverse
    • GET /dedicated/server/{name}/specifications/hardware → CPU, RAM, disks
    • GET /dedicated/server/{name}/serviceInfos → renewal, expiration
  3. 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

  1. GET /dedicated/server/{name}/task → task IDs
  2. Fetch last 10: GET /dedicated/server/{name}/task/{id}
  3. Display: Date | Function | Status | Comment

/ovh server interventions [name] -- Datacenter interventions

  1. GET /dedicated/server/{name}/intervention → intervention IDs
  2. Fetch each: GET /dedicated/server/{name}/intervention/{id}
  3. Display: Date | Type | Description

/ovh server reboot [name] -- Reboot a server

  1. Always confirm with the user before rebooting
  2. POST /dedicated/server/{name}/reboot
  3. Monitor task status until completion

/ovh server reverse [name] [value] -- Set reverse DNS

  1. Show current reverse from server info
  2. If new value provided: PUT /ip/{ip}/reverse/{ip} with {"ipReverse":"{ip}","reverse":"{value}"}
  3. Confirm before changing

/ovh server monitoring [name] -- Monitoring configuration

  1. GET /dedicated/server/{name}/serviceMonitoring → monitoring IDs
  2. Fetch each: GET /dedicated/server/{name}/serviceMonitoring/{id}
  3. Show: enabled, IP, port, protocol, interval

/ovh server boot [name] -- View/change netboot mode

  1. GET /dedicated/server/{name} → current bootId
  2. GET /dedicated/server/{name}/boot → available boots
  3. For each: GET /dedicated/server/{name}/boot/{id}
  4. To change: PUT /dedicated/server/{name} with {"bootId": <id>} — confirm first

2. VPS (/ovh vps)

/ovh vps or /ovh vps list -- List all VPS

  1. GET /vps → array of VPS names
  2. For each: GET /vps/{name}
  3. Display: Name | IP | OS | State | Model | Datacenter

/ovh vps info <name> -- VPS details

  1. GET /vps/{name} → name, displayName, IP, state, model, zone, vcore, memory, disk

/ovh vps status <name> -- Current resource usage

  1. GET /vps/{name}/status → CPU, RAM, disk, bandwidth

/ovh vps reboot <name> -- Reboot a VPS

  1. Always confirm with user
  2. POST /vps/{name}/reboot

/ovh vps snapshots <name> -- Manage snapshots

  1. GET /vps/{name}/snapshot → current snapshot
  2. Create: POST /vps/{name}/createSnapshot with {"description":"..."}
  3. Restore: POST /vps/{name}/snapshot/revert — confirm first
  4. Delete: DELETE /vps/{name}/snapshot — confirm first

/ovh vps ips <name> -- VPS IPs

  1. GET /vps/{name}/ips → list of IPs

/ovh vps tasks <name> -- Recent tasks

  1. GET /vps/{name}/tasks → task IDs
  2. Fetch details for last 10
  3. Display: ID | Type | State | Progress | Date

3. Public Cloud (/ovh cloud)

/ovh cloud projects -- List cloud projects

  1. GET /cloud/project → project IDs
  2. For each: GET /cloud/project/{id} → name, status
  3. Display: ID | Name | Status

/ovh cloud instances <projectId> -- List instances

  1. GET /cloud/project/{id}/instance
  2. Display: ID | Name | Status | Flavor | Image | IPs | Region

/ovh cloud instance info <projectId> <instanceId> -- Instance details

  1. GET /cloud/project/{id}/instance/{instanceId}
  2. Show all details

/ovh cloud instance create <projectId> -- Create instance

  1. List flavors: GET /cloud/project/{id}/flavor
  2. List images: GET /cloud/project/{id}/image
  3. List SSH keys: GET /cloud/project/{id}/sshkey
  4. Ask user for: name, region, flavorId, imageId, sshKeyId
  5. Confirm all parameters before creating — this is a billable action
  6. POST /cloud/project/{id}/instance

/ovh cloud instance delete <projectId> <instanceId> -- Delete instance

  1. Always confirm — irreversible
  2. DELETE /cloud/project/{id}/instance/{instanceId}

/ovh cloud instance reboot <projectId> <instanceId> -- Reboot

  1. Confirm with user
  2. POST /cloud/project/{id}/instance/{instanceId}/reboot with {"type":"soft"}

/ovh cloud snapshots <projectId> -- List snapshots

  1. GET /cloud/project/{id}/snapshot
  2. Display: ID | Name | Status | Size | Region | Created

/ovh cloud volumes <projectId> -- List volumes

  1. GET /cloud/project/{id}/volume
  2. Display: ID | Name | Size | Type | Region | Attached To

/ovh cloud consumption <projectId> -- Current billing

  1. GET /cloud/project/{id}/usage/current
  2. Show instance hours, storage, bandwidth, total cost

4. DNS (/ovh dns)

/ovh dns [domain] [type] -- List DNS records

  1. If no domain specified, list available domains with GET /domain and ask which one
  2. GET /domain/zone/{domain}/record (optionally ?fieldType={type}) → record IDs
  3. Fetch each record in parallel (batch of 10): GET /domain/zone/{domain}/record/{id}
  4. Display table: Type | Subdomain | Target | TTL | ID

/ovh dns add <domain> -- Add DNS record

  1. Ask user for: fieldType, subDomain, target, ttl (default 3600)
  2. POST /domain/zone/{domain}/record with the fields
  3. POST /domain/zone/{domain}/refresh
  4. Confirm creation

/ovh dns modify <domain> <id> -- Modify DNS record

  1. Show current record: GET /domain/zone/{domain}/record/{id}
  2. Ask what to change
  3. PUT /domain/zone/{domain}/record/{id}
  4. POST /domain/zone/{domain}/refresh

/ovh dns delete <domain> <id> -- Delete DNS record

  1. Show current record
  2. Always confirm with user before deleting
  3. DELETE /domain/zone/{domain}/record/{id}
  4. POST /domain/zone/{domain}/refresh

/ovh dns export <domain> -- Export zone file

  1. GET /domain/zone/{domain}/export → BIND zone file

/ovh dns import <domain> -- Import zone file

  1. Confirm with user — overwrites the entire zone
  2. POST /domain/zone/{domain}/import with {"zoneFile":"..."}
  3. Refresh zone

5. Domains (/ovh domains)

/ovh domains -- List all domains

  1. GET /domain → array of domain names
  2. For each, fetch: GET /domain/{domain}/serviceInfos
  3. Display: Domain | Status | Renewal | Expiration

/ovh domain <domain> -- Domain details

  1. GET /domain/{domain} → registrar info
  2. GET /domain/{domain}/serviceInfos → renewal/expiration
  3. GET /domain/{domain}/nameServer → nameservers
  4. Display: registrar, creation/expiration, nameservers, DNSSEC, renewal

6. IP Management (/ovh ip)

/ovh ip or /ovh ip list -- List all IPs

  1. GET /ip → array of IP blocks
  2. For each: GET /ip/{block} (URL-encode slashes as %2F)
  3. Display: IP Block | Type | Routed To | Country | Description

/ovh ip info <ip> -- IP details

  1. GET /ip/{ip} (URL-encode)

/ovh ip reverse <ip> -- Manage reverse DNS

  1. List: GET /ip/{ip}/reverse
  2. Set: POST /ip/{ip}/reverse with {"ipReverse":"x.x.x.x","reverse":"hostname.example.com"}
  3. Delete: DELETE /ip/{ip}/reverse/{ipReverse}

/ovh ip firewall <ip> -- Manage IP firewall

  1. List rules: GET /ip/{ip}/firewall/{ipOnFirewall}/rule
  2. Get rule: GET /ip/{ip}/firewall/{ipOnFirewall}/rule/{sequence}
  3. Add rule: POST /ip/{ip}/firewall/{ipOnFirewall}/rule — confirm first
  4. Delete rule: DELETE /ip/{ip}/firewall/{ipOnFirewall}/rule/{sequence} — confirm first
  5. Enable/disable: PUT /ip/{ip}/firewall/{ipOnFirewall} with {"enabled": true/false}

/ovh ip mitigation <ip> -- DDoS mitigation status

  1. GET /ip/{ip}/mitigation
  2. For each: GET /ip/{ip}/mitigation/{ipOnMitigation} → auto, permanent, state

7. Billing (/ovh billing)

/ovh billing -- Recent invoices

  1. GET /me/bill → bill IDs
  2. Fetch last 10: GET /me/bill/{id}
  3. Display: ID | Date | Category | Price HT | Price TTC

/ovh billing <billId> -- Invoice details

  1. GET /me/bill/{id}
  2. GET /me/bill/{id}/details → detail IDs
  3. For each: GET /me/bill/{id}/details/{detailId}
  4. Display items, quantities, prices

/ovh balance -- Account balance & payment methods

  1. GET /me/ovhAccount → account IDs
  2. GET /me/ovhAccount/{id} → balance
  3. GET /me/payment/method → payment methods

8. Account (/ovh account)

/ovh account -- Account information

  1. GET /me → nichandle, name, email, country, currency
  2. GET /auth/currentCredential → API key info, permissions, expiration

/ovh services -- All active services

  1. GET /services → service IDs
  2. Fetch first 20: GET /services/{id}
  3. Display: ID | Service | Type | Status | Renewal | Expiration

9. Support Tickets (/ovh tickets)

/ovh tickets or /ovh tickets list -- List tickets

  1. GET /support/tickets → ticket IDs
  2. Fetch last 10: GET /support/tickets/{id}
  3. Display: ID | Subject | Category | Status | Created | Updated

/ovh tickets info <id> -- Ticket details

  1. GET /support/tickets/{id}
  2. GET /support/tickets/{id}/messages → conversation
  3. Display ticket info + messages

/ovh tickets create -- Create a ticket

  1. Ask user for: subject, body, category, serviceName (optional)
  2. POST /support/tickets/create

/ovh tickets reply <id> -- Reply to a ticket

  1. Show conversation: GET /support/tickets/{id}/messages
  2. Ask user for reply
  3. POST /support/tickets/{id}/reply with {"body":"..."}

/ovh tickets close <id> -- Close a ticket

  1. Confirm with user
  2. 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           # Reply

Download now (ZIP)

Does 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
What did you use it for? e.g. Reviewing pull requests in a Rails app

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.