javv
Just Another Vulnerability Viewer - Kubernetes-runtime-native vulnerability triage, dashboards, and CSV reporting for Trivy and Grype scans, with an MCP endpoint for AI agents.
Install / Use
claude mcp add Danube-Labs -- npx -y github:Danube-Labs/javvIf the server publishes to npm under a different name, use that package instead — check the repo README.
MCP Server
Model Context Protocol server
Quality Score
Category
SecuritySupported Platforms
Our assessment of javv
javv scores 76/100 on our quality scale, 1010th of 1,102 Security skills we index.
Its MCP Server is 13 KB long, well organised into 8 sections with 1 code example: a thorough specification that gives an agent plenty to work with.
It has 10 GitHub stars, so there is little community track record yet; judge it on its content.
Maintenance, license and trust
- The repository was last updated today, so javv is actively maintained.
- No license is declared. By default that means all rights are reserved: you can read it, but reusing or redistributing it is not clearly permitted. Ask the author before building on it commercially.
- Its trust signals score 85/100, with 1 caution from licensing, adoption, age or documentation. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
javv compared with similar skills
All 4 of these similar skills score higher than javv; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| javv (this skill)by Danube-Labs | 76 | 10 | today | MCP Server |
| Agent-Reachby Panniantong | 100 | 109.5k | 1d ago | CLAUDE.md |
| headroomby headroomlabs-ai | 100 | 79.0k | today | CLAUDE.md |
| CowAgentby zhayujie | 100 | 47.8k | today | CLAUDE.md |
| Scraplingby D4Vinci | 100 | 98.7k | 1d ago | MCP Server |
Frequently asked questions
- How do I install javv?
- Run
claude mcp add Danube-Labs -- npx -y github:Danube-Labs/javv. The install tabs above show the steps for each supported agent. - Which AI agents does javv work with?
- It is written for Claude Code and Claude Desktop, as a MCP Server file. Other agents that read the same format can often use it too.
- Is javv safe to use?
- It declares no license and scores 85/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is javv still maintained?
- The repository was last updated today, so javv is actively maintained.
Skill content
View source on GitHubWhy
Vulnerability tooling splits into two worlds: triage tools (DefectDojo, Dependency-Track) with rigid reporting, and log-analytics dashboards with no concept of auditing a finding. JAVV fills the seam: a real triage lifecycle and exploratory dashboards, over what's live in your clusters.
Three things it does differently:
- Scans what's running, not a registry. JAVV discovers the images actually deployed in your clusters and scans those: the vulnerabilities you're exposed to right now, not a catalogue.
- Two scanners, never merged. Trivy and Grype run per-image and are kept side by side. JAVV never dedupes a CVE across scanners. Instead it flags where they disagree, so you see the blind spots a single-scanner tool hides.
- Every vulnerability is auditable. Each finding carries its own immutable history: a six-state triage lifecycle (+ VEX and risk-accept), every decision journaled with who, what, and when, plus whole-app time-travel that rewinds every screen to any point in the past. Most tools have no concept of auditing a single finding; here it's the core.
Features
- Runtime discovery: scan the images live in your clusters. Choose what to scan by namespace, image and workload kind.
- Per-scanner, side by side: Trivy + Grype kept separate; disagreement is surfaced, never merged away.
- Per-finding audit trail: every vulnerability keeps its own immutable history, with each triage action, decision, and note journaled by who, what, and when, replayed in causal-revision order.
- Triage lifecycle: a six-state machine (five operator-settable;
staleis set by the staleness sweep), VEX export (OpenVEX / CycloneDX), risk-accept, decisions that apply across scanners. - Whole-app time-travel: a global picker rewinds every screen to any point ≤ now, reconstructed from the append logs.
- Append-only audit log: immutable, per-finding and per-user, exportable to CSV.
- Multi-tenant + RBAC: isolated by immutable
cluster_id; capability-based roles, local auth + bootstrap admin. - Server-side everything: every count and page comes from an OpenSearch aggregation, never computed on the client.
- Screens & exports: overview, running-images inventory, scanner status, contributors, approvals, SLA tracking, one-click CSV.
- Dashboards: make your own dashboards from a catalog of panels. Share each one with everyone or with some roles, and copy dashboards to a different JAVV as a file.
- AI agents (MCP): connect an agent such as Claude Code, Codex, VS Code or Cursor to the MCP endpoint of JAVV. Each MCP token has one level: read, write, or write and risk accept. No token can change users, roles, settings or tokens, or delete data. Each tool call writes a row in the audit log. The endpoint is off by default (Use the MCP server).
- Data inspector + repair actions: a read-only OpenSearch console and a small set of sanctioned, journaled maintenance jobs.
- No external broker: coordination is OpenSearch, and the backend runs its own background jobs on cron schedules. No Redis/Kafka/RabbitMQ, and no CronJob per job: one backend container and one frontend container.
Architecture
flowchart TB
subgraph CLUSTER["Your cluster · one per cluster_id"]
direction TB
SCAN["Python scanner module<br/>Trivy + Grype adapters, one JAVV-built image each<br/>run as CronJobs, kept per-scanner and never merged"]
end
subgraph JAVV["JAVV · central, never writes to a monitored cluster"]
direction TB
API["FastAPI async backend<br/>server-side aggregations"]
STORE[("OpenSearch · single store<br/>findings · append logs · audit · config")]
UI["Vue 3 frontend<br/>PrimeVue · Pinia · ECharts"]
API <--> STORE
API --> UI
end
SCAN -->|"scan envelopes<br/>token-authenticated ingest"| API
Ingest is authenticated with a per-cluster bearer token that is scope-bound: a token cannot push another cluster's data. JAVV only ever receives pushes, so it needs no credentials for, and no network path into, the clusters it reports on.
Deploy: docker compose on one machine, or Helm charts on Kubernetes
(docs/DEPLOYING.md). Full detail on layers, data flow, and the index
model lives in docs/engineering/ARCHITECTURE.md and
docs/engineering/INDEX-MAP.md.
Running it
On one machine: deploy/compose/ starts OpenSearch, the backend and the
frontend with docker compose up -d, on the images the release publishes, and scanners in any
cluster push to it. On Kubernetes: the javv-opensearch and javv charts, and javv-scanner
in each cluster you scan. The guide for both, including http or https and pointing scanners at
JAVV, is docs/DEPLOYING.md, also on the
docs site with configuration, sizing, upgrades and the
API.
From source, for development: bring the stack up by hand (backend + UI against a local OpenSearch, or the full end-to-end path
with real Trivy/Grype scanning a live k3d cluster) by following
development/RUNNING-THE-STACK.md (paths A / B / F). On a
fresh Ubuntu host, bash development/setup/setup-dev.sh installs every prerequisite first
(idempotent; verify readiness with preflight.sh).
Documentation
Operator docs: https://danube-labs.github.io/javv/latest/. Deploying, configuration, sizing and
scaling, upgrading, release notes, the API and the ingest contract, published from the files in
this repository whenever they change on main.
Canonical engineering set (docs/engineering/):
| Doc | What | |---|---| | PLAN.md | Decisions, data model, milestones | | SPEC.md | Functional + non-functional requirements (FR/NFR) | | ARCHITECTURE.md | Layers, data flow, diagrams (Mermaid) | | INDEX-MAP.md | Source of truth for every OpenSearch index + mapping | | FLOW-EXAMPLE.md | Worked ingest / query / time-travel examples | | AUDIT-RESPONSE.md | External-audit findings and their resolutions |
Supporting:
| Path | What | |---|---| | REPO-MAP.md | Repository map: what every folder is + reading order | | CONTRIBUTING.md | Setup, house conventions, the gates a PR must pass | | SECURITY.md | How to report a vulnerability in JAVV (privately), and what's in scope | | CODE_OF_CONDUCT.md | Contributor Covenant 3.0: how we work together, and how to report a concern | | docs/API.md | The shipped HTTP surface at a glance (auth regimes, capabilities) | | docs/DEPLOYING.md | Deploy JAVV: docker compose on one machine or the Helm charts on Kubernetes, and connect the scanners | | docs/UPGRADING.md | Move a running JAVV to a newer release | | docs/CONFIGURATION.md | Every configuration setting: its default, what it does, where you set it | | development/RUNNING-THE-STACK.md | Bring the stack up by hand (backend / full-stack / frontend) | | docs/research/ | Stack best-practices, tooling/MCP, audits backing v4 | | design/ | Brand source of record (logos, tokens, guide) |
Stack & toolchain
Python 3.12 · FastAPI (async) · AsyncOpenSearch · Pydantic v2 · Vue 3 (<script setup>) · PrimeVue ·
Pinia · vue-echarts. OpenSearch is the single store. Open-source components throughout.
Gate-tool versions (the ones that decide lint/type/test results, so local matches CI) are pinned in
versions.yaml (D42). Bump them there; development/setup/setup-dev.sh reads
it directly and development/scripts/check-versions.sh drift-checks every consumer.
| Tool | Role | Version |
|---|---|---|
| Python | Backend runtime | 3.12 |
| uv | Python package/venv manager | toolchain.uv in versions.yaml |
| ruff | Lint + format (backend) | toolchain.ruff in versions.yaml |
| pyright | Type check (backend) | toolchain.pyright in versions.yaml |
| Node.js | Frontend runtime / toolchain | toolchain.node in versions.yaml |
| Vite · Vitest · ESLint/oxlint · stylelint · vue-tsc | Build, tests, lint/type gates (frontend) | from frontend/package.json |
| OpenSearch | Single datastore | pinned in versions.yaml |
| Trivy · Grype | Scanners (per-scanner, never merged) | pinned in versions.yaml |
| kubectl · helm · k3d | Local k8s (k3s-in-Docker) | latest |
Supported versions
The externally-owned scanners + datastore JAVV pins and supports live in
versions.yaml (D41/D42). Renovate watches it, the compatibility gate
(scanner-images CI) validates a new scanner version before it's published, and a drift check keeps
the Dockerfiles + dev compose in step. To change support, edit versions.yaml.
| Component | Current | Also supported | |---|---|---| | Trivy | 0.76.1 | 0.70.0 | | Grype | 0.121.1 | 0.114.0 | | OpenSearch | 3.9.0 | n/a |
<!-- --8<-- [end:supported-versions] -->Sc
Truncated for display — read the full file on GitHub.
Related Skills
Agent-Reach
109.5kGive your AI agent eyes to see the entire internet. Read & search Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu — one CLI, zero API fees.
headroom
79.0kCompress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server.
CowAgent
47.8kOpen-source personal AI assistant & Agent Harness. Plans tasks, runs tools and skills, self-evolves with memory and knowledge. Multi-agent, multi-model, multi-channel. Lightweight, extensible, one-line install.
Scrapling
98.7k🕷️ The BEST Web Scraping framework that handles everything from a single request to a full-scale crawl! Don't be shy, join here: https://discord.gg/EMgGbDceNQ and follow here for daily tips and tricks: https://x.com/Scrapling_dev
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
