Vuln Check

io.github.ciloopsPublished by GitHub account ciloopsv0.1.3Updated Nov 6, 2026

Local vulnerability scan on top of grype, with prioritised upgrade actions for agents.

The publisher's own server: check.tattoo: tattoo size and placement guide

Overview

AI-generated overview

Local vulnerability scanner built on grype that lets an assistant scan project directories, container images and SBOMs and get prioritized upgrade actions.

What you can do
  • Scan a project directory for known vulnerabilities in lockfile dependencies and OS packages, with a prioritized summary and concrete upgrade targets
  • Scan a container image pulled from a registry, without needing a Docker daemon
  • Scan an existing CycloneDX or SPDX SBOM file
  • Look up a single vulnerability by CVE or GHSA id, with severity, affected packages and fixes
  • Refresh the local vulnerability database on demand
When to use it
Useful when an assistant is asked to check a project's dependencies or a base image for known vulnerabilities before changing dependency files or building, or to explain a specific CVE. It returns a compact, prioritized answer rather than a large raw report.
Requirements
Runs as a local process; grype must be installed (the Docker image bundles it). Available via npx, Homebrew, Go install, release binaries or the ghcr.io image. No accounts, API keys or environment variables are declared. Network access is used to pull images and, unless disabled, to query the OSV API.
Before you install
By default the dependency purls inventoried by grype are sent to the OSV API; the no-OSV option keeps the dependency list off the network. Scans read project directories and pull container images, so image references are shared with the registry. Results are advisory: no lockfile means transitive dependencies are invisible, and version comparison is a generic tokenizer with known edge cases.

Installation

In SourceWeft

  1. Open Vuln Check in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

vuln-check

[ci] [codecov] [release] [go] [license]

Vulnerability truth for AI agents. Runs grype locally, merges an OSV freshness overlay, and returns a prioritised answer with concrete upgrade targets instead of a 40 KB JSON dump.

  • Any language with a lockfile (npm, PyPI, Go, Maven, Cargo, RubyGems, Composer, NuGet, Hex, Pub, Swift, R, Conan…), OS packages, container images, SBOMs.
  • One score per finding: CVSS + EPSS + CISA KEV + fix availability.
  • Remediation plan per package: smallest version that closes every finding, breaking flag.
  • CLEAN is ~20 tokens. Nothing runs on a server; nothing leaves your machine except the optional OSV query.

Install

sh
# grype is requiredbrew install grype            # or: curl -sSfL https://get.anchore.io/grype | sh -s -- -b /usr/local/bin
go install github.com/ciloops/vuln-check/cmd/vuln-check@latest# orbrew install ciloops/tap/vuln-check      # macOS cask# ornpx @ciloops/vuln-check scan .

Binaries for Linux/macOS/Windows on the Releases page. Docker: ghcr.io/ciloops/vuln-check (bundles grype).

CLI

sh
vuln-check scan .                               # agent format, OSV overlay onvuln-check scan python:3.12-slim                # image, pulled from the registryvuln-check scan sbom:bom.cdx.jsonvuln-check scan --format sarif --sarif-out out.sarif .vuln-check scan --fail-above 69 --no-osv .      # CI gate, exit 2 above thresholdvuln-check vuln CVE-2024-3094vuln-check db update

Output (--format agent):

json
{"status":"ACTION_REQUIRED","target":"dir:.","packages":412,"findings":17,"shown":5,"sources":["grype","osv"], "actions":[{"package":"pkg:npm/minimist","current":"1.2.5","target":"1.2.6","breaking":false,"fixes":["CVE-2021-44906"],"score":59}], "top":[{"id":"CVE-2021-44906","package":"[email protected]","severity":"CRITICAL","score":59,"epss":0.015,"fixed_in":["1.2.6"]}], "unfixable":3}

status: CLEAN | REVIEW (all findings < 40) | ACTION_REQUIRED. fresh: true marks advisories that came from OSV before grype-db ingested them. unfixable counts findings with no fix on the current release line.

MCP

Tools: scan_dir, scan_image, scan_sbom, vuln_lookup, db_update.

Claude Code:

sh
claude mcp add vuln-check -- vuln-check mcp# or the plugin (adds a skill that tells Claude when to scan):claude plugin marketplace add ciloops/vuln-check && claude plugin install vuln-check

Cursor / Windsurf / VS Code (.cursor/mcp.json, ~/.codeium/windsurf/mcp_config.json, .vscode/mcp.json):

json
{ "mcpServers": { "vuln-check": { "command": "vuln-check", "args": ["mcp"] } } }

Codex (~/.codex/config.toml):

toml
[mcp_servers.vuln-check]command = "vuln-check"args = ["mcp"]

Add --no-osv to the args to keep the dependency list off the network.

GitHub Action

yaml
- uses: ciloops/vuln-check@v1  with:    target: .            # or an image ref    fail-above: 69    sarif: vuln.sarif- uses: github/codeql-action/upload-sarif@v3  if: always()  with: { sarif_file: vuln.sarif }

Score

severity = CVSS base × 6 (label fallback) · exploit = EPSS × 30 · KEV: +10, floor 85 · no fix: × 0.85. Clamped to 0–100. See internal/score.

Freshness

grype-db builds daily and grype refreshes it at most every 2 h. The OSV overlay queries api.osv.dev with the purls grype inventoried (language ecosystems only) and adds anything grype-db has not seen yet, usually minutes after a GHSA is published. Disable with --no-osv.

Limits

  • No lockfile → transitive dependencies are invisible. Same as every scanner.
  • Remediation plans assume a linear release line per package; direct vs transitive is not distinguished yet.
  • Version comparison is a generic tokenizer, not per-ecosystem parsers. Good enough for "smallest fix above current"; edge cases exist (PEP 440 post-releases, exotic Maven qualifiers).

Development

sh
go test ./...go build ./cmd/vuln-check

Tests run against a fake grype (cmd/vuln-check/testdata/fake-grype.sh) and fixtures in internal/grype/testdata. CI runs a real grype e2e.

Release: tag vX.Y.Z → goreleaser publishes binaries, checksums, ghcr image, Homebrew cask for macOS (needs HOMEBREW_TAP_GITHUB_TOKEN and the ciloops/homebrew-tap repo) and the npm package via trusted publishing (OIDC, no token: configure the GitHub Actions trusted publisher for @ciloops/vuln-check on npmjs.com, workflow release.yml).

License

Apache-2.0. grype and syft are Apache-2.0 by Anchore. Vulnerability data: NVD (public domain), GHSA (CC-BY 4.0), OSV (per source), CISA KEV, FIRST EPSS.

Source: README.md at commit dfb645a

Tools

5

db_update

Update the local vulnerability database now. Scans already refresh it automatically once a day; call this only when the newest advisories matter.

Takes no parameters.

scan_dir

Scan a project directory for known vulnerabilities in its dependencies (any language with a lockfile) and OS packages. Returns a prioritized summary with concrete upgrade actions. Call this before changing dependency files.

Parameterstoppathrequired

scan_image

Scan a container image (pulled from the registry, no Docker daemon needed) for vulnerabilities in OS packages and bundled dependencies. Use it to check a Dockerfile's FROM base image before building.

Parameterstopimagerequired

scan_sbom

Scan an existing CycloneDX or SPDX SBOM file for vulnerabilities.

Parameterstoppathrequired

vuln_lookup

Look up a vulnerability by id (CVE, GHSA, ...) in the local database: severity, affected packages and fixes.

Parametersidrequired

Version history

1
  1. v0.1.3LatestOct 23, 2026

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts
  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

Other Check integrations