VISO TRUST MCP Server

公式

AIアシスタントを通じて、VISO TRUSTのサードパーティリスクプログラムに直接アクセスし、管理できます。

ドキュメント

VISO TRUST MCP サーバー

AI アシスタントに VISO TRUST API の機能を統合するための Model Context Protocol (MCP) サーバーです。

要件

  • 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 プロファイルは、Server-Sent Events (SSE) を使用したリモート MCP サポート向けに特別に設計されています。このプロファイルは、MCP サーバーが HTTP/SSE 接続を介してリモートクライアントと通信する必要がある分散環境で最適に動作するようにアプリケーションを設定します。

リモートプロファイルの主な違い:

  • 標準 I/O の代わりに SSE ベースの通信用に設定
  • リモートクライアント接続向けに最適化されたサーバー設定
  • 分散デバッグのための強化されたロギング

リモートプロファイルの有効化方法:

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 サーバーをリモートサーバーまたはクラウド環境にデプロイする場合
  • クライアントが直接の stdio ではなく HTTP/SSE 経由で接続する場合
  • 分散デプロイメント向けに強化されたロギングと監視が必要な場合
  • SSE 通信を必要とする Web ベースの AI アシスタントと統合する場合

ローカル開発および直接の stdio 通信の場合は、デフォルトプロファイルを使用してください (プロファイルの指定は不要です)。

インストール

クイックインストール

以下のボタンのいずれかをクリックして、VS Code に VISO MCP サーバーをインストールします。

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

VS Code での手動セットアップ

VS Code のユーザー設定 (JSON) ファイルに次の 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}"
        }
      }
    }
  }
}

オプションで、ワークスペース内の .vscode/mcp.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}"
      }
    }
  }
}

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

Build

アプリケーションをビルドし、JAR ファイルを作成します。

./gradlew build

Publish

新しいリリースが作成された場合:

  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: フォローアップのタイプ (文字列 enum、オプション)
  • followupRiskThreshold: フォローアップをトリガーするリスクレベルのしきい値 (文字列 enum、オプション)
  • followupTimeline: フォローアップアクションのタイムライン (文字列 enum、オプション)
  • collectionTimeline: ベンダーがアセスメント提出を完了するまでのタイムライン (文字列 enum、オプション)
  • noVendorResponseAction: ベンダーが応答しない場合のアクション (文字列 enum、オプション)
  • aiProcessingOnly: 人間のレビューなしで AI のみで処理するかどうか (ブール値、オプション)
  • requestedAuditTypes: このアセスメントで要求される監査のタイプ (文字列配列、オプション)

作成されたアセスメントの詳細を返します。

update_assessment_expiration_date - ベンダーがアセスメント回答を提出する期限の更新

  • id: アセスメント ID (数値、必須)
  • expirationDate: 新しい有効期限日時、オフセット付き ISO-8601。将来の日付である必要があります (文字列、必須)

確認メッセージを返します。

update_assessment_followup - アセスメントのフォローアップ設定の更新

  • id: アセスメント ID (数値、必須)
  • followupType: フォローアップタイプ (文字列 enum、必須)
  • followupRiskThreshold: フォローアップアセスメントをトリガーするリスクしきい値 (文字列 enum、オプション)
  • followupTimeline: フォローアップタイムライン (文字列 enum、オプション)

確認メッセージを返します。

監査ログ

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)。すべて取得する場合は空のままにします (文字列配列、オプション)

ポリモーフィックな監査ログイベントレコードを返します。各アイテムには少なくとも 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: アーティファクト更新タイプ (文字列 enum)
    • recertificationSettings.recertificationType: 再認証タイプ (文字列 enum)
    • recertificationSettings.recertificationDate: 次回の再認証日時、オフセット付き ISO-8601 (文字列)
    • recertificationSettings.reviewFrequency: THREE_YEARS, TWO_YEARS, ANNUAL, SEMIANNUAL, または QUARTERLY (文字列 enum)

オンボーディングされたリレーションシップの詳細を返します。

offboard_relationship - リレーションシップのオフボーディング

  • id: リレーションシップ ID (数値、必須)

オフボーディングされたリレーションシップの詳細を返します。

archive_relationship - リレーションシップのアーカイブ

  • id: リレーションシップ ID (数値、必須)

アーカイブされたリレーションシップの詳細を返します。

Webhook

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: インテリジェンスプロバイダ (文字列 enum: 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: 新しいユーザーの姓 (文字列、必須)

作成されたユーザーを返します。

コードフォーマット

このプロジェクトは、コードフォーマットに Google Java Format を使用した Spotless を使用しています。一貫したコードスタイルを確保するために、pre-commit フックが自動的に設定されます。

セットアップ

リポジトリのクローン後、Gradle コマンドを実行すると pre-commit フックが自動的に設定されます。

手動フォーマット

すべてのファイルを手動でフォーマットするには:

./gradlew spotlessApply

ファイルが正しくフォーマットされているか確認するには:

./gradlew spotlessCheck

フォーマットの問題で pre-commit フックがコミットを拒否した場合は、./gradlew spotlessApply を実行してフォーマットを修正し、再度コミットを試みてください。

ライセンス

このプロジェクトは MIT ライセンスの下でライセンスされています。詳細は LICENSE ファイルを参照してください。