Secure OVH API proxy + Claude Code skill for AI agents
Project description
ovh-claude
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/credentialscan 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/credentialsis outside any repo by design
Contributing
Issues and PRs welcome — especially platform validation for Linux, WSL, and Windows.
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
27702da91da0c840fd010ea5b988f4218a84e007bee51b3db8565a6035620cb0
|
|
| MD5 |
4a9adecb61980fe489ed34a448a87520
|
|
| BLAKE2b-256 |
fe514c6b7d5a24cd8cab44918e072c6253eca8dc65e6ea95a172c6f0d1dd06f1
|
Provenance
The following attestation bundles were made for ovh_claude-0.1.3.tar.gz:
Publisher:
publish.yml on swoelffel/ovh-claude
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ovh_claude-0.1.3.tar.gz -
Subject digest:
27702da91da0c840fd010ea5b988f4218a84e007bee51b3db8565a6035620cb0 - Sigstore transparency entry: 1550096112
- Sigstore integration time:
-
Permalink:
swoelffel/ovh-claude@e523904e6e522ac23a67fbcc36c3391ebb12b027 -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/swoelffel
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@e523904e6e522ac23a67fbcc36c3391ebb12b027 -
Trigger Event:
release
-
Statement type:
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0e5012468d440ce2075fb2f60069d85666bf244280129b973a1ca1ffa81c5324
|
|
| MD5 |
24377c5ad664f4f9937902f7289b0c35
|
|
| BLAKE2b-256 |
495b6ed691489d2860fa9b487275565165730b9285240478d74fcebd43793311
|
Provenance
The following attestation bundles were made for ovh_claude-0.1.3-py3-none-any.whl:
Publisher:
publish.yml on swoelffel/ovh-claude
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ovh_claude-0.1.3-py3-none-any.whl -
Subject digest:
0e5012468d440ce2075fb2f60069d85666bf244280129b973a1ca1ffa81c5324 - Sigstore transparency entry: 1550096155
- Sigstore integration time:
-
Permalink:
swoelffel/ovh-claude@e523904e6e522ac23a67fbcc36c3391ebb12b027 -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/swoelffel
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@e523904e6e522ac23a67fbcc36c3391ebb12b027 -
Trigger Event:
release
-
Statement type: