MCP OVHcloud虚拟主机
MCP(模型上下文协议)服务器,用于通过OVH API驱动OVHcloud Web托管服务。
功能
- 8个工具只读 查看您的Web托管服务
- 6工具写 (默认禁用)管理您的服务
- 2种运输方式 :stdio(光标、克劳德桌面)或HTTP(SHAI)
- 3种身份验证模式 :承载传递,OAuth2服务帐户,AK/AS/CK
- 错误管理 映射到标准MCP代码
- 速率限制 客户端(Token Bucket)
- 自动重试 与指数Backoff
- 结构化日志 (皮诺)隐藏秘密
- 审核日志记录 工具调用
先决条件
- Node.js>=18.0.0
- 具有至少一个web托管服务的OVHcloud帐户
- 凭证API OVH(取决于所选的身份验证模式)
安装
# Cloner le repo
git clone
cd mcp-ovh-webhosting
# Installer les dépendances
npm install
# Copier la configuration exemple
cp env.example .env
# Compiler le TypeScript
npm run build运输方式
STDIO模式(默认)
适用于本地MCP客户端,如Cursor或Claude Desktop。
# Démarrer en mode stdio
npm start
# ou
npm run devHTTP模式(pour SHAI)
对于HTTP客户端,如SHAI。暴露端点 /mcp 与SSE。
# Démarrer en mode HTTP
npm run start:http
# ou
MCP_TRANSPORT=http npm start
# ou
MCP_TRANSPORT=http MCP_HTTP_PORT=8080 npm run dev服务器显示:
MCP Server is running on http://0.0.0.0:8080/mcpShai配置
1.在SDEV上启动MCP服务器
cd mcp-ovh-webhosting
MCP_TRANSPORT=http MCP_HTTP_PORT= npm run start:http替换 `` 通过SDEV授权范围内的端口:
cat /etc/ovh.conf.d/sdev.conf | grep "SDEV_PORT_"2.配置代理SHAI
创建文件 ~/.config/shai/agents/ovh_webhosting.config :
{
"name": "ovh_webhosting",
"description": "Agent pour piloter OVHcloud Web Hosting",
"llm_provider": {
"provider": "ovhcloud",
"env_vars": {
"OVH_API_KEY": "votre_AI_endpoints_token"
},
"model": "Qwen3-Coder-30B-A3B-Instruct",
"tool_method": "FunctionCall"
},
"tools": {
"builtin": ["*"],
"builtin_excluded": [],
"mcp": {
"ovh": {
"config": {
"type": "http",
"url": "http://gw2sdev-docker.ovh.net:/mcp",
"bearer_token": "votre_token_api_ovh"
},
"enabled_tools": ["*"],
"excluded_tools": []
}
}
},
"system_prompt": "{{CODER_BASE}}",
"max_tokens": 1000000,
"temperature": 0.0
}3.沙兰瑟
shai agent ovh_webhosting您将看到可用的MCP工具:
░ MCP 'ovh' connected (authenticated)
░ mcp(ovh): ovh.webhosting.listServices, ovh.webhosting.getService, ...OVH认证模式
承载模式(通过)-推荐用于Shai
令牌通过MCP客户端(SHAI)传递,并按原样传输到OVH API。
# Configuration minimale pour mode HTTP + Bearer
MCP_TRANSPORT=http
OVH_AUTH_MODE=bearer # Défaut en mode HTTP
OVH_API_REGION=eu乐 bearer_token 在SHAI中配置,自动用于验证对OVH API的调用。
模式OAuth2服务帐户
用于无SHAI的内部自动化。
OVH_AUTH_MODE=oauth2
OVH_API_REGION=eu
OVH_OAUTH_CLIENT_ID=votre-client-id
OVH_OAUTH_CLIENT_SECRET=votre-client-secret
OVH_OAUTH_SCOPE=all创建服务帐户
- 登录 控制台OVHcloud
- 我的账户 → 账户管理 → 服务账户
- 创建服务帐户
- 注意
Client ID和Client Secret
创建IAM策略
{
"name": "webhosting-full-access",
"description": "Accès complet aux services Web Hosting",
"permissions": {
"allow": [
{ "action": "webHosting:apiovh:get" },
{ "action": "webHosting:apiovh:create" },
{ "action": "webHosting:apiovh:update" },
{ "action": "webHosting:apiovh:delete" }
]
},
"resources": [
{ "urn": "urn:v1:eu:resource:webHosting:*" }
]
}AK/AS/CK模式
用于授权或与现有应用程序一起使用。
OVH_AUTH_MODE=akasck
OVH_API_REGION=eu
OVH_APP_KEY=votre-application-key
OVH_APP_SECRET=votre-application-secret
OVH_CONSUMER_KEY=votre-consumer-keyCursor/Claude桌面中的配置
对于本地MCP客户端,使用stdio模式:
光标(~/.cursor/mcp.json)
{
"mcpServers": {
"ovh-webhosting": {
"command": "node",
"args": ["/chemin/vers/mcp-ovh-webhosting/dist/server.js"],
"env": {
"OVH_AUTH_MODE": "oauth2",
"OVH_API_REGION": "eu",
"OVH_OAUTH_CLIENT_ID": "votre-client-id",
"OVH_OAUTH_CLIENT_SECRET": "votre-client-secret"
}
}
}
}克劳德桌面(~/Library/Application Support/Claude/claude_desktop_config.json)
{
"mcpServers": {
"ovh-webhosting": {
"command": "node",
"args": ["/chemin/vers/mcp-ovh-webhosting/dist/server.js"],
"env": {
"OVH_AUTH_MODE": "oauth2",
"OVH_API_REGION": "eu",
"OVH_OAUTH_CLIENT_ID": "votre-client-id",
"OVH_OAUTH_CLIENT_SECRET": "votre-client-secret"
}
}
}
}可用工具
只读(MVP)
| 工具 | 描述 | 端点OVH |
|---|---|---|
ovh.webhosting.listServices | 列出所有网络托管服务 | GET /hosting/web/ |
ovh.webhosting.getService | 服务的详细信息 | GET /hosting/web/{serviceName} |
ovh.webhosting.getActiveConfiguration | 配置已激活 | GET /hosting/web/{serviceName}/configuration |
ovh.webhosting.listDatabases | 数据库列表 | GET /hosting/web/{serviceName}/database |
ovh.webhosting.listFtpUsers FTP/SSH用户列表 | GET /hosting/web/{serviceName}/user | |
ovh.webhosting.listModuleCatalog | 模块目录 | GET /hosting/web/moduleList |
ovh.webhosting.getModuleCatalogItem | 模块的详细信息 | GET /hosting/web/moduleList/{id} |
ovh.webhosting.listDatabaseDumps | 列出BDD的转储 | GET /hosting/web/{serviceName}/database/{name}/dump |
写入(必要时启用_Write_TOOLS=true)
| 工具 | 描述 | 端点OVH |
|---|---|---|
ovh.webhosting.attachDomain | 附上域名 | POST /hosting/web/{serviceName}/attachedDomain |
ovh.webhosting.installSsl 安装SSL证书 | POST /hosting/web/{serviceName}/ssl | |
ovh.webhosting.createDatabase | 创建数据库 | POST /hosting/web/{serviceName}/database |
ovh.webhosting.createDatabaseDump | 创建BDD转储 | POST /hosting/web/{serviceName}/database/{name}/dump |
ovh.webhosting.restoreDatabaseDump | \[破坏性\] 重新启动卸载 | POST /hosting/web/{serviceName}/database/{name}/dump/{id}/restore |
ovh.webhosting.installModule | 安装模块(WordPress等) | POST /hosting/web/{serviceName}/module |
环境变量
运输MCP
| 变量 | 描述 | 缺陷 |
|---|---|---|
MCP_TRANSPORT | 运输方式: stdio 或 http | stdio |
MCP_HTTP_PORT | 端口HTTP(模式HTTP) | 8080 |
MCP_HTTP_PATH | MCP终点化学 | /mcp |
MCP_HTTP_HOST | 主机HTTP | 0.0.0.0 |
OVH认证
| 变量 | 描述 | 缺陷 |
|---|---|---|
OVH_AUTH_MODE | 身份验证模式: bearer, oauth2, akasck | bearer (http)/ oauth2 (stdio) |
OVH_API_REGION API区域: eu 或 ca | eu | |
OVH_OAUTH_CLIENT_ID | 客户端ID OAuth2(模式OAuth2) | - |
OVH_OAUTH_CLIENT_SECRET | 客户端密码OAuth2(模式OAuth2) | - |
OVH_OAUTH_SCOPE | 范围OAuth2 | all |
OVH_APP_KEY | 应用程序密钥(模式akasck) | - |
OVH_APP_SECRET | 应用程序密钥(模式akasck) | - |
OVH_CONSUMER_KEY | 消费者密钥(akasck模式) | - |
配置HTTP OVH
| 变量 | 描述 | 缺陷 |
|---|---|---|
OVH_HTTP_TIMEOUT_MS | HTTP超时(毫秒) | 30000 |
OVH_MAX_RETRIES | 最大重试次数 | 3 |
特性
| 变量 | 描述 | 缺陷 |
|---|---|---|
ENABLE_WRITE_TOOLS | 启用书写工具 | false |
LOG_LEVEL | 日志级别 | info |
端点HTTP
在HTTP模式下,服务器公开:
| 端点 | 方法 | 描述 |
|---|---|---|
/mcp | GET | SSE端点用于MCP连接 |
/mcp | POST | 消息MCP |
/health | GET | 健康检查 |
/info | 获取 | 有关服务器和工具的信息 |
发展
# Lancer les tests
npm test
# Tests en mode watch
npm run test:watch
# Linting
npm run lint
# Formatage
npm run format
# Build
npm run build要验证的点
某些端点或设置需要在OVH控制台中进行验证:
- 端点创建FTP/SSH用户 :文档提到了一个不一致的端点。
- 参数
domain在attachDomain:标记为可选,但可能是必需的。 - IAM采取的行动 :写入的IAM操作的完整列表有待确定。
- OVH费率限制 :未记录,根据经验确定。
许可证
麻省理工学院
