Skip to main content

Secure OVH API proxy + Claude Code skill for AI agents

Project description

ovh-claude

CI Python License Status

Let Claude Code manage OVHcloud resources safely — API credentials stay local and never enter the LLM context.

  • Credentials stay on your machine
  • Simple API calls via ovh-api
  • Claude Code skill installs in one command

Why this exists

When an AI agent (Claude Code, an autonomous SRE bot, a multi-agent pipeline) needs to act on cloud infrastructure, the naive solution is to give it your API keys — pasted into the prompt, exported as env vars, or baked into the agent's context. Any of these leaks the secret into the model's input.

ovh-claude solves this by installing a local CLI (ovh-api) that reads your OVHcloud credentials from ~/.config/ovh/credentials and returns only the JSON the agent needs. The agent calls the CLI; the credentials never appear in any prompt.

Quickstart

# 1. Install from PyPI (under 1 min)
pipx install ovh-claude

# 2. Register the Claude Code skill
ovh-claude install-skill

# 3. Verify everything works end-to-end (incl. live API call)
ovh-claude doctor

# 4. First real call
ovh-api GET /me

If doctor passes, you're done. Total: under 5 minutes including token creation.

Prerequisites

Install pipx

pipx lets you install Python CLI tools in isolated environments.

Platform Command
macOS (Homebrew) brew install pipx && pipx ensurepath
Debian / Ubuntu sudo apt install pipx && pipx ensurepath
Fedora sudo dnf install pipx && pipx ensurepath
Arch / Manjaro sudo pacman -S python-pipx && pipx ensurepath
Windows (Scoop) scoop install pipx && pipx ensurepath
Any platform (fallback) python -m pip install --user pipx && python -m pipx ensurepath

After install, open a new shell (or run source ~/.zshrc / source ~/.bashrc) so the PATH is refreshed.

Create the OVH credentials file

Create ~/.config/ovh/credentials (Windows: %USERPROFILE%\.config\ovh\credentials):

[default]
endpoint=ovh-eu
application_key=YOUR_APP_KEY
application_secret=YOUR_APP_SECRET
consumer_key=YOUR_CONSUMER_KEY

Generate tokens at https://api.ovh.com/createToken/ with the rights you need.

Platform support

Platform Status Notes
macOS ✅ Supported (tested) Tested with pipx
Linux ✅ Supported (tested via CI on Ubuntu) Verified on Python 3.10/3.11/3.12 in CI
WSL (Ubuntu/Debian) 🟢 Should work, not yet tested Recommended path for Claude Code on Windows
Windows (PowerShell native) ⚠️ Best-effort, untested Credentials path: %USERPROFILE%\.config\ovh\credentials. JSON body in PowerShell: use single-quote outside, double-quote inside, or read from file. PRs welcome.

Usage

ovh-api GET /vps
ovh-api GET /vps/vps-xxx.ovh.net
ovh-api POST /domain/zone/example.com/record '{"fieldType":"A","subDomain":"@","target":"1.2.3.4","ttl":300}'
ovh-api DELETE /domain/zone/example.com/record/12345

Claude Code skill

After ovh-claude install-skill, the skill ovh-api is registered in ~/.claude/skills/. Claude agents automatically use it for OVH-related tasks. The bundled skill enforces operational defaults: GET before POST/DELETE, human confirmation before destructive actions, no secrets in stdout.

Security model

What ovh-claude protects:

  • OVH credentials are read from ~/.config/ovh/credentials, never passed via CLI arguments (no --api-secret … flag → no shell history leak)
  • Credentials never appear on stdout (only the API JSON response is printed)
  • Errors go to stderr with sanitized messages (no secret values)
  • The agent's LLM context never sees credentials, only API responses

What ovh-claude does NOT protect:

  • The agent's decisions — if the agent decides to delete a record, ovh-api DELETE … will delete it. Keep a human in the loop for destructive actions (the bundled skill enforces this convention but cannot prevent a misuse-prompted call).
  • OVH-side authorization — if your consumer key has permission to drop a domain, the proxy will let the agent drop it.
  • Local file system access — anyone with read access to ~/.config/ovh/credentials can use the proxy.

Best practices:

  • Generate a separate consumer key per environment (dev / staging / prod) at https://api.ovh.com/createToken/
  • Scope each token to the minimum API rights needed (e.g. GET /vps/* only, no DELETE)
  • Set expiry on tokens, rotate periodically
  • Never commit the credentials file — ~/.config/ovh/credentials is outside any repo by design

Contributing

Issues and PRs welcome — especially platform validation for Linux, WSL, and Windows.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ovh_claude-0.1.3.tar.gz (11.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ovh_claude-0.1.3-py3-none-any.whl (8.3 kB view details)

Uploaded Python 3

File details

Details for the file ovh_claude-0.1.3.tar.gz.

File metadata

  • Download URL: ovh_claude-0.1.3.tar.gz
  • Upload date:
  • Size: 11.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ovh_claude-0.1.3.tar.gz
Algorithm Hash digest
SHA256 27702da91da0c840fd010ea5b988f4218a84e007bee51b3db8565a6035620cb0
MD5 4a9adecb61980fe489ed34a448a87520
BLAKE2b-256 fe514c6b7d5a24cd8cab44918e072c6253eca8dc65e6ea95a172c6f0d1dd06f1

See more details on using hashes here.

Provenance

The following attestation bundles were made for ovh_claude-0.1.3.tar.gz:

Publisher: publish.yml on swoelffel/ovh-claude

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ovh_claude-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: ovh_claude-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 8.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ovh_claude-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 0e5012468d440ce2075fb2f60069d85666bf244280129b973a1ca1ffa81c5324
MD5 24377c5ad664f4f9937902f7289b0c35
BLAKE2b-256 495b6ed691489d2860fa9b487275565165730b9285240478d74fcebd43793311

See more details on using hashes here.

Provenance

The following attestation bundles were made for ovh_claude-0.1.3-py3-none-any.whl:

Publisher: publish.yml on swoelffel/ovh-claude

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page