Skip to main content
Glama
tedorigawa001

OSV-Scanner-MCP

OSV-Scanner-MCP

CI npm version license node

Google製 OSV-Scanner をラップするMCPサーバーです。Claude等のMCPクライアントから「このJavaプロジェクトの脆弱性をチェックして」と自然言語で依頼するだけで、依存ライブラリの既知の脆弱性(CVE / GHSA)を深刻度順のレポートで取得できます。

ステータス: npmで公開中(npx -y osv-scanner-mcp)。Maven(pom.xml)と Gradle(gradle.lockfile / lockfile方式)に対応しています。MCPクライアントは Claude Code / Claude Desktop / Codex CLI / Antigravity / VS Code(GitHub Copilot)での利用手順を用意しています。

特徴

  • ワンショットスキャン: scan_java_project ツールにプロジェクトパスを渡すだけで、検出→スキャン→整形済みレポートまで一気に返します

  • JAR/WAR実体スキャン: scan_java_artifact ツールで、lockfileが無い・shaded/fat JARしか手元にないプロジェクトでもアーカイブ内メタデータから既知の脆弱性を検出します(ベストエフォート同定であることを明示するcoverage情報付き)

  • SBOM入力スキャン: scan_sbom ツールでCycloneDX/SPDXのJSON SBOMに記録された依存を検査します。SBOMの網羅性や実成果物との一致は未検証であることを明示します

  • 深刻度順のレポート: パッケージごとに脆弱性をCVSSスコア順に整理し、5段階の深刻度ラベル(critical / high / medium / low / unknown)とサマリ集計付きで返します

  • 修正版の提示: 各脆弱性の fixed_versions をMavenバージョン優先順位規則で正しくソートして含めます(2.17.1-RELEASE のようなsemver非対応の表記にも対応)

  • セキュリティ第一の設計: シェル非経由の実行・引数ホワイトリスト・パス正規化と境界チェック・タイムアウト/出力サイズ上限を実装段階から組み込んでいます

Related MCP server: maven-mcp

動作要件

  • Node.js >= 20.19

  • OSV-Scanner バイナリ — 手動インストールは不要です。見つからない場合、公式GitHub Releasesからピン留めバージョンを自動ダウンロードし、パッケージに埋め込まれたSHA256チェックサムで検証してから使用します(~/.cache/osv-scanner-mcp/ にキャッシュ)

    • 手動インストール済みのバイナリ(PATH上または OSV_SCANNER_PATH 指定)があればそちらを優先します

    • 自動ダウンロードを無効化する場合は OSV_MCP_AUTO_DOWNLOAD=0

    • PATH上のバイナリを使わず常に検証済み自動ダウンロードを使う場合は OSV_MCP_PREFER_DOWNLOAD=1(運用環境向け)

  • スキャン時(OSV-Scanner経由)および explain_vulnerability 実行時に api.osv.dev へのネットワークアクセスが発生します(照会先はOSVデータベースのみ)

セットアップ

Claude Code への登録

claude mcp add osv-scanner -- npx -y osv-scanner-mcp

Claude Desktop への登録

claude_desktop_config.json に追加:

{
  "mcpServers": {
    "osv-scanner": {
      "command": "npx",
      "args": ["-y", "osv-scanner-mcp"]
    }
  }
}

Codex CLI への登録

codex mcp add osv-scanner -- npx -y osv-scanner-mcp

または ~/.codex/config.toml に追加:

[mcp_servers.osv-scanner]
command = "npx"
args = ["-y", "osv-scanner-mcp"]
startup_timeout_sec = 60   # 初回のnpxパッケージ取得に備えて延長
tool_timeout_sec = 300     # 既定60秒。バイナリ自動ダウンロード+スキャン(既定120秒)を見込んで延長

注意: CodexのMCPツール実行タイムアウトは既定60秒です。本サーバーはスキャンのタイムアウトが既定120秒のため、初回のOSV-Scanner自動ダウンロードや大きめのプロジェクトのスキャンでは既定値のままだとCodex側が先にタイムアウトします。上記のように tool_timeout_sec の延長を推奨します。

Antigravity への登録

エージェントパネルの MCP Servers → Manage MCP Servers → View raw config で開く mcp_config.json に追加(Claude Desktopと同じ形式):

{
  "mcpServers": {
    "osv-scanner": {
      "command": "npx",
      "args": ["-y", "osv-scanner-mcp"]
    }
  }
}

VS Code(GitHub Copilot)への登録

code --add-mcp '{"name":"osv-scanner","command":"npx","args":["-y","osv-scanner-mcp"]}'

またはワークスペースの .vscode/mcp.json に追加(コマンドパレットの MCP: Add Server からも設定可能):

{
  "servers": {
    "osv-scanner": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "osv-scanner-mcp"]
    }
  }
}

ソースから使う場合

git clone https://github.com/tedorigawa001/OSV-Scanner-MCP.git
cd OSV-Scanner-MCP
npm install
npm run build
# 登録時は `npx -y osv-scanner-mcp` の代わりに `node /path/to/OSV-Scanner-MCP/dist/index.js` を指定

環境変数

変数

説明

OSV_SCANNER_PATH

使用するosv-scannerバイナリの明示指定。省略時はPATH→自動ダウンロードの順で解決。指定が無効な場合はフォールバックせずエラーになります(意図しないバイナリの実行防止)

OSV_MCP_ALLOWED_ROOT

指定時、このディレクトリ配下以外のスキャンを拒否します(パストラバーサル対策の境界)。設定を推奨

OSV_MCP_REQUIRE_ALLOWED_ROOT

1 または true 指定時、OSV_MCP_ALLOWED_ROOT が未設定ならサーバーの起動自体を拒否します(運用環境向けのfail-closedモード)

OSV_MCP_MAX_CONCURRENT_SCANS

同時実行できるスキャン数の上限(デフォルト 2、最大 16)。超過したリクエストは待たずに即時エラーになります

OSV_MCP_AUTO_DOWNLOAD

0 または false でバイナリの自動ダウンロードを無効化(デフォルト有効)

OSV_MCP_PREFER_DOWNLOAD

1 または true 指定時、PATH上のosv-scannerを使わず、チェックサム検証済みの自動ダウンロードバイナリを常に使用します(PATH汚染による偽バイナリ実行の防止。OSV_SCANNER_PATH の明示指定は引き続き最優先)

推奨: OSV_MCP_ALLOWED_ROOT は未設定でも動作しますが、その場合は任意の絶対パスをスキャンできてしまいます。悪意ある指示(プロンプトインジェクション)経由で意図しないディレクトリをスキャンさせられる経路を塞ぐため、プロジェクト置き場のルート(例: ~/projects)を設定しておくことを推奨します。各クライアントの設定で "env": {"OSV_MCP_ALLOWED_ROOT": "/Users/you/projects"} のように渡せます(Codex CLIのTOMLでは [mcp_servers.osv-scanner.env] セクション)。

本番運用の推奨構成: 共有サーバーやCI等の運用環境では、次の3つをセットで設定してください。

  • OSV_MCP_ALLOWED_ROOT=/スキャン対象のルート — スキャン範囲の境界を固定

  • OSV_MCP_REQUIRE_ALLOWED_ROOT=1 — 境界未設定なら起動を拒否(fail-closed)

  • OSV_SCANNER_PATH=/管理者所有の絶対パス または OSV_MCP_PREFER_DOWNLOAD=1 — PATH解決に依存せず、実行するバイナリを固定

提供ツール

scan_java_project

Java(Maven)プロジェクトをスキャンし、既知の脆弱性レポートを返します。

入力

パラメータ

型

説明

project_path

string

スキャン対象のプロジェクトディレクトリ、または pom.xml / gradle.lockfile の絶対パス

Gradleプロジェクトについて: 本ツールはlockfile方式のみ対応です(ビルド実行方式は build.gradle の任意コード実行を伴うため、セキュリティ上の理由から採用していません)。gradle.lockfile が無い場合は ./gradlew dependencies --write-locks で生成してください(依存ロック未設定の場合は build.gradle に dependencyLocking { lockAllConfigurations() } の追加が必要です)。

出力(成功時)

{
  "project_dir": "/path/to/project",
  "manifests": ["pom.xml"],
  "source_files": ["/path/to/project/pom.xml"],
  "vulnerable_package_count": 4,
  "vulnerability_count": 14,
  "severity_breakdown": { "critical": 3, "high": 3, "medium": 7, "low": 0, "unknown": 1 },
  "packages": [
    {
      "name": "org.apache.logging.log4j:log4j-core",
      "version": "2.14.1",
      "ecosystem": "Maven",
      "vulnerabilities": [
        {
          "id": "GHSA-jfh8-c2jp-5v3q",
          "cve": "CVE-2021-44228",
          "aliases": ["CVE-2021-44228"],
          "severity_score": 10,
          "severity": "critical",
          "summary": "Remote code injection in Log4j",
          "fixed_versions": ["2.3.1", "2.12.2", "2.15.0"]
        }
      ]
    }
  ]
}
  • packages は最も深刻な脆弱性を持つ順、各 vulnerabilities は深刻度順(unknownは末尾)

  • fixed_versions はMaven優先順位で昇順。複数のリリース系統(例: 2.12系バックポートと2.15系)が混在することがあります。空配列は「修正版が存在しない」ことを意味します

  • severity_score が取得できない脆弱性は null / "unknown" として扱います

scan_java_artifact

JAR/WARファイルの実体をスキャンします。既存のマニフェスト方式とは別ツールです。

{ "artifact_path": "/absolute/path/to/application.war" }

artifact_path はJAR/WARファイル、または探索するディレクトリの絶対パスです。 ディレクトリ指定では target や build も探索します。.git、node_modules、.idea、.vscode と探索中のシンボリックリンクは除外します。 探索上限は深さ8・100ファイル・10,000エントリです。上限に達して探索を完了できない場合は、結果を黙って省略せず artifact_search_limit_exceeded を返します。対象を絞って再実行してください。 OSV_MCP_ALLOWED_ROOT による制限も適用されます。

OSV-Scanner 2.4.0の java/archive プラグインを使用し、ネストJARもスキャナー側で解析します。Javaコードやビルドは実行しません。 識別にはアーカイブ内メタデータを用いるため、除去済みメタデータやshaded/minimized JAR内の依存を見落とす場合があります。

出力の読み方:

  • 先頭の coverage に jars_found、jars_identified、unidentified_jars を返します。件数はWARも含む、ファイルシステム上で列挙した外側のアーカイブ単位です。ネストJARの総数ではありません。

  • artifacts[].status は identified_with_vulnerabilities / identified_without_known_vulnerabilities / unidentified の3値です。「同定済み」は少なくとも1件のMaven座標を取得できた意味であり、全依存の同定ではありません。

  • coverage.completeness は常に incomplete。identified_vulnerability_count: 0 は安全性の保証ではありません。

  • packages は同定できた脆弱なパッケージの詳細です。複数アーカイブに含まれる同一パッケージ・脆弱性は全体集計では重複排除します。

  • JAR/WARが無い場合は no_scannable_artifacts、全件同定不能の場合は警告を含む成功レポートです。

suggest_fix は引き続きマニフェスト方式専用です。experimentalプラグインを使うため、OSV-Scannerのピン留めバージョン更新時には、フラグとJAR/WARの出力形式も再検証してください。 信頼できないアーカイブの展開はOSV-Scannerのネイティブ処理に依存します。タイムアウト・出力上限はありますが、OSレベルのメモリ制限やサンドボックスを提供するものではありません。

scan_sbom

既存のSBOMに記録された依存をOSV-Scannerで照会します。SBOMの生成、ビルド、JARの実行は行いません。

{ "sbom_path": "/absolute/path/to/release-sbom.json" }
  • 対応形式: UTF-8 JSONのCycloneDX 1.4 / 1.5 / 1.6、SPDX 2.2 / 2.3。XML、SPDX tag-value、SPDX 3は未対応です。

  • 入力: 16MiB以下のローカル通常ファイルの絶対パス。ファイル名は任意で、内容から形式を判別します。CycloneDXはcomponents、SPDXはpackages配列が必要です。形式・主要構造の確認であり、仕様全体のJSON Schema検証ではありません。

  • 識別情報: CycloneDXのcomponents[].purl、SPDXのpackages[].externalRefsにバージョン付きPackage URLを含めてください。例: pkg:maven/org.apache.logging.log4j/log4j-core@2.14.1。詳細はOSV-Scanner公式ドキュメントを参照してください。

  • 安全な読み込み: 許可ルートと読み込み中のサイズ上限を確認し、権限制限付きの一時コピーだけをスキャンします。元ファイルは変更せず、一時コピーは成功・失敗ともに削除します。

出力の先頭にcoverageを返します。

  • identified_package_count: スキャナーが識別した、名前・バージョン・エコシステムの重複を除いたパッケージ数。既知脆弱性がないものも含みます。

  • unidentified_packages: スキャナー出力に存在したものの、バージョン等が不足しているパッケージ。スキャナー自体が読み飛ばした項目は列挙できないため、この配列が空でも全件検査を意味しません。

  • status: 識別できたものがあればpackages_identified、なければno_packages_identified。

  • completeness / artifact_match: ともにnot_verified。SBOMの依存網羅性や、実際のJARと同一ビルドのものかは自動検証しません。

sbomには元ファイルのパス・形式・仕様バージョン・スキャンに用いた入力バイト列のSHA256を返します。identified_vulnerability_countとpackagesには識別できた依存の検出結果を返します。検出0件は「安全」の保証ではありません。 メタデータのないJARを補完するには、そのビルドに対応する正確なSBOMを別途用意してください。

不正JSONはinvalid_sbom、未対応形式はunsupported_sbom_format、入力上限超過はsbom_too_large、存在しない・読み取れないファイルはsbom_not_foundです。空のSBOMや識別できるパッケージがないSBOMは、警告付きの成功レポートになります。既存ツールと同じタイムアウト・出力上限・同時実行枠を使用します。

suggest_fix

スキャンを実行し、脆弱なパッケージごとに推奨アップグレードバージョンを提案します。単純な最大バージョンではなく、現在のバージョンに最も近いリリース系統の修正版を3段階フォールバックで選定します:

Tier

意味

same_minor

現在と同じ major.minor 系統内の修正版(最小の変更で済む)

major_internal

同一メジャー内の修正版(マイナーバージョンアップが必要)

cross_major

メジャーアップグレードが必要(破壊的変更の可能性あり)

入力: scan_java_project と同じ(project_path)

出力(成功時)

{
  "project_dir": "/path/to/project",
  "manifests": ["pom.xml"],
  "vulnerable_package_count": 4,
  "unfixed_vulnerability_count": 1,
  "suggestions": [
    {
      "package": "org.apache.logging.log4j:log4j-core",
      "current_version": "2.14.1",
      "ecosystem": "Maven",
      "recommended_upgrade": "2.25.4",
      "upgrade_tier": "major_internal",
      "verification": "verified",
      "upgrade_note": "取得済みの影響範囲に基づき修正対象CVEの範囲外と確認した候補です",
      "per_cve_detail": [
        { "id": "GHSA-jfh8-c2jp-5v3q", "cve": "CVE-2021-44228", "severity": "critical", "fixed_in": "2.15.0", "tier": "major_internal" }
      ]
    }
  ]
}
  • recommended_upgrade は既知の修正版を候補に、修正対象の全CVEの影響範囲外と確認できたものを3段階Tier順・バージョン昇順で選びます。CVEごとの修正版の最大値を単純に採用せず、別系統で再び影響を受ける候補も除外します。全公開版の中での最小性や未検出の脆弱性がないことは保証しません。

  • MavenのOSV ECOSYSTEM 範囲(introduced / fixed / last_affected / 上限なし)を照合します。versions に明示された影響も確認します。範囲欠落・不正・未対応形式・limit による不完全な情報では安全と推定せず、候補を検証できなければ recommended_upgrade: null、verification: "no_verified_candidate" を返します。

  • 推奨時は verification: "verified"、CVEごとの recommended_status は affected / not_affected / unknown です。推奨保留時は not_evaluated になります。per_cve_detail.fixed_in は各CVE単独の候補であり、最終推奨先の判定は recommended_status を参照してください。

  • 現在より新しい修正版候補がないCVEは tier: "unfixed" として推奨の修正対象から除外します(情報欠落を含む場合があります)。除外したCVEも推奨先で判定し、その状態を表示します。全CVEがunfixedの場合も recommended_upgrade は null です。

explain_vulnerability

指定したGHSA-ID / CVE-IDの脆弱性の詳細をOSVデータベースAPI(api.osv.dev)から直接取得して返します(スキャンは実行しません)。スキャン結果の id をそのまま渡せます。クライアントLLMの知識カットオフ以降に公開された脆弱性の説明に特に有効です。

入力

パラメータ

型

説明

vulnerability_id

string

脆弱性のID(例: GHSA-jfh8-c2jp-5v3q、CVE-2021-44228)

出力(成功時): id / aliases / summary / details(説明markdown、4,000字上限)/ severity(CVSSベクトル)/ published / modified / affected(影響パッケージとバージョン範囲)/ references(アドバイザリ・修正コミット等のURL、http/httpsのみ・20件上限)

注意: OSVの正規IDはGHSA等のため、CVE-IDでは見つからない場合があります(その場合はエラーメッセージでGHSA-IDでの照会を案内します)。

出力(エラー時) — 全ツール共通

isError: true とともに、機械判読可能な kind を含むJSONを返します:

{
  "error": {
    "kind": "no_manifest_found",
    "message": "対応マニフェスト(pom.xml / gradle.lockfile)が見つかりません(深さ3まで探索): /path/to/project"
  }
}

kind

意味

binary_not_found

OSV-Scannerが見つからない(インストール案内をmessageに含む)

project_not_found

指定パスが存在しない・ディレクトリ/pom.xmlでない

no_manifest_found

対応マニフェスト(pom.xml / gradle.lockfile)が見つからない

binary_download_failed

バイナリのダウンロード失敗(未対応プラットフォーム含む)

binary_checksum_mismatch

ダウンロードしたバイナリのチェックサム不一致(改ざん/破損の可能性)

gradle_lockfile_missing

Gradleプロジェクトだがgradle.lockfileが無い(生成手順をmessageで案内)

path_outside_allowed_root

OSV_MCP_ALLOWED_ROOT の外を指している

no_packages_found

スキャン対象パッケージなし(依存関係が未定義のpom.xml等)

scan_failed

OSV-Scannerが異常終了(stderr抜粋をdetailに含む)

scan_timeout

タイムアウト(デフォルト120秒)

too_many_concurrent_scans

同時実行スキャン数が上限(デフォルト2)に達している。完了を待って再試行

output_too_large

出力がサイズ上限(デフォルト32MB)を超過

invalid_output

出力がJSONとして解釈できない

invalid_vulnerability_id

脆弱性IDの形式が不正

vulnerability_not_found

指定IDの脆弱性がOSVデータベースに存在しない

api_request_failed

OSV APIへのリクエスト失敗(ネットワーク・タイムアウト・非2xx)

internal_error

想定外のエラー(内部情報は返しません)

セキュリティ設計

脆弱性診断ツール自体が攻撃経路にならないよう、以下を実装しています。

  • サプライチェーン対策: バイナリの自動ダウンロードは公式GitHub Releasesに限定し、バージョンをピン留め。パッケージに埋め込まれたSHA256チェックサムで検証します(配布元のSHA256SUMSファイルは信用しないため、リリース側が改ざんされても検出可能)。検証合格まで実行権限を与えず、キャッシュ済みバイナリも使用のたびに再検証します。OSV_MCP_PREFER_DOWNLOAD=1 でPATH上の未検証バイナリを使わない運用も選べます

  • コマンドインジェクション対策: シェルを経由しない spawn + 引数配列で実行。OSV-Scannerへの引数は固定リストのみで、可変部は検証済み絶対パス1つだけ

  • パストラバーサル対策: 入力パスは realpath でシンボリックリンク解決後に境界チェック。pom.xml探索ではシンボリックリンクを辿りません

  • DoS対策: タイムアウト・stdout上限・stderr抜粋上限を設定。スキャン結果は防御的にパースし、形式不正でも例外を投げません。同時実行スキャン数も上限(デフォルト2)を設け、並列リクエストによるプロセスの無制限起動を防ぎます

  • fail-closedな運用モード: OSV_MCP_REQUIRE_ALLOWED_ROOT=1 で、スキャン許可ルート未設定時にサーバーの起動自体を拒否できます

  • 情報漏えい対策: 想定外の例外はスタックトレース等を含めず internal_error に丸めます。外部由来のテキスト(脆弱性summary等)は長さ上限付きの「データ」として構造化して返します

  • プロンプトインジェクション対策: OSVデータベース由来のテキスト(summary / details / ID等)とOSV-Scannerのstderrは、LLMクライアントへ返す前にサニタイズします。制御文字(ANSIエスケープ含む)・ゼロ幅文字・双方向制御文字(RLO等)・Unicodeタグ文字(不可視のテキスト密輸)・行区切り(U+2028/2029)を除去し、NFC正規化を適用。外部データの読み取りアクセサを単一のサニタイズ境界にすることで適用漏れを防いでいます

開発

npm test                  # テスト実行(vitest)
npx vitest run --coverage # カバレッジ計測
npm run typecheck         # 型チェック
npm run build             # dist/ へビルド

設計メモ・残課題は docs/DESIGN_TODO.md を参照してください。

ロードマップ

  • suggest_fix ツール: 現在のバージョンに最も近い系統の修正版を提案(3段階Tierフォールバック)

  • explain_vulnerability ツール: 脆弱性の詳細説明(OSV API経由)

  • npmパッケージ化(npx osv-scanner-mcp)

  • OSV-Scannerバイナリの自動ダウンロード(チェックサム検証付き)

  • Gradle対応(lockfile方式)

  • scan_java_artifact ツール: JAR/WAR実体スキャン(lockfileが無い・shaded/fat JARのみのプロジェクト向け)

ライセンス

Apache License 2.0

Available Tools

5 tools
explain_vulnerability脆弱性の詳細説明の取得A

指定したGHSA-IDまたはCVE-IDの脆弱性の詳細をOSVデータベース(api.osv.dev)から取得して返す。説明(details)・CVSSベクトル・影響を受けるパッケージとバージョン範囲・参照リンク(アドバイザリや修正コミット)が含まれる。scan_java_projectやsuggest_fixの結果に含まれるIDをそのまま渡せる。スキャンは実行しない。

ParametersJSON Schema
NameRequiredDescriptionDefault
vulnerability_idYes脆弱性のID(例: GHSA-jfh8-c2jp-5v3q、CVE-2021-44228)

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states that the tool performs an external API lookup, returns specific data fields, and does not execute scanning, which are the key behavioral traits an agent needs. It does not mention potential network failures or rate limits, but for a read-only lookup tool, the disclosed behavior is sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three concise sentences in Japanese, starting with the core action, then the returned fields, then usage context and a clear non-scan caveat. Every sentence earns its place with no fluff or duplication of schema details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple one-parameter interface, the fully self-describing input schema, and the absence of an output schema, the description is complete enough. It explains the data source, the input, the output fields, the relationship to sibling tools, and the key behavioral constraint (no scanning), so an agent can invoke it correctly without additional information.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents vulnerability_id with examples and length constraints (100% coverage). The description adds valuable semantic context by stating that IDs from scan_java_project or suggest_fix can be passed directly, which helps the agent understand the expected value and provenance of the parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('取得して返す' fetch and return), a specific resource (OSV database at api.osv.dev), and the input type (GHSA-ID or CVE-ID). It explicitly lists the returned contents (details, CVSS, affected packages, references), which clearly distinguishes this from the sibling scan_java_project and suggest_fix tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly indicates this tool is for retrieving vulnerability details from IDs obtained via scan_java_project or suggest_fix, and explicitly states that scanning is not performed. This gives an agent clear contextual guidance on when to invoke it, though it does not explicitly state 'when not to use' for all alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scan_java_artifactJAR/WAR実体の脆弱性スキャンA

JAR/WARファイルまたはディレクトリ内の実体をスキャンする。ビルドやJavaコードの実行は行わない。メタデータによるベストエフォート同定のため、coverageと同定不能ファイルを必ず確認すること。completenessは常にincomplete。検出0件でも安全性や全依存の同定を保証しない。

ParametersJSON Schema
NameRequiredDescriptionDefault
artifact_pathYesJAR/WARファイル、または探索するディレクトリの絶対パス

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It transparently discloses that no build or code execution occurs, that identification is best-effort based on metadata, that completeness is always incomplete, and that zero findings do not guarantee safety. This is strong behavioral transparency, though it does not describe return format or pagination.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences, each adding value: the action, what it avoids, and critical result-interpretation caveats. The most important information is front-loaded, with no fluff or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the single parameter and lack of output schema, the description explains key limitations (coverage, incompleteness, no guarantee) that an agent needs to correctly interpret results. It does not detail the output structure, but the caveats about coverage and unidentifiable files imply the output contains these, which is sufficient for safe usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the description does not add details beyond what the schema already states for artifact_path. It aligns with the schema's description of the parameter, but no extra semantics are provided.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool scans entities inside JAR/WAR files or directories, explicitly distinguishing it from source-level scanning (scan_java_project) and noting it does not execute builds or Java code. The verb+resource combination is specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the resource type (JAR/WAR vs. source code), but there is no explicit mention of when to use this over scan_sbom or scan_java_project. The description does provide guidance on interpreting results (check coverage, unidentifiable files) but lacks explicit alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scan_java_projectJavaプロジェクトの脆弱性スキャンA

Java(Maven)プロジェクトをGoogle OSV-Scannerでスキャンし、依存ライブラリの既知の脆弱性(CVE/GHSA)を深刻度順のJSONレポートで返す。レポートにはパッケージごとの脆弱性一覧(CVSSスコア・5段階深刻度・修正版バージョン)とサマリ集計が含まれる。Maven(pom.xml)とGradle(gradle.lockfile)に対応。

ParametersJSON Schema
NameRequiredDescriptionDefault
project_pathYesスキャン対象のプロジェクトディレクトリ、またはpom.xml/gradle.lockfileの絶対パス

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and does disclose key behavior: it uses OSV-Scanner, returns JSON, orders by severity, and specifies report contents including CVSS score, severity level, fixed version, and summary. It does not discuss side effects or network requirements, but scanning is reasonably implied as a read-only analysis.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences: the first covers the operation, tool, output format, and report contents; the second covers supported build tools. No filler, and the most important information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with no output schema, the description sufficiently explains what the report contains and what input forms are accepted. It could mention edge cases like network access or empty vulnerability results, but nothing essential for selecting or invoking the tool is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds that both Maven and Gradle are supported, but the schema already documents that project_path can be a directory or an absolute path to pom.xml/gradle.lockfile, so no substantial new meaning is added.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('スキャン'), a specific resource (Java/Maven project dependencies), and the output (JSON vulnerability report ordered by severity). It clearly distinguishes this from siblings like suggest_fix and explain_vulnerability by focusing on detection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states what project types are supported (Maven pom.xml and Gradle gradle.lockfile) and what input is accepted (project directory or build file path), giving clear context for when to invoke it. It does not explicitly name alternatives or exclusions, but the siblings are clearly different downstream actions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scan_sbomSBOMの脆弱性スキャンA

CycloneDX 1.4/1.5/1.6またはSPDX 2.2/2.3のJSON SBOMから識別できる依存をスキャンする。ビルドやJARの実行は行わない。入力は16MiB以下のローカルファイル。SBOMの網羅性・鮮度・実成果物との一致は未検証であり、検出0件でも安全性を保証しない。

ParametersJSON Schema
NameRequiredDescriptionDefault
sbom_pathYesCycloneDX/SPDX JSON SBOMファイルの絶対パス

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does an excellent job: it discloses that only SBOM-identifiable dependencies are scanned, that builds/JARs are not executed, that SBOM comprehensiveness/freshness/artifact-match are unverified, and that zero detections do not guarantee safety. These limitations are highly useful for an agent deciding how to interpret results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, front-loaded with the core scanning behavior and supported formats, and every sentence adds operational value. It states scope, exclusions, input constraints, and key limitations without redundancy or padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with no annotations and no output schema, the description is quite complete: input format, size, local-file requirement, non-execution behavior, and result caveats are all covered. The main gap is that it does not describe the return value or output structure of the scan, which would help an agent know what to expect after calling it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already defines sbom_path as an absolute path to a CycloneDX/SPDX JSON SBOM file, with 100% coverage. The description adds meaningful constraints beyond the schema: supported format versions, the 16MiB size limit, and that the input must be a local file, which helps the agent validate the parameter before calling the tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('スキャンする') and resource ('CycloneDX 1.4/1.5/1.6またはSPDX 2.2/2.3のJSON SBOM'), and states what is scanned: dependencies identifiable from the SBOM. It is clearly distinguished from siblings like scan_java_project and scan_java_artifact by focusing on an SBOM file input rather than a project or artifact.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description establishes clear usage context: this tool is for scanning a local JSON SBOM file, with a 16MiB size limit, and explicitly says it does not build or execute JARs. It does not explicitly name sibling alternatives or exclusion conditions, but the input constraints and non-execution note make the intended scenario reasonably clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

suggest_fix脆弱性を解消する推奨アップグレードの提案A

Java(Maven)プロジェクトをスキャンし、脆弱な依存パッケージごとに推奨アップグレードバージョンを提案する。現在のバージョンに最も近いリリース系統の修正版を優先する3段階フォールバック(same_minor: 同一major.minor系統内 → major_internal: 同一メジャー内 → cross_major: メジャーアップグレード)で選定し、推奨バージョン・アップグレード距離(upgrade_tier)・CVEごとの修正版を返す。候補を全修正対象CVEの影響範囲と照合し、情報不足の場合は推奨を保留する。現在より新しい修正版候補のないCVEはunfixedとして別表示し、推奨先での判定も返す。Maven(pom.xml)とGradle(gradle.lockfile)に対応。

ParametersJSON Schema
NameRequiredDescriptionDefault
project_pathYesスキャン対象のプロジェクトディレクトリ、またはpom.xml/gradle.lockfileの絶対パス

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral disclosure burden and does so thoroughly: it reveals the three-stage fallback selection logic (same_minor → major_internal → cross_major), the policy to hold recommendations when information is insufficient, the separate 'unfixed' display, and support for both Maven and Gradle. It also implies a non-mutating scan by saying 'scans' and 'proposes'.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense paragraph with no filler, front-loading the core purpose and then adding useful algorithmic detail. It is somewhat long, but each clause contributes meaningful behavioral or selection information that an agent would need.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema, the description covers what is returned (recommended version, upgrade_tier, per-CVE fixed versions, unfixed status, and the judgment at the recommended target), the selection algorithm, and supported project formats. It is nearly complete, though it does not specify the exact response shape or error behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers the only parameter (project_path) at 100%, including that it may be a directory or a pom.xml/gradle.lockfile path. The description reinforces this but adds no meaningful semantics beyond what the schema already provides, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('scan' and 'propose'), a specific resource (vulnerable Java dependency packages), and the concrete outputs (recommended version, upgrade_tier, CVE-level fixed versions). This clearly differentiates it from siblings that merely scan artifacts, SBOMs, or projects, or that explain vulnerabilities.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes it clear the tool is for generating upgrade recommendations for vulnerable Java dependencies and notes Maven/Gradle support. However, it never explicitly states when to prefer this over scan_java_project or scan_java_artifact, nor does it mention exclusions or prerequisite steps.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updatesv0.3.0
    • Addedscan_java_artifact
    • Addedscan_sbom
  2. 3 tool updatesv0.1.11
    • Addedexplain_vulnerability
    • Changedscan_java_project1 field changed
      • changedInput schema / properties / project_path / description
        Previous value: -"スキャン対象のプロジェクトディレクトリまたはpom.xmlの絶対パス"New value: +"スキャン対象のプロジェクトディレクトリ、またはpom.xml/gradle.lockfileの絶対パス"
    • Addedsuggest_fix
  3. 1 tool updatev0.1.0
    • First observedscan_java_project

TDQS

A4.3/5.0

Scored across 5 tools

Disambiguation4/5

Most tools have clear boundaries: scan_java_project, scan_java_artifact, scan_sbom, explain_vulnerability, and suggest_fix each have distinct primary purposes. However, suggest_fix also scans a Java project and surfaces vulnerability/fix-version details, so it could be confused with scan_java_project when an agent simply wants a vulnerability scan.

Naming Consistency5/5

All tool names follow a consistent imperative verb_noun pattern with snake_case: scan_java_project, scan_java_artifact, scan_sbom, explain_vulnerability, and suggest_fix. The naming convention is uniform and predictable.

Tool Count5/5

Five tools is a well-scoped set for this server's purpose. Each tool covers a distinct operation: scanning projects, scanning artifacts, scanning SBOMs, explaining vulnerabilities, and suggesting fixes. No tool feels redundant or unnecessary.

Completeness4/5

The tool surface covers the main vulnerability workflow well: scanning multiple input types, explaining findings, and recommending upgrade paths. Minor gaps exist, such as fix suggestions being limited to Java project scans and no direct support for non-Java package manifests.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    Not graded
    maintenance
    Enables security scanning of code projects to identify common vulnerabilities like XSS, injections, SSRF, and path traversal issues. Provides local, offline scanning with severity-grouped results and actionable fix suggestions for improving code security.
    38 npm
    -