# Sentinel DV

Indexes UVM and cocotb logs, coverage reports, regressions and waveform summaries into DuckDB, then hands an AI agent 28 read-only tools.

- MCP server · `type=mcp` · Claude Code, Codex, Cursor, GitHub Copilot, Windsurf (Devin Desktop), Cline, Zed, Gemini CLI · ★ 5
- Author: kiranreddi
- License: Apache-2.0 · policy=link-only · description only; the file stays with the author
- Source: https://github.com/kiranreddi/sentinel-dv
- Updated: 2026-08-02
- HTML: https://affpapa.org/en/nevibecode/mcp/sentinel-dv

## What it does

Sentinel DV pulls exported verification artifacts into a local DuckDB index: UVM logs, cocotb and JUnit XML output, assertion failure JSON, SVA run status, coverage summaries, `*.wave.json` files and VCD. On top of that index sit 28 tools with versioned output schemas, grouped around runs, tests, failures, coverage, regressions and waveforms. The agent queries the index instead of chewing through raw files.

The server never runs a simulation and never edits RTL or a testbench. `runs.submit` and `tests.replay` hand back dry-run commands for an engineer to look over first. Native FSDB and WLF streaming is out of scope — only precomputed summaries. Path resolution stays inside the configured `artifact_roots`, and response size, page counts and evidence references are capped in the same config, along with redaction of secrets, emails and local paths.

Python 3.10 or newer is required. Build the index before starting the server with `sentinel-dv-index --config ... --index-all`, and point `SENTINEL_DV_CONFIG` at an absolute path: relative paths inside the YAML resolve from the config file's own directory. The repository ships skills for regression triage, single-test debugging and coverage closure, plus Codex and Claude plugin manifests.

## Requirements
- Needs: Python and uv (commands run via uvx)
- Environment variables: `SENTINEL_DV_CONFIG` — keys and tokens: ask the human for the values, never commit them or put them in shared files.

## Install

### Claude Code (native platform)

**Platform CLI**
```bash
claude mcp add --env SENTINEL_DV_CONFIG=<SENTINEL_DV_CONFIG> --transport stdio sentinel-dv -- uvx sentinel-dv
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from sentinel-dv <command>

### Codex

**Platform CLI**
```bash
codex mcp add sentinel-dv --env SENTINEL_DV_CONFIG=<SENTINEL_DV_CONFIG> -- uvx sentinel-dv
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from sentinel-dv <command>

### Cursor

**Config file**
File `.cursor/mcp.json`:
```json
{
    "mcpServers": {
        "sentinel-dv": {
            "command": "uvx",
            "args": [
                "sentinel-dv"
            ],
            "env": {
                "SENTINEL_DV_CONFIG": "<SENTINEL_DV_CONFIG>"
            }
        }
    }
}
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from sentinel-dv <command>

### GitHub Copilot

**Config file**
File `.vscode/mcp.json`:
```json
{
    "servers": {
        "sentinel-dv": {
            "type": "stdio",
            "command": "uvx",
            "args": [
                "sentinel-dv"
            ],
            "env": {
                "SENTINEL_DV_CONFIG": "<SENTINEL_DV_CONFIG>"
            }
        }
    }
}
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from sentinel-dv <command>

### Gemini CLI

**Platform CLI**
```bash
gemini mcp add -e SENTINEL_DV_CONFIG=<SENTINEL_DV_CONFIG> sentinel-dv uvx sentinel-dv
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from sentinel-dv <command>

## When to use it
- locate the failing test inside a large regression run
- cluster failures by stable signature instead of diffing logs by hand
- see which coverage bins are still empty
- diff two runs and spot test-level changes
- get a signal summary out of a VCD without opening a waveform viewer

## Example prompts
- List the runs and find the one with the most failing tests
- Cluster the failures in the latest regression and show evidence for each group
- Which coverage gaps remain, and what does `coverage.advisor` suggest?

## Similar
- [Front-End Checklist](https://affpapa.org/en/nevibecode/mcp/front-end-checklist.md) — MCP server · ★ 74559
- [Keploy](https://affpapa.org/en/nevibecode/mcp/keploy.md) — MCP server · ★ 18727
- [SeleniumBase MCP](https://affpapa.org/en/nevibecode/mcp/seleniumbase-mcp.md) — MCP server · ★ 13169
- [mobile-mcp](https://affpapa.org/en/nevibecode/mcp/mobile-mcp.md) — MCP server · ★ 9946
- [e2e](https://affpapa.org/en/nevibecode/mcp/e2e.md) — MCP server · ★ 11912
- [mockserver](https://affpapa.org/en/nevibecode/mcp/mockserver.md) — MCP server · ★ 4996

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
