# Verdi Bridge

Connects your coding agent to a live Synopsys Verdi session to inspect simulation waveforms and trace RTL drivers.

- MCP server · `type=mcp` · Claude Code, Codex, Cursor, GitHub Copilot, Windsurf (Devin Desktop), Cline, Zed, Gemini CLI · ★ 21
- Author: RuihongY
- License: MIT · policy=link-only · description only; the file stays with the author
- Source: https://github.com/RuihongY/verdi_bridge
- Updated: 2026-10-14
- HTML: https://affpapa.org/en/nevibecode/mcp/verdi-bridge

## What it does

The server translates model tool calls into direct inspection routines inside nWave and nTrace. An agent searches the design hierarchy, identifies value transitions, reads X/Z states, and jumps straight to driver code. Heavy queries across large FSDB dumps bypass the GUI via Verdi's NPI reader, keeping the graphical interface responsive.

It exposes eighteen typed MCP tools for measuring clocks, sampling bus data, and adjusting the simulation timeline. The setup operates locally or over an SSH tunnel. The bridge only reads simulation context. It does not compile, edit, or modify your RTL code.

A licensed Synopsys Verdi installation is strictly required. Your client machine needs Python 3.11 or newer. When connecting to a remote host, that machine requires Python 3.6+ and Verdi's built-in Tcl 8.6 environment.

## Requirements
- Needs: Python and uv (commands run via uvx)
- Environment variables: `VERDI_BRIDGE_DIR`, `VERDI_BRIDGE_HOST`, `VERDI_BRIDGE_CONTROL_PATH` — 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 VERDI_BRIDGE_DIR=<VERDI_BRIDGE_DIR> --env VERDI_BRIDGE_HOST=<VERDI_BRIDGE_HOST> --env VERDI_BRIDGE_CONTROL_PATH=<VERDI_BRIDGE_CONTROL_PATH> --transport stdio verdi-bridge -- uvx verdi-bridge
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from verdi-bridge <command>

### Codex

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

### Cursor

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

### GitHub Copilot

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

### Gemini CLI

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

## When to use it
- inspect waveform transitions while preserving X and Z states
- navigate simulation time to cycles preceding an assertion error
- trace driving RTL statements directly from live signals
- sample bus values on clock edges across large FSDB files

## Example prompts
- Inspect the handshake signals and trace the code driving BVALID
- Jump 20 cycles before the simulation mismatch and check why full stayed asserted
- Sample the FIFO pointers on each clock edge across this time window

## Similar
- [REA](https://affpapa.org/en/nevibecode/mcp/rea.md) — MCP server · ★ 392262
- [GitHub](https://affpapa.org/en/nevibecode/mcp/github.md) — MCP server · ★ 33989
- [Netdata](https://affpapa.org/en/nevibecode/mcp/netdata.md) — MCP server · ★ 81163
- [browser-use](https://affpapa.org/en/nevibecode/mcp/browser-use.md) — MCP server · ★ 119231
- [Codebase Memory](https://affpapa.org/en/nevibecode/mcp/codebase-memory.md) — MCP server · ★ 47577
- [mcp-server](https://affpapa.org/en/nevibecode/mcp/mcp-server.md) — MCP server · ★ 43902

---
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
