Skip to main content
Glama
mgcrea

mcp-ovh-api

by mgcrea

@mgcrea/mcp-ovh-api

npm version GHCR

Ein Model Context Protocol-Server für die OVHcloud-API, fokussiert auf Object Storage: Buckets, Objekte, Projektbenutzer, S3-Zugangsdaten und die Speicherrichtlinien, die sie zusammenhalten.

Der Server ist standardmäßig schreibgeschützt. Mutierende Werkzeuge werden nicht nur verweigert, wenn Schreibzugriff deaktiviert ist – sie werden nie registriert, sodass ein Agent sie überhaupt nicht aufrufen kann.

Funktionen

  • Kuratierte Werkzeuge über die /1.0-API von OVHcloud mit Beschreibungen, die deren Fallstricke ausführen (siehe Wissenswerte Fallstricke).

  • Standardmäßig schreibgeschützt. OVH_ALLOW_WRITES=1 fügt die Schreibwerkzeuge hinzu; die destruktiven erfordern dann zusätzlich bei jedem Aufruf ein explizites confirm: true.

  • Alle drei OVH-Authentifizierungsmethoden, automatisch ausgewählt anhand der vorhandenen Umgebungsvariablen: OAuth2-Dienstkonto (empfohlen), Anwendungsschlüssel + Consumer-Key (SHA1-signiert, mit automatischer Korrektur der Uhrzeitabweichung) oder ein statisches Zugriffstoken.

  • Richtlinienvoreinstellungen – einschließlich write-only, das OVHs eigene Rollenabkürzung nicht bietet.

  • Listenergebnisse werden zusammengefasst, und OVHs veraltetes, pro-Bucket-objects[]-Array (das jedes Objekt im Bucket einbettet) wird auf beiden Seiten unterdrückt.

  • X-Ovh-QueryID wird bei jedem Fehler angezeigt, weil das das Erste ist, wonach der OVH-Support fragt.

  • Ein ovh_request-Notausgang für den Rest der API (nur GET, sofern Schreibzugriff nicht aktiviert ist).

  • Natives fetch, keine Laufzeitabhängigkeiten außer dem MCP-SDK und Zod.

Installieren

pnpm install
pnpm build

Konfigurieren

Wählen Sie eine Authentifizierungsmethode.

(A) OAuth2-Dienstkonto – empfohlen

  1. Erstellen Sie ein IAM-Dienstkonto unter https://www.ovh.com/manager/#/iam/service-account.

  2. Weisen Sie ihm eine IAM-Richtlinie zu, die Ihrem Public-Cloud-Projekt Zugriff gewährt (für Object Storage: publicCloudProject:apiovh:* auf die Projektressource).

  3. Kopieren Sie Client-ID und Secret in .env.

Tokens gelten eine Stunde und werden vor Ablauf zwischengespeichert und erneuert.

(B) Anwendungsschlüssel + Consumer-Key

Erstellen Sie das Trio in einem Schritt unter https://eu.api.ovh.com/createToken/. Die dort aufgeführten Zugriffsregeln sind für immer festgelegt – ein Consumer-Key kann später nicht erweitert werden. Gewähren Sie also von vornherein, was Sie benötigen:

GET    /cloud/project/*
POST   /cloud/project/*
PUT    /cloud/project/*
DELETE /cloud/project/*
GET    /me

Anfragen werden mit SHA1 über secret+consumerKey+METHOD+URL+BODY+TIMESTAMP signiert. Eine Uhr, die mehr als ~30s von OVH abweicht, lässt jeden Aufruf mit einem irreführenden Invalid signature fehlschlagen. Der Server prüft daher beim Start einmal /auth/time und korrigiert die Abweichung.

(C) Statisches Zugriffstoken

Setzen Sie OVH_ACCESS_TOKEN, und es wird als Authorization: Bearer gesendet.

cp .env.example .env

Variable

Erforderlich

Beschreibung

OVH_ENDPOINT

nein

ovh-eu (Standard), ovh-ca, ovh-us, kimsufi-*, soyoustart-*.

OVH_CLIENT_ID / OVH_CLIENT_SECRET

(A)

IAM-Dienstkonto. Deren Vorhandensein wählt OAuth2.

OVH_APPLICATION_KEY / _SECRET

(B)

Anwendungsschlüsselpaar.

OVH_CONSUMER_KEY

(B)

Dazu ausgestellter Consumer-Key.

OVH_ACCESS_TOKEN

(C)

Vorab erstelltes Bearer-Token.

OVH_AUTH_METHOD

nein

Erzwingt oauth2, signature oder accessToken. Andernfalls abgeleitet.

OVH_CLOUD_PROJECT

nein

Standardprojekt – die 32-stellige Hex-serviceName, nicht der Anzeigename.

OVH_REGION

nein

Standard-Speicherregion, in Großbuchstaben (GRA, SBG, DE, UK).

OVH_ALLOW_WRITES

nein

Auf 1 setzen, um die Schreibwerkzeuge zu registrieren. Standardmäßig aus.

OVH_API_URL

nein

Überschreibt die API-Basis-URL vollständig.

OVH_MAX_RETRIES

nein

Wiederholungsbudget für 401 / 429 / 5xx. Standard: 3.

OVH_REFRESH_SKEW_SECONDS

nein

OAuth2-Token so lange vor Ablauf erneuern. Standard: 60.

OVH_DEBUG

nein

Auf 1 setzen, um Debug-Ausgaben auf stderr zu protokollieren.

Ausführen

pnpm start   # speaks JSON-RPC over stdio

In Claude Code einbinden

Fügen Sie zu .mcp.json (Projekt) oder ~/.claude.json (global) hinzu:

{
  "mcpServers": {
    "ovh": {
      "command": "node",
      "args": ["/absolute/path/to/mcp-ovh-api/dist/cli.js"],
      "env": {
        "OVH_CLIENT_ID": "...",
        "OVH_CLIENT_SECRET": "...",
        "OVH_CLOUD_PROJECT": "abcdef0123456789abcdef0123456789",
        "OVH_REGION": "UK"
      }
    }
  }
}

Werkzeuge anzeigen

npx @modelcontextprotocol/inspector node dist/cli.js

Wissenswerte Fallstricke

Alle sind in die Werkzeugbeschreibungen eingearbeitet, aber sie erklären die Form dieses Servers:

  1. *OVH hat keine Bucket-Richtlinien – nur Benutzerrichtlinien.* Ein rohes JSON-Dokument pro Projektbenutzer, und dieses Dokument ist die gesamte Zugriffskontrollfläche. Das Setzen einer Richtlinie ersetzt alles, was dieser Benutzer zuvor konnte, über alle Buckets hinweg.

  2. Eine Richtlinie kann den Besitzer des Buckets nicht einschränken. OVH fällt auf ACLs zurück, und der Besitzer hat FULL_CONTROL: „Wenn der Benutzer der Bucket-Besitzer ist und selbst wenn es keine explizite Erlaubnis in der Richtliniendatei gibt, wird der Benutzer autorisiert." Ein eingeschränkter Schlüssel muss daher zu einem neuen Projektbenutzer gehören, der den Bucket nicht erstellt hat. ovh_provision_s3_user prüft die ownerId des Buckets und verweigert, wenn Sie auf den Besitzer zeigen.

  3. Derselbe Rückfall gilt pro Objekt. Wer ein Objekt hochlädt, besitzt es und erhält FULL_CONTROL darauf über die Objekt-ACL. Das bloße Weglassen von s3:GetObject verhindert also nicht, dass ein Nur-Upload-Schlüssel alles zurücklesen kann, was er geschrieben hat – verifiziert gegen die Live-API, wo eine bloße Allow-List-Richtlinie dem Schlüssel problemlos seine eigenen Uploads auslieferte, während sie korrekt jedes Objekt verweigerte, das jemand anderes hochgeladen hatte. Ein explizites Deny ist erforderlich, und es schlägt die ACL. Deshalb liefert die write-only-Voreinstellung eine Deny-Anweisung statt einer bloßen Allow-List.

Zwei kleinere. s3:PutObject allein erlaubt weiterhin blindes Überschreiben vorhandener Schlüssel innerhalb des erlaubten Präfixes – ein „write-only"-Schlüssel ist kein Append-only-Schlüssel, was ein guter Grund ist, Versionierung auf dem Bucket zu aktivieren. Und Richtlinienänderungen brauchen bis zu ~30 Sekunden, um sich auszubreiten: Ein Testlauf fünf Sekunden nach ovh_set_storage_policy zeigt noch das alte Verhalten, was sich genau wie eine still fehlgeschlagene Richtlinie liest.

Werkzeuge

Jedes projektbezogene Werkzeug akzeptiert ein optionales project, und jedes Speicherwerkzeug eine optionale region, die OVH_CLOUD_PROJECT / OVH_REGION pro Aufruf überschreiben. Mit W markierte Werkzeuge existieren nur, wenn OVH_ALLOW_WRITES=1; mit ⚠️ markierte sind destruktiv und erfordern zusätzlich confirm: true.

Beginnen Sie mit ovh_whoami. Es meldet, welche Authentifizierungsmethode aktiv ist, welches Konto Sie sind und die Uhrzeitabweichung gegenüber OVH – worum es bei einem 401 bei der Signaturmethode fast immer geht.

Bereich

Werkzeuge

Meta

ovh_whoami, ovh_list_projects, ovh_get_project, ovh_list_regions, ovh_get_region

Buckets

ovh_list_buckets, ovh_get_bucket, ovh_get_bucket_lifecycle · W ovh_create_bucket, ovh_update_bucket, ovh_set_bucket_lifecycle, ⚠️ ovh_delete_bucket_lifecycle, ⚠️ ovh_delete_bucket

Objekte

ovh_list_objects, ovh_get_object, ovh_list_object_versions, ovh_presign_object · W ovh_copy_object, ⚠️ ovh_delete_object, ⚠️ ovh_delete_object_version, ⚠️ ovh_bulk_delete_objects

Benutzer & Schlüssel

ovh_list_project_users, ovh_get_project_user, ovh_list_s3_credentials · W ovh_create_project_user, ovh_create_s3_credentials, ovh_reveal_s3_secret, ⚠️ ovh_delete_s3_credentials, ⚠️ ovh_delete_project_user

Richtlinien

ovh_get_storage_policy, ovh_preview_policy · W ⚠️ ovh_set_storage_policy, ⚠️ ovh_grant_bucket_access, ⚠️ ovh_provision_s3_user

Notausgang

ovh_request – jeder /1.0-Pfad, nur GET, sofern Schreibzugriff nicht aktiviert ist

ovh_presign_object ist der einzige Weg, auf den Bytes bewegt werden: Der Server proxyt nie Objektinhalte, sondern erstellt stattdessen eine zeitlich begrenzte vorsignierte S3-URL. Bei deaktiviertem Schreibzugriff signiert er nur GET.

Richtlinienvoreinstellungen

ovh_preview_policy, ovh_set_storage_policy und ovh_provision_s3_user teilen drei Voreinstellungen, alle auf einen Schlüsselpräfix eingrenzbar:

Voreinstellung

Gewährte Berechtigungen

write-only

Erlaube s3:PutObject, s3:AbortMultipartUpload, s3:ListMultipartUploadParts auf dem Präfix – plus ein explizites Deny auf s3:GetObject / s3:GetObjectAcl bucketweit

read-only

s3:ListBucket + s3:GetBucketLocation auf dem Bucket, s3:GetObject auf den Objekten

read-write

beides, plus s3:DeleteObject

OVHs eingebaute Rollen (admin, deny, readOnly, readWrite, über ovh_grant_bucket_access) haben kein write-only-Äquivalent – deshalb existiert der Rohrichtlinien-Pfad. Das Multipart-Paar ist absichtlich enthalten: Jedes S3-SDK wechselt oberhalb von ~8-16MB automatisch zu Multipart, und ohne abort/list verwaist ein fehlgeschlagener Upload Teile, die der Schlüsselinhaber nicht aufräumen kann und weiterhin bezahlt.

OVH validiert Richtlinienaktionen gegen eine feste Enumeration und lehnt das gesamte Dokument mit einem 400 ab, wenn eine unbekannt ist – s3:GetObjectVersion und s3:DeleteObjectVersion existieren in AWS, aber nicht dort. Die Voreinstellungen verwenden nur akzeptierte Aktionen, und ein Test fixiert das.

Ausgabe eines Write-only-Upload-Schlüssels

Der motivierende Fall: Eine App bettet einen S3-Schlüssel in ein ausgeliefertes Binärprogramm ein, sodass der Schlüssel nur hochladen und sonst nichts können darf, während der Lese-/Schreibschlüssel beim Entwickler bleibt.

ovh_get_bucket           bucket=dev-rgis-ar          → note ownerId
ovh_preview_policy       bucket=dev-rgis-ar preset=write-only prefix=uploads/
ovh_provision_s3_user    bucket=dev-rgis-ar preset=write-only prefix=uploads/ \
                         description=ar-app-uploader confirm=true

Das erstellt einen neuen Projektbenutzer (niemals den Bucket-Besitzer), wendet die Richtlinie an und erstellt erst dann Zugangsdaten – ein Schlüssel, der vor seiner Richtlinie existiert, ist ein Schlüssel, der kurzzeitig hatte, was die Standardeinstellung erlaubt. Das Secret wird einmal zurückgegeben.

Verifizieren Sie gegen die echte S3-API, bevor Sie ihn übergeben – eine Richtlinie, die korrekt liest, kann immer noch durch Eigentum überschattet werden, und warten Sie ~30s nach dem Setzen, sonst testen Sie die vorherige Richtlinie:

export AWS_ACCESS_KEY_ID=... AWS_SECRET_ACCESS_KEY=...
# An array, not a string: zsh does not word-split an unquoted $var, so the
# `S3='aws ...'` form you would write in bash silently becomes "command not found".
S3=(aws --endpoint-url https://s3.uk.io.cloud.ovh.net --region uk s3api)
"${S3[@]}" put-object      --bucket dev-rgis-ar --key uploads/probe.txt --body /dev/null   # 200
"${S3[@]}" get-object      --bucket dev-rgis-ar --key uploads/probe.txt /dev/null          # 403
"${S3[@]}" list-objects-v2 --bucket dev-rgis-ar                                            # 403
"${S3[@]}" delete-object   --bucket dev-rgis-ar --key uploads/probe.txt                    # 403
"${S3[@]}" put-object      --bucket dev-rgis-ar --key elsewhere/probe.txt --body /dev/null # 403

Die get-object-Zeile ist die, die zählt: Sie ist die Prüfung, die Fallstrick 3 abfängt, und sie besteht nur wegen des Deny der Voreinstellung.

Entwickeln

pnpm dev            # tsdown --watch
pnpm test           # vitest
pnpm typecheck
pnpm lint
pnpm format

Lizenz

MIT

-
license - not tested
-
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

  • An MCP server that let you interact with Cycloid.io Internal Development Portal and Platform

  • MCP server for interacting with the Supabase platform

  • A MCP server built for developers enabling Git based project management with project and personal…

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/mgcrea/mcp-ovh-api'

If you have feedback or need assistance with the MCP directory API, please join our Discord server