Commvault MCP 服务器

一个用于与Commvault环境无缝集成的Model Context Protocol (MCP)服务器,提供作业管理、Commcell管理、客户端管理、存储管理、用户管理、计划管理等功能。

  • by Commvault
  • Python
  • 本地部署
  • 17 星标
  • 更新于
在 GitHub 查看 chandansgowda-cv/commvault-mcp-server

使用说明

Commvault MCP服务器

A. 模型上下文协议(MCP) 服务器与 Commvault 环境。此服务器使AI代理能够安全地访问和管理作业详细信息、commcell指标、客户端和存储信息、用户权限、计划配置和备份时间表。

特征

Commvault MCP服务器可与Commvault环境无缝集成,提供以下功能:

类别 功能
作业管理 •查看作业详细信息和历史记录
•控制作业(暂停、恢复、重新提交、终止)
•监控作业状态和绩效
通讯单元管理 •检索SLA状态和合规性
•查看安全态势和分数
•访问存储空间利用率指标
•获取通讯单元详细信息和实体计数
客户管理 •访问客户组和客户信息
•管理子客户和客户财产
•查看客户关联
存储管理 •查看存储策略和配置
•访问存储池信息
•监控存储资源
用户管理 •列出用户和用户组
•访问安全关联
计划管理 •查看平面配置和详细信息
•访问计划组件和设置
进度管理 •访问备份时间表
•查看日程配置
•监控进度绩效
DocuSign集成 •设置文档库和工作流程
•将信封备份到Commvault S3保管库
•列出并恢复DocuSign信封备份
Salesforce集成 •将Salesforce组织ID解析为Commvault客户端
•从最新快照浏览备份的Salesforce对象记录
•使用可选的WHERE子句查询筛选记录
•分页访问大型记录集

先决条件

在运行Commvault MCP服务器之前,请确保满足以下要求:

1.Python环境

  • Python 3.11或更高版本
  • uv 包管理器(用于依赖关系管理和运行服务器)

2.身份验证和安全配置

Commvault MCP服务器支持两种身份验证方法:

Option 1: OAuth Authentication

注: OAuth身份验证仅支持运行Commvault的环境 SP42 CU 27及以上. 在使用此选项之前,必须在CommServe中正确配置OAuth。

使用OAuth身份验证时,您需要:

  • 发现终结点URL: OAuth发现/元数据端点
  • 客户端ID: OAuth应用程序的客户端标识符
  • 客户端密码: OAuth应用程序的客户端密钥
  • 所需范围: 所需的OAuth作用域
  • 基本URL: MCP服务器的基本URL

重要提示: 重定向URI必须设置为 OAUTH_BASE_URL/auth/callback 在OAuth提供商的应用程序/客户端配置中。


Option 2: Traditional Token-Based Authentication

在设置过程中将收集以下值:

  • Commvault访问凭据: 你需要一个有效的 access_token 和 refresh_token 以通过Commvault API进行身份验证。 在此处了解如何生成这些令牌: 创建访问令牌-Commvault文档

  • 密钥: 这个秘密必须包含在 MCP客户端 在 Authorization 所有工具请求的标题。 它充当远程服务器中工具访问的安全层。你可以自己设置。

重要提示: 使用传统的基于令牌的身份验证时,安装脚本需要一个安全的、操作系统原生的密钥环后端来安全地存储敏感凭据。出于安全原因,只允许使用安全后端。

在同一主机上运行多个MCP服务器? 操作系统密钥环是针对每个用户的,因此默认情况下,每次安装都会写入相同的密钥环插槽和最新的 setup.py run会覆盖以前安装的凭据。设置唯一 MCP_INSTANCE_ID 每次安装--请参阅 在同一主机上运行多个实例 在...之下 附加配置.

按平台支持的安全后端

平台 支持的后端 描述
视窗 WinVaultKeyring, WinCredentialStore 使用Windows凭据管理器(Windows Vault)进行安全存储
macOS macOS Keyring 使用本地macOS钥匙链进行安全存储
Linux SecretService (侏儒), KWallet (KDE) 使用Freedesk Secret Service API(GNOME)或KWallet(KDE

设置

1.克隆存储库

git clone https://github.com/Commvault/commvault-mcp-server.git
cd commvault-mcp-server

2.运行安装脚本

安装脚本将指导您完成配置选项,包括:

  • 金属或内部部署 --对于Metall设置,网关URL是自动配置的
  • 传输模式(stdio、可流式传输http或sse)
  • 服务器连接详细信息(用于远程模式)
  • 身份验证方法(传统令牌或OAuth)
  • OAuth配置(如果选择)
  • 安全令牌存储
uv run setup.py
Metallic (Cloud) Setup

当系统提示时 “这是金属装置吗?”,选择 是。安装脚本将自动配置:

  • 网关URL: https://api.metallic.io

服务器URL不需要额外配置;所有其他设置步骤(传输模式、身份验证等)正常进行。


3.启动MCP服务器

uv run -m src.server
Secure Production Deployment

对于生产部署,建议使用带有TLS/HTTPS和安全标头的反向代理。MCP服务器应绑定到 127.0.0.1 (仅限本地主机)以防止直接公共访问。

快速设置

  1. 为本地主机配置MCP服务器:设置 MCP_HOST=127.0.0.1 在你的 .env 文件
  2. 安装反向代理:选择nginx或Caddy
  3. 配置TLS:使用Let's Encrypt进行自动证书管理
  4. 添加安全标头:配置 建议使用OWASP 标头(HSTS、X-Frame-Options、CSP等)
  5. 更新客户端配置:使用 https://your-domain.com/mcp 而不是 http://HOST:PORT/mcp

使用Docker运行

Docker镜像运行服务器 仅限OAuth模式.

先决条件: Docker已安装,Commvault环境正在运行 SP42 CU 27或以上 配置了OAuth。

1.生成一个 .env 文件

在主机上运行交互式安装脚本。当系统提示输入身份验证方法时,选择 认证.

uv run setup.py

这产生了一个 .env 包含所有必需变量的文件,包括OAuth端点和凭据。

2.塑造形象

docker build -t commvault-mcp-server .

3.运行容器

传递生成的 .env 运行时将文件保存到容器中:

docker run --rm -p 9090:9090 --env-file .env commvault-mcp-server

配置客户端

注: npx 使用基于令牌的身份验证时需要。您可以通过安装来获取它 Node.js 其中包括 npx 默认情况下。

While using OAuth

有关集成步骤,请参阅您的AI客户端的文档。例如,Claude要求在其连接器配置中指定服务器名称和MCP服务器URL。


Remote MCP Server (Streamable HTTP / SSE)
{
  "mcpServers": {
    "Commvault": {
      "command": "npx",
      "args": ["mcp-remote", "HOST:PORT/mcp", "--header", "Authorization: <secret stored in server keyring>"]
    }
  }
}

Remote MCP Server (Client on Windows)
{
  "mcpServers": {
    "Commvault": {
      "command": "cmd",
      "args": ["/c", "npx", "mcp-remote", "HOST:PORT/mcp", "--header", "Authorization: <secret stored in server keyring>"]
    }
  }
}

Remote MCP Server (HTTP)
{
  "mcpServers": {
    "Commvault": {
      "command": "npx",
      "args": ["mcp-remote", "HOST:PORT/mcp", "--header", "Authorization: <secret stored in server keyring>", "--allow-http"]
    }
  }
}

Local MCP Server (STDIO) - Unix
{
  "mcpServers": {
    "Commvault": {
      "command": "C:\\YOUR\\PATH\\TO\\commvault-mcp-server\\.venv\\bin\\python",
      "args": [
        "C:\\YOUR\\PATH\\TO\\commvault-mcp-server\\src\\server.py"
      ]
    }
  }
}


Local MCP Server (STDIO) - Windows
{
  "mcpServers": {
    "Commvault": {
      "command": "C:\\YOUR\\PATH\\TO\\commvault-mcp-server\\.venv\\Scripts\\python.exe",
      "args": [
        "C:\\YOUR\\PATH\\TO\\commvault-mcp-server\\src\\server.py"
      ]
    }
  }
}


附加配置

注: 这些是扩展MCP服务器功能的可选配置。

Running Multiple Instances on the Same Host

用于存储服务器机密和Commvault API令牌的OS密钥环是 每用户默认情况下,给定主机上每次安装MCP服务器都会写入服务名称下的相同密钥环条目 commvault-mcp-server。如果在同一操作系统用户下运行两个或多个MCP服务器安装,则每次重新运行 setup.py 静默地覆盖其他实例的凭据,这些凭据通常以 401 Invalid token 重新启动或重新引导未受影响的实例后。

要在同一操作系统用户下在同一主机上运行多个MCP服务器实例,请设置一个唯一的 MCP_INSTANCE_ID 每次安装。安装脚本在开始时会提示它;您还可以直接在每个安装中设置它 .env:

# Instance A's .env
MCP_INSTANCE_ID=prod

# Instance B's .env
MCP_INSTANCE_ID=dr

设置实例ID后,密钥环服务名称变为 commvault-mcp-server:<MCP_INSTANCE_ID>,隔离每个安装 server_secret, server_secret_expiry, access_token,以及 refresh_token.

规则和注意事项

  • 允许的字符:字母、数字、, ., -, _ (最多32个字符)。
  • 离开 MCP_INSTANCE_ID 未设置(或将其设置为 default)保留原始行为并重用现有行为 commvault-mcp-server 钥匙圈条目,所以 现有的单实例安装不需要做任何事情.
  • 每个安装仍应位于其自己的目录中,并有自己的 .env 因此运输方式、港口、, CC_SERVER_URL等等,不要碰撞。实例ID仅对密钥环进行命名空间设置。
  • 变更后 MCP_INSTANCE_ID 对于现有安装,请重新运行 uv run setup.py 因此,秘密和令牌都写在新的命名空间服务名称下。
  • 也有效的替代隔离策略:在专用操作系统用户下或在其自己的主机/VM/容器中运行每个实例。

Trusted Proxy Configuration

当部署在反向代理或负载均衡器后面时,请配置 TRUSTED_PROXY_IPS 使用逗号分隔的代理IP地址的环境变量启用每个客户端的速率限制 X-Forwarded-For 头球例如:

export TRUSTED_PROXY_IPS="10.0.0.1,10.0.0.2,192.168.1.100"

Salesforce Backup Integration

Salesforce集成允许浏览存储在Commvault中的备份Salesforce记录。它提供了两个工具:

工具 说明
get_salesforce_client 将Salesforce组织ID(15或18个字符)解析为相应的Commvault clientId
get_salesforce_records 获取Salesforce对象的备份记录(例如。 Account, Contact, Opportunity)从最新的备份快照

先决条件

  1. 环境变量:设置 ENABLE_SALESFORCE_TOOLS=true 在您的环境中
  2. Commvault Salesforce备份:必须在Commvault中配置和备份至少一个Salesforce组织

用法示例

浏览备份 Account Salesforce组织的记录:

Get all backed-up Account records for Salesforce org 00D2w000005mBCpEAM

该工具将自动将组织ID解析为Commvault客户端,并返回最新备份的记录。

参数 get_salesforce_records

参数 必填 说明
salesforce_org_id 是 Salesforce组织ID(15或18个字符)
object_name 是 Salesforce API对象名称(例如。 Account, Contact)
limit 否 要返回的最大记录数(默认值 50,最大值 1000)
offset 否 分页偏移量(默认值 0)
free_query 否 可选的WHERE子句过滤器(例如。 "Name = 'Acme'")

DocuSign Backup Integration

DocuSign备份集成可将已完成的DocuSsign信封备份到Commvault S3保管库。此集成提供了全面的文档管理功能,包括备份、列出和还原操作。

先决条件

  1. 环境变量:设置 ENABLE_DOCUSIGN_TOOLS=true 在您的环境中
  2. Commvault S3保险库:在Commvault中配置S3端点
  3. DocuSign API访问:有效的DocuSign集成凭据

配置文件

在中创建以下文件 config/ 目录:

1.DocuSign配置(docusign_config.json)

基于模板文件 config/docusign_config_template.json:

{
  "docusign": {
    "integrationKey": "YOUR_INTEGRATION_KEY_HERE",
    "userId": "YOUR_USER_ID_HERE", 
    "authServer": "account-d.docusign.com",
    "scopes": "signature impersonation",
    "basePath": "https://demo.docusign.net/restapi"
  },
  "fromDate": "2024-07-01T00:00:00Z"
}

2.DocuSign私钥(docusign_key.pem)

将DocuSign私钥文件放在 config/ 目录为 docusign_key.pem.


LiteLLM注释

我们不建议使用 轻量级LLM 作为MCP客户端。LiteLLM的每轮会话生命周期触发美容 ClosedResourceError 由于上游的竞争情况,服务器终端中的回溯 mcp Python SDK——这些是无害的,但有噪音。

安全考虑

多服务器信任边界(工具中毒和工具阴影)

MCP协议强制执行 服务器之间没有隔离 共享单个代理会话。与Commvault MCP在同一会话中运行的任何其他MCP服务器都有实际能力影响代理对Commvault操作的推理,即使没有直接访问CommServe或任何特权。

此架构属性有两条攻击路径:

  • 工具中毒 --恶意服务器的工具描述迫使代理从主机端存储中读取操作员存储的Commvault身份验证令牌(例如。 ~/.claude.json,项目级别 .mcp.json,或操作系统钥匙链条目 commvault-mcp-server)并将令牌值作为参数传递给攻击者控制的工具,然后该工具将其泄露。
  • 工具阴影 --恶意服务器的工具描述将Commvault工具标识符命名为(例如。 kill_job, disable_schedule, set_user_enabled)并指示代理在操作员合法调用这些工具时执行额外或修改后的Commvault操作。Commvault MCP本身就是这些呼吁的参与者;它的代码和响应没有损坏。腐败存在于代理的推理中,由第三方服务器的元数据引起。

这两条路径都不需要Commvault MCP服务器代码中的任何缺陷。两者都是当前指定的MCP架构的属性。

对操作员的建议:

  • 在包含Commvault工具的代理会话中,仅安装第一方或独立审核的MCP服务器。
  • 在可行的情况下,使用 隔离代理会话 其中Commvault MCP是唯一的集成。
  • 如果隔离不可行,请在会话期间限制代理的通用文件系统和出站网络工具功能。

凭证卫生

  • 使用带有显式刷新的短期访问令牌 而不是长期持有的代币。有界的令牌生命周期限制了泄露的凭据保持可用的窗口,并且在攻击者对其采取行动之前,轮换会使泄露的令牌无效。
  • 限制来自MCP主机的出站流量。 在您的环境支持的情况下,应用一个网络策略,将运行MCP服务器的主机的出站HTTP/HTTPS限制为一个有记录的分配列表。来自MCP主机的意外出站呼叫是此类攻击的主要渗透通道,也是最可靠的检测信号。

贡献

  • 我们将继续向此MCP服务器添加更多功能。如果您想留下反馈、提交错误或提供功能请求,请在此存储库上打开问题。
  • 欢迎拉取请求!对于重大更改,请先打开一个问题来讨论您想要更改的内容。

许可证

此项目根据Apache许可证获得许可。请参阅 许可证 文件以获取详细信息。