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 服务器:
在 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 进行测试
- 构建 MCP 服务器 Jar 文件
./gradlew bootJar
- 运行 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
发布
创建新版本时:
- 将 build.gradle 中的项目版本更新为与发布标签匹配
- 将 JAR 文件上传到 GitHub 发布,版本来自发布标签
- 构建 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_COMPLETED、RELATIONSHIP_CREATED);留空表示全部(字符串数组,可选)
返回多态审计日志事件记录。每个项目至少包含 auditEventType 和 dateTime。
业务案例
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_YEARS、TWO_YEARS、ANNUAL、SEMIANNUAL或QUARTERLY(字符串枚举)
返回已登记的关系详情。
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:情报提供商(字符串枚举:
BITSIGHT、SECURITY_SCORECARD或RECORDED_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 文件。