ovh-api-mcp について
ovh-api-mcpは、OVH API v1・v2の探索や呼び出しを行うLLMクライアント向けのMCPサーバーです。JavaScriptによる検索・実行ツールを提供し、制限付きQuickJSサンドボックスでコードを実行してOpenAPI仕様に照らしてリクエストを検証します。
主な機能
- 01OVH OpenAPIのエンドポイントとスキーマを検索
- 02OVH API v1・v2を呼び出し
- 03制限付きQuickJSサンドボックスでJavaScriptを実行
- 04OpenAPI仕様に基づく呼び出し検証
- 05HTTPとstdioのトランスポートに対応
活用シーン
- 01OVHのエンドポイントとパラメーターを調査
- 02APIリクエストでOVHリソースを管理
- 03MCPクライアントをOVH APIに接続
MCP 対応
MCPサーバーとして、MCPクライアントに`search`と`execute`ツールを公開します。Streamable HTTPとstdioのトランスポートに対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
docker run -i --rm -e OVH_APPLICATION_KEY -e OVH_APPLICATION_SECRET -e OVH_CONSUMER_KEY -e OVH_ENDPOINT -e OVH_SERVICES -e OVH_CLIENT_ID -e OVH_CLIENT_SECRET ghcr.io/davidlandais/ovh-api-mcp:0.3.0OVH_APPLICATION_KEYシークレットOVH API application keyOVH_APPLICATION_SECRETシークレットOVH API application secretOVH_CONSUMER_KEYシークレットOVH API consumer keyOVH_ENDPOINTOVH API region: eu, ca, or usOVH_SERVICESComma-separated OVH API services, or * for allOVH_CLIENT_IDOVH OAuth2 client ID (service account, alternative to API keys)OVH_CLIENT_SECRETシークレットOVH OAuth2 client secret (service account)ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ghcr.io/davidlandais/ovh-api-mcp:0.3.0stdioツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
ovh-api-mcp
LLM に **OVH API(v1 および v2)**への完全なアクセスを提供する、ネイティブの Model Context Protocol(MCP) サーバーです。フットプリントを最小限に抑えるため Rust で構築されています(Docker イメージ約 19 MB、RAM 約 1.2 MiB)。
アーリーリリース — ローカル開発での使用を想定しています。セキュリティ強化(サンドボックス実行、仕様の検証、シークレットの保護)は実施されていますが、このサーバーは大規模環境での実運用テストを経ていません。パブリックインターネットに公開しないでください。フィードバックやバグ報告を歓迎します。
仕組み
サーバーは 2 つの MCP ツールを公開します。
| ツール | 説明 |
|---|---|
search | JavaScript を使って OVH OpenAPI 仕様を調べます — エンドポイントの検索、スキーマの確認、パラメーターの読み取り |
execute | JavaScript を使って任意の OVH API エンドポイントを呼び出します — 認証は透過的に処理されます |
LLM は、リソース制限(メモリ、CPU タイムアウト、スタックサイズ)が設定されたサンドボックス化 QuickJS エンジン内で実行される JavaScript を記述します。すべての API 呼び出しは、実行前に読み込まれた OpenAPI 仕様に照らして検証されます。
サーバーは 2 つのトランスポートモードに対応しています。
- HTTP(Streamable HTTP)— Web ベースのクライアントや Docker デプロイ向け
- stdio — Claude Desktop、Cursor、MCP インスペクターとの直接統合向け
OVH の認証情報は起動時に必須ではありません。API キーがなくてもサーバーは起動し、ツールを公開します。認証情報なしで呼び出すと、ツールは明確なエラーを返します。
クイックスタート
stdio を使用する場合(Claude Desktop / Cursor)
MCP クライアントの設定に追加します。
{
"mcpServers": {
"ovh-api": {
"command": "ovh-api-mcp",
"args": ["--transport", "stdio"],
"env": {
"OVH_APPLICATION_KEY": "your_app_key",
"OVH_APPLICATION_SECRET": "your_app_secret",
"OVH_CONSUMER_KEY": "your_consumer_key"
}
}
}
}
Docker を使用する場合
docker run -d --name ovh-api \
-e OVH_APPLICATION_KEY=your_app_key \
-e OVH_APPLICATION_SECRET=your_app_secret \
-e OVH_CONSUMER_KEY=your_consumer_key \
-p 3104:3104 \
ghcr.io/davidlandais/ovh-api-mcp:latest
ソースから
cargo install --git https://github.com/davidlandais/ovh-api-mcp
export OVH_APPLICATION_KEY=your_app_key
export OVH_APPLICATION_SECRET=your_app_secret
export OVH_CONSUMER_KEY=your_consumer_key
ovh-api-mcp --port 3104
ビルド済みバイナリ
GitHub Releases からダウンロードできます — macOS(x86_64、aarch64)および Linux(x86_64 musl)向けに提供しています。
Claude Code の設定(HTTP モード)
{
"mcpServers": {
"ovh-api": {
"type": "http",
"url": "http://localhost:3104/mcp",
"headers": {
"Authorization": "Bearer local"
}
}
}
}
Claude Code の OAuth 検出を回避するには、
Authorizationヘッダーが必要です。詳細はclaude-code#2831をご覧ください。
OVH 認証情報
必要な値は 3 つです。アプリケーションキー、アプリケーションシークレット、コンシューマーキーです。
ご利用のリージョンのトークン作成ページにアクセスし、OVH アカウントでログインして、権限と有効期間を設定すると、3 つのキーを一度に取得できます。
| リージョン | URL |
|---|---|
| Europe | https://auth.eu.ovhcloud.com/api/createToken |
| Canada | https://auth.ca.ovhcloud.com/api/createToken |
| US | https://auth.us.ovhcloud.com/api/createToken |
API への完全なアクセスを許可するには、パスを /* にして、4 つすべてのメソッド(GET、POST、PUT、DELETE)を設定します。
OAuth2 認証(サービスアカウント)
API キーの代わりに、OAuth2 クライアント認証情報を使って OVH サービスアカウントを利用できます。
| 変数 | 説明 |
|---|---|
OVH_CLIENT_ID | サービスアカウント ID |
OVH_CLIENT_SECRET | サービスアカウントのシークレット |
サービスアカウントは OVH API(flow: CLIENT_CREDENTIALS を指定した POST /me/api/oauth2/client)を使って作成します。その後、IAM ポリシー(POST /v2/iam/policy)を作成して、サービスアカウントに API 権限を付与する必要があります。詳細は OVHcloud のドキュメントをご覧ください。
サーバーは環境変数から認証モードを自動検出します。API キーと OAuth2 認証情報を同時に設定しないでください。
CLI オプション
Options:
--transport <TRANSPORT> Transport mode: http, stdio [env: OVH_TRANSPORT] [default: http]
--port <PORT> Port to listen on [env: PORT] [default: 3104]
--host <HOST> Host to bind to [default: 127.0.0.1]
--endpoint <ENDPOINT> OVH API endpoint: eu, ca, us [env: OVH_ENDPOINT] [default: eu]
--app-key <APP_KEY> OVH application key [env: OVH_APPLICATION_KEY]
--app-secret <APP_SECRET> OVH application secret [env: OVH_APPLICATION_SECRET]
--consumer-key <CONSUMER_KEY> OVH consumer key [env: OVH_CONSUMER_KEY]
--client-id <CLIENT_ID> OVH OAuth2 client ID [env: OVH_CLIENT_ID]
--client-secret <CLIENT_SECRET> OVH OAuth2 client secret [env: OVH_CLIENT_SECRET]
--services <SERVICES> Services to load, comma-separated or "*" [env: OVH_SERVICES] [default: *]
--cache-dir <PATH> Directory to cache the merged spec [env: OVH_CACHE_DIR]
--cache-ttl <SECONDS> Cache TTL in seconds, 0 to disable [env: OVH_CACHE_TTL] [default: 86400]
--no-cache Disable spec caching entirely
--max-code-size <BYTES> Maximum code input size [env: OVH_MAX_CODE_SIZE] [default: 1048576]
使用例
接続すると、LLM は次のようにツールを使用できます。
DNS エンドポイントを検索する:
// search tool
(spec) => {
const results = [];
for (const [path, methods] of Object.entries(spec.paths)) {
if (path.includes("/domain/zone")) {
for (const [method, op] of Object.entries(methods)) {
results.push({ method: method.toUpperCase(), path, summary: op.summary });
}
}
}
return results;
}
ドメインゾーンを一覧表示する:
// execute tool
async () => await ovh.request({ method: "GET", path: "/v1/domain/zone" })
ドメインの DNS レコードを取得する:
// execute tool
async () => {
const records = await ovh.request({
method: "GET",
path: "/v1/domain/zone/example.com/record"
});
const details = [];
for (const id of records.slice(0, 10)) {
details.push(await ovh.request({
method: "GET",
path: `/v1/domain/zone/example.com/record/${id}`
}));
}
return details;
}
セキュリティ
- サンドボックス化された実行 — JavaScript は QuickJS で実行されます。メモリ上限は 64 MiB、スタック上限は 1 MiB、実行タイムアウトは検索時が 10s、実行時が 30s です
- 仕様で検証された API 呼び出し — すべての
ovh.request()呼び出しは、読み込まれた OpenAPI 仕様と照合されます。不明なエンドポイントや誤った HTTP メソッドは拒否されます - パスインジェクションの防止 —
?、#、..を含む API パスは拒否されます - シークレットの保護 —
app_secretとconsumer_keyはsecrecyを使用して保存され、破棄時にゼロ化されます - HTTP リダイレクトなし — サードパーティドメインへの認証情報の漏えいを防ぎます
- 非 root コンテナー — Docker イメージは非特権ユーザーで実行されます
アーキテクチャ
src/
main.rs CLI, logging, transport selection (HTTP/stdio), graceful shutdown
tools.rs MCP tool definitions (search, execute) via rmcp macros
sandbox.rs QuickJS sandboxed JS execution with resource limits
auth.rs OVH API client with signature, clock sync, request handling
spec.rs OpenAPI spec fetching, caching, merging, and path validation
types.rs Input types for MCP tool parameters
ライセンス
MIT — David Landais
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。