VISO TRUST MCP Server

官方

通过AI助手直接访问和管理您的VISO TRUST第三方风险计划。

文档

VISO TRUST MCP 服务器

一个模型上下文协议 (MCP) 服务器,用于将 VISO TRUST API 功能与 AI 助手集成。

要求

  • Java 21+
  • Gradle
  • Docker(可选,用于容器化部署)
  • MCP Inspector(可选,用于测试)

配置

VISO TRUST API 配置

可以为 VISO TRUST API 配置以下属性:

  • visotrust.api.base-url:VISO TRUST API 的基础 URL(默认值:http://localhost:8080)
  • visotrust.api.token:来自 VISO TRUST 平台的 API 令牌(必需)
  • visotrust.api.timeout:API 请求超时时间(毫秒)(默认值:30000)
  • visotrust.api.connect-timeout:API 连接超时时间(毫秒)(默认值:5000)

有关如何为 visotrust.api.token 环境变量生成 API 令牌的信息,请参阅 VISO TRUST 支持文档

应用程序配置文件

此应用程序支持 Spring Boot 配置文件,以便为不同的部署场景启用不同的配置。

远程配置文件

remote 配置文件专为使用服务器发送事件 (SSE) 的远程 MCP 支持而设计。此配置文件将应用程序配置为在分布式环境中以最佳方式工作,其中 MCP 服务器需要通过 HTTP/SSE 连接与远程客户端通信。

远程配置文件的主要区别:

  • 配置为基于 SSE 的通信,而不是标准 I/O
  • 针对远程客户端连接优化了服务器设置
  • 增强了日志记录,便于分布式调试

如何激活远程配置文件:

直接使用 Java 运行时:

java -jar viso-mcp-server-<version>.jar --spring.profiles.active=remote

使用 Gradle 运行时:

./gradlew bootRun --args="--spring.profiles.active=remote"

使用 Docker 时:

docker run -i --rm \
  -e VISOTRUST_API_TOKEN=<your-api-token> \
  -e SPRING_PROFILES_ACTIVE=remote \
  viso-mcp-server

何时使用远程配置文件:

  • 将 MCP 服务器部署到远程服务器或云环境时
  • 客户端将通过 HTTP/SSE 而不是直接 stdio 连接时
  • 需要增强日志记录和监控以进行分布式部署时
  • 与需要 SSE 通信的基于 Web 的 AI 助手集成时

对于本地开发和直接 stdio 通信,请使用默认配置文件(无需指定配置文件)。

安装

快速安装

单击下面的按钮之一,在 VS Code 中安装 VISO MCP 服务器:

Install with Docker in VS Code Install with Docker in VS Code Insiders

在 VS Code 中手动设置

将以下 JSON 块添加到 VS Code 中的用户设置 (JSON) 文件。您可以通过按 Ctrl + Shift + P 并键入 Preferences: Open User Settings (JSON) 来执行此操作。

{
  "mcp": {
    "inputs": [
      {
        "type": "promptString",
        "id": "viso_baseurl",
        "description": "VISO TRUST API Base URL",
        "default": "https://app.visotrust.com"
      },
      {
        "type": "promptString",
        "id": "viso_token",
        "description": "VISO TRUST API Token",
        "password": true
      }
    ],
    "servers": {
      "viso-mcp": {
        "command": "docker",
        "args": [
          "run",
          "-i",
          "--rm",
          "-e",
          "VISOTRUST_API_TOKEN",
          "-e",
          "VISOTRUST_API_BASEURL",
          "visotrustai/viso-mcp-server:latest"
        ],
        "env": {
          "VISOTRUST_API_BASEURL": "${input:viso_baseurl}",
          "VISOTRUST_API_TOKEN": "${input:viso_token}"
        }
      }
    }
  }
}

或者,您可以将类似的示例(即不带 mcp 键)添加到工作区中名为 .vscode/mcp.json 的文件中。这将允许您与他人共享配置。

{
  "inputs": [
    {
      "type": "promptString",
      "id": "viso_baseurl",
      "description": "VISO TRUST API Base URL",
      "default": "https://app.visotrust.com"
    },
    {
      "type": "promptString",
      "id": "viso_token",
      "description": "VISO TRUST API Token",
      "password": true
    }
  ],
  "servers": {
    "viso-mcp": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "VISOTRUST_API_TOKEN",
        "-e",
        "VISOTRUST_API_BASEURL",
        "visotrustai/viso-mcp-server:latest"
      ],
      "env": {
        "VISOTRUST_API_BASEURL": "${input:viso_baseurl}",
        "VISOTRUST_API_TOKEN": "${input:viso_token}"
      }
    }
  }
}

与 Claude Desktop 和其他 MCP 客户端一起使用

Docker 配置

{
    "mcpServers": {
        "viso-mcp": {
            "command": "docker",
            "args": [
                "run",
                "-i",
                "--rm",
                "-e", "VISOTRUST_API_TOKEN",
                "-e", "VISOTRUST_API_BASEURL",
                "visotrustai/viso-mcp-server:latest"
            ],
            "env": {
                "VISOTRUST_API_TOKEN": "<your-api-token>",
                "VISOTRUST_API_BASEURL": "https://app.visotrust.com"
            }
        }
    }
}

Java 配置

{
    "mcpServers": {
        "viso-mcp": {
            "command": "java",
            "args": [
                "-jar",
                "viso-mcp-server-<version>.jar",
                "--port",
                "8080",
                "--host",
                "localhost"
            ],
            "env": {
                "JAVA_TOOL_OPTIONS": "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005",
                "VISOTRUST_API_TOKEN": "<your-api-token>",
                "VISOTRUST_API_BASEURL": "https://app.visotrust.com"
            }
        }
    }
}

注意:JAVA_TOOL_OPTIONS 环境变量用于设置远程调试的 JVM 选项。地址和端口可以根据需要更改。

💻 开发

Docker 设置

构建 Docker 镜像

docker build -t viso-mcp-server .

运行 Docker 容器

docker run -i --rm -e VISOTRUST_API_TOKEN=<your-api-token> viso-mcp-server

调试

安装 MCP Inspector

npm -g install @modelcontextprotocol/inspector

运行 MCP Inspector 进行测试

  1. 构建 MCP 服务器 Jar 文件
./gradlew bootJar
  1. 运行 MCP Inspector
npx @modelcontextprotocol/inspector \
    -e JAVA_TOOL_OPTIONS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=\*:5005 \
    -e VISOTRUST_API_TOKEN=<your-api-token> \
    java -jar build/libs/viso-mcp-server-<version>.jar \
    --port 8080 --host localhost

<version> 替换为项目的当前版本(例如,1.0.0 或最新版本中的版本)。

CI/CD 流水线

此项目使用 GitHub Actions 进行持续集成和部署。工作流程包括以下作业:

Lint

使用 Spotless 检查代码格式:

./gradlew spotlessCheck

构建

构建应用程序并创建 JAR 文件:

./gradlew build

发布

创建新版本时:

  1. 将 build.gradle 中的项目版本更新为与发布标签匹配
  2. 将 JAR 文件上传到 GitHub 发布,版本来自发布标签
  3. 构建 Docker 镜像并将其推送到 Docker Hub,标签为:
    • latest
    • 发布标签(例如,v1.0.0
发布所需的密钥

要启用 Docker Hub 发布,请将这些密钥添加到您的 GitHub 仓库:

  • DOCKERHUB_USERNAME:您的 Docker Hub 用户名
  • DOCKERHUB_TOKEN:您的 Docker Hub 访问令牌

🛠️ 工具

本节提供 VISO MCP 服务器公开的工具的文档。每个工具都有特定的用途、输入参数和输出格式。

评估

get_assessment - 通过 ID 获取评估

  • id:评估 ID(数字,必需)

返回有关特定评估的详细信息。

get_assessment_summary - 通过 ID 获取评估摘要

  • id:评估 ID(数字,必需)

返回特定评估的摘要详细信息。

create_assessment - 为现有关系启动评估

  • relationshipId:要为其创建评估的关系 ID(数字,必需)
  • recipientEmail:评估接收者的电子邮件地址(字符串,可选)
  • recipientFirstName:评估接收者的名字(字符串,可选)
  • recipientLastName:评估接收者的姓氏(字符串,可选)
  • publicDocumentUrls:要包含在评估中的公开文档的 URL(字符串数组,可选)
  • followupType:跟进类型(字符串枚举,可选)
  • followupRiskThreshold:触发跟进的风险级别阈值(字符串枚举,可选)
  • followupTimeline:跟进操作的时间线(字符串枚举,可选)
  • collectionTimeline:供应商完成评估提交的时间线(字符串枚举,可选)
  • noVendorResponseAction:供应商未响应时采取的操作(字符串枚举,可选)
  • aiProcessingOnly:是否仅使用 AI 处理而无需人工审核(布尔值,可选)
  • requestedAuditTypes:为此评估请求的审计类型(字符串数组,可选)

返回创建的评估详细信息。

update_assessment_expiration_date - 更新供应商必须提交评估响应的截止日期

  • id:评估 ID(数字,必需)
  • expirationDate:新的到期日期/时间,ISO-8601 格式,带偏移量;必须是未来的时间(字符串,必需)

返回确认消息。

update_assessment_followup - 更新评估的跟进配置

  • id:评估 ID(数字,必需)
  • followupType:跟进类型(字符串枚举,必需)
  • followupRiskThreshold:达到或超过此风险阈值时应触发后续评估的风险级别(字符串枚举,可选)
  • followupTimeline:跟进时间线(字符串枚举,可选)

返回确认消息。

审计日志

get_user_audit_log_events - 获取组织内用户范围的审计日志事件

  • start:查询的开始日期/时间,ISO-8601 格式,带偏移量(字符串,必需)
  • end:查询的结束日期/时间,ISO-8601 格式,带偏移量(字符串,必需)
  • eventTypes:要过滤的可选事件类型集(例如 USER_LOGGED_IN);留空表示全部(字符串数组,可选)

返回用户审计日志事件列表,限制为 500 条记录。

get_audit_log_events - 获取过滤后的审计日志事件(用户、组织、评估和关系事件)

  • start:查询的开始日期/时间,ISO-8601 格式,带偏移量(字符串,必需)
  • end:查询的结束日期/时间,ISO-8601 格式,带偏移量(字符串,必需)
  • eventTypes:要过滤的可选事件类型集(例如 ASSESSMENT_COMPLETEDRELATIONSHIP_CREATED);留空表示全部(字符串数组,可选)

返回多态审计日志事件记录。每个项目至少包含 auditEventTypedateTime

业务案例

get_all_business_cases - 获取组织所有可用的业务案例

无需参数。

返回组织可用的所有业务案例列表。

数据类型

get_all_datatypes - 获取组织所有可用的数据类型

无需参数。

返回组织可用的所有数据类型列表。

供应商目录

search_vendor_directory - 通过 URL 或域名在 VISO TRUST 供应商目录中查找供应商

  • urlOrDomain:要搜索的 URL 或域名,例如 example.com(字符串,必需)

返回基本供应商元数据(名称、主页、描述、网站图标、已知域名)。

关系

get_all_relationships - 获取所有关系及其评估详细信息的列表

无需参数。

返回有关第三方供应商的信息,包括其评估状态、风险级别和联系方式。

get_relationship_by_id - 通过 ID 获取特定关系及其评估详细信息

  • id:关系 ID(数字,必需)

返回有关第三方供应商的详细信息,包括评估状态、风险级别和联系方式。

get_relationship_assessment_history - 获取关系的评估历史记录

  • id:关系 ID(数字,必需)

返回与指定关系关联的评估列表。

create_relationship - 创建与第三方供应商的新关系

  • name:关系/供应商的名称(字符串,必需)
  • homepage:供应商的主页 URL(字符串,必需)
  • businessOwnerEmail:业务负责人的电子邮件地址(字符串,必需)
  • businessOwnerFirstName:业务负责人的名字(字符串,可选)
  • businessOwnerLastName:业务负责人的姓氏(字符串,可选)
  • description:关系/供应商的描述(字符串,可选)
  • contextTypes:此关系的业务上下文类型列表(对象数组,可选)
  • dataTypes:此关系中处理的数据类型列表(对象数组,可选)
  • tags:用于分类此关系的标签列表(字符串数组,可选)
  • thirdPartyContact:第三方供应商代表的联系方式(对象,可选)

返回创建的关系详细信息。

create_relationship_by_domain - 仅使用供应商域创建新关系

  • domain:供应商的域名,例如 visotrust.com(字符串,必需)
  • vendorName:供应商的名称(字符串,必需)
  • product:供应商提供的产品(字符串,可选)
  • description:供应商关系的描述(字符串,可选)

返回创建的关系详细信息。

update_relationship - 更新与第三方供应商的现有关系

  • id:关系 ID(数字,必需)
  • name:关系/供应商的名称(字符串,必需)
  • homepage:供应商的主页 URL(字符串,可选)
  • description:关系/供应商的描述(字符串,可选)
  • contextTypes:业务上下文类型列表(对象数组,可选)
  • dataTypes:此关系中处理的数据类型列表(对象数组,可选)
  • businessOwnerEmail:业务负责人的电子邮件地址(字符串,可选)
  • businessOwnerFirstName:业务负责人的名字(字符串,可选)
  • businessOwnerLastName:业务负责人的姓氏(字符串,可选)
  • tags:标签列表(字符串数组,可选)

返回更新后的关系详细信息。

partially_update_relationship - 部分更新现有关系

接受与 update_relationship 相同的字段。仅更改请求中提供的字段;其他字段保持不变。

返回更新后的关系详细信息。

search_relationships - 按域名或供应商名称搜索关系

  • domains:要搜索的域名列表(字符串数组,必需)
  • name:要搜索的供应商/关系名称(字符串,必需)

返回匹配关系及其评估详细信息的列表。

create_tags - 创建用于分类关系的新标签

  • tags:要创建的标签名称列表(字符串数组,必需)

返回所有标签的列表,包括新创建的标签。

update_third_party_contact - 更新第三方供应商的联系方式

  • relationshipId:关系 ID(数字,必需)
  • email:联系电子邮件(字符串,必需)
  • firstName:联系人名字(字符串,必需)
  • lastName:联系人姓氏(字符串,必需)

返回更新后的关系详细信息。

onboard_relationship - 登记一个关系,可选择附带审批摘要和生命周期管理设置

  • id:关系 ID(数字,必填)
  • approvalSummary:登记时记录的可选审批摘要(字符串,可选)
  • lifecycleManagementUpdateRequest:可选的生命周期管理设置(对象,可选)
    • artifactUpdateSettings.artifactUpdateType:制品更新类型(字符串枚举)
    • recertificationSettings.recertificationType:重新认证类型(字符串枚举)
    • recertificationSettings.recertificationDate:下次重新认证的日期/时间,带偏移量的 ISO-8601 格式(字符串)
    • recertificationSettings.reviewFrequency:THREE_YEARSTWO_YEARSANNUALSEMIANNUALQUARTERLY(字符串枚举)

返回已登记的关系详情。

offboard_relationship - 解除一个关系

  • id:关系 ID(数字,必填)

返回已解除的关系详情。

archive_relationship - 归档一个关系

  • id:关系 ID(数字,必填)

返回已归档的关系详情。

Webhooks

get_all_webhooks - 获取所有 webhook

无需参数。

返回所有 webhook 配置的列表。

get_webhook - 按 ID 获取 webhook 配置

  • id:Webhook ID(数字,必填)

返回特定 webhook 配置的详情。

create_webhook_configuration - 创建 webhook 配置

  • request:Webhook 创建参数(对象,必填)
    • url:Webhook URL(字符串,必填)
    • secret:Webhook 密钥(字符串,必填)
    • eventTypes:触发 webhook 的事件类型(字符串数组,必填)
    • serviceType:webhook 的服务类型(字符串,必填)

返回已创建的 webhook 配置。

update_webhook_configuration - 更新 webhook 配置

  • request:Webhook 更新参数(对象,必填)
    • id:Webhook ID(数字,必填)
    • url:Webhook URL(字符串,可选)
    • secret:Webhook 密钥(字符串,可选)
    • eventTypes:触发 webhook 的事件类型(字符串数组,可选)
    • serviceType:webhook 的服务类型(字符串,可选)

返回已更新的 webhook 配置。

delete_webhook_configuration - 删除 webhook 配置

  • id:Webhook ID(数字,必填)

删除指定的 webhook 配置。

情报报告

create_bitsight_intelligence_report - 创建新的 BitSight 情报报告

  • request:BitSight 报告参数(对象,必填)
    • vendorDomain:供应商的主域名(字符串,必填)
    • reportDate:报告生成的日期/时间(ISO 8601 字符串,必填)
    • link:指向提供商 UI 的可选链接(字符串,可选)
    • guid:实体的 BitSight GUID(字符串,必填)
    • customId:来自 BitSight 的自定义标识符(字符串,可选)
    • name:BitSight 实体的显示名称(字符串,可选)
    • description:BitSight 实体的描述(字符串,可选)
    • primaryDomain:BitSight 实体的主域名(字符串,可选)
    • ratingRange:BitSight 评级范围(字符串,可选)
    • ratingColor:BitSight 评级颜色(字符串,可选)
    • confidence:BitSight 评级的置信度(字符串,可选)

返回已创建的情报报告。

create_security_scorecard_intelligence_report - 创建新的 SecurityScorecard 情报报告

  • request:SecurityScorecard 报告参数(对象,必填)
    • vendorDomain:供应商的主域名(字符串,必填)
    • reportDate:报告生成的日期/时间(ISO 8601 字符串,必填)
    • link:指向提供商 UI 的可选链接(字符串,可选)
    • grade:SecurityScorecard 字母等级(字符串,必填)
    • domain:与记分卡实体关联的域名(字符串,可选)
    • score:来自 SecurityScorecard 的数字分数(数字,可选)

返回已创建的情报报告。

create_recorded_future_intelligence_report - 创建新的 Recorded Future 情报报告

  • request:Recorded Future 报告参数(对象,必填)
    • vendorDomain:供应商的主域名(字符串,必填)
    • reportDate:报告生成的日期/时间(ISO 8601 字符串,必填)
    • entityType:Recorded Future 实体类型,例如 Company(字符串,必填)
    • entity:Recorded Future 实体标识符(字符串,必填)
    • riskScore:数字风险评分(数字,必填)
    • riskLevel:风险级别标签,例如 Critical/High/Medium/Low(字符串,必填)
    • link:指向提供商 UI 中报告的可选链接(字符串,可选)
    • firstSeen:实体的最早观测日期,ISO 8601 格式(字符串,可选)
    • lastSeen:实体的最近观测日期,ISO 8601 格式(字符串,可选)
    • triggeredRuleCount:已触发的 Recorded Future 规则数量(数字,可选)
    • maxRuleCount:评估的 Recorded Future 规则最大数量(数字,可选)
    • summary:来自 Recorded Future 的可选摘要文本(字符串,可选)
    • criticalityLabel:实体的 Recorded Future 关键性标签(字符串,可选)

返回已创建的情报报告。

get_intelligence_reports_by_vendor - 获取供应商的所有情报报告

  • vendorDomain:供应商的主域名(字符串,必填)

返回指定供应商的情报报告列表。

get_latest_intelligence_report - 获取供应商来自特定来源的最新情报报告

  • vendorDomain:供应商的主域名(字符串,必填)
  • source:情报提供商(字符串枚举:BITSIGHTSECURITY_SCORECARDRECORDED_FUTURE,必填)

返回指定供应商和来源的最新情报报告。

用户

get_all_users - 获取组织中的所有用户

  • page:要检索的结果页码(数字,可选;默认 0)
  • size:每页记录数(数字,可选;默认 20)
  • sort:排序条件,格式为:property(,asc|desc)(字符串,可选)

返回分页的用户列表。

get_user_by_email - 通过电子邮件获取用户

  • email:用户的电子邮件地址(字符串,必填)

返回用户详情。

create_user - 创建新用户

  • request:用户创建参数(对象,必填)
    • email:新用户的电子邮件地址(字符串,必填)
    • firstName:新用户的名(字符串,必填)
    • lastName:新用户的姓(字符串,必填)

返回已创建的用户。

代码格式化

本项目使用 Spotless 搭配 Google Java Format 进行代码格式化。系统会自动设置预提交钩子,以确保代码风格一致。

设置

克隆仓库后,当你运行任何 Gradle 命令时,预提交钩子将自动设置。

手动格式化

要手动格式化所有文件:

./gradlew spotlessApply

要检查文件是否已正确格式化:

./gradlew spotlessCheck

如果预提交钩子因格式问题拒绝了你的提交,只需运行 ./gradlew spotlessApply 来修复格式,然后再次尝试提交。

许可证

本项目基于 MIT 许可证授权 - 详情请参阅 LICENSE 文件。