mcpField
O
ovh-api-mcp

ovh-api-mcp

本地服务
github.com/davidlandais云与基础设施333 周前更新

关于 ovh-api-mcp

ovh-api-mcp 是供需要探索和调用 OVH API v1、v2 端点的 LLM 客户端使用的 MCP 服务。它提供基于 JavaScript 的搜索和执行工具,在受限的 QuickJS 沙箱中运行代码,并按 OpenAPI 规范验证请求。

主要功能

  1. 01搜索 OVH OpenAPI 端点和架构
  2. 02调用 OVH API v1 和 v2
  3. 03在受限 QuickJS 沙箱中运行 JavaScript
  4. 04按 OpenAPI 规范验证调用
  5. 05支持 HTTP 和 stdio 传输

适用场景

  1. 01查找 OVH 端点并查看参数
  2. 02通过 API 请求管理 OVH 资源
  3. 03将 MCP 客户端连接到 OVH API

MCP 相关

该 MCP 服务向 MCP 客户端提供 `search` 和 `execute` 工具,并支持 Streamable HTTP 与 stdio 传输。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"davidlandais-ovh-api": {
"command": "docker",
"args": [
"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.0"
],
"env": {
"OVH_APPLICATION_KEY": "<OVH_APPLICATION_KEY>",
"OVH_APPLICATION_SECRET": "<OVH_APPLICATION_SECRET>",
"OVH_CONSUMER_KEY": "<OVH_CONSUMER_KEY>",
"OVH_ENDPOINT": "<OVH_ENDPOINT>",
"OVH_SERVICES": "<OVH_SERVICES>",
"OVH_CLIENT_ID": "<OVH_CLIENT_ID>",
"OVH_CLIENT_SECRET": "<OVH_CLIENT_SECRET>"
}
}
}
}
启动命令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.0
需要配置的环境变量
OVH_APPLICATION_KEY密钥OVH API application key
OVH_APPLICATION_SECRET密钥OVH API application secret
OVH_CONSUMER_KEY密钥OVH API consumer key
OVH_ENDPOINTOVH API region: eu, ca, or us
OVH_SERVICESComma-separated OVH API services, or * for all
OVH_CLIENT_IDOVH OAuth2 client ID (service account, alternative to API keys)
OVH_CLIENT_SECRET密钥OVH OAuth2 client secret (service account)

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
ocighcr.io/davidlandais/ovh-api-mcp:0.3.0

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

ovh-api-mcp

CI License: MIT Rust MCP Status

原生 Model Context Protocol(MCP) 服务,让大模型能够全面访问 OVH API(v1 和 v2)。使用 Rust 构建,占用资源极少(Docker 镜像约 19 MB,RAM 约 1.2 MiB)。

早期版本 — 专为本地开发使用而设计。已实施安全加固(沙盒执行、规范验证、密钥保护),但该服务尚未经过大规模实战检验。请勿将其暴露在公共互联网上。欢迎提供反馈和报告错误。

ovh-api-mcp MCP server

工作原理

该服务提供两个 MCP 工具:

工具描述
search使用 JavaScript 探索 OVH OpenAPI 规范 — 查找端点、检查架构、读取参数
execute使用 JavaScript 调用任意 OVH API 端点 — 自动处理身份验证

大模型编写的 JavaScript 会在沙盒化的 QuickJS 引擎中运行,并受到资源限制(内存、CPU 超时、堆栈大小)。每次 API 调用都会在执行前根据已加载的 OpenAPI 规范进行验证。

该服务支持两种传输模式:

  • 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"
      }
    }
  }
}

必须提供 Authorization 标头才能绕过 Claude Code 的 OAuth 发现机制。请参阅 claude-code#2831。

OVH 凭据

你需要三个值:应用密钥、应用密钥密码和使用者密钥。

前往你所在区域的令牌创建页面,使用 OVH 账号登录,设置权限和有效期,即可一次性获取全部三个密钥:

区域URL
欧洲https://auth.eu.ovhcloud.com/api/createToken
加拿大https://auth.ca.ovhcloud.com/api/createToken
美国https://auth.us.ovhcloud.com/api/createToken

如需完整的 API 访问权限,请为路径 /* 设置全部四种方法(GET、POST、PUT、DELETE)。

OAuth2 身份验证(服务账号)

除 API 密钥外,你还可以使用 OVH 服务账号和 OAuth2 客户端凭据:

变量描述
OVH_CLIENT_ID服务账号 ID
OVH_CLIENT_SECRET服务账号密钥

服务账号通过 OVH API 创建(POST /me/api/oauth2/client,并设置 flow: CLIENT_CREDENTIALS)。随后必须创建 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]

使用示例

连接后,大模型可以像这样使用工具:

搜索 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

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。