Skip to main content
Glama
htminuslab

visualizer-mcp

by htminuslab

visualizer-mcp

visualizer-mcp ist ein Model Context Protocol (MCP)-Server, der KI-Assistenten über die TCP-Schnittstelle des Visualizer Command Channel (VCC) mit Siemens Questa Visualizer verbindet. Er ermöglicht es Claude Code, eine Live-Simulation mittels natürlicher Sprache zu steuern: Wellenformen öffnen, das Design ausführen, Signalwerte untersuchen und Signalverläufe über die Zeit hinweg durchsuchen. Visualizer ist bei allen Questa-Versionen außer OEM-Versionen enthalten(?).


Voraussetzungen

Werkzeug

Zweck

Hinweise

Python 3.10+

Führt den MCP-Server aus

python.org

uv

Installiert den Server via uvx (kein manuelles venv)

docs.astral.sh/uv

Siemens Visualizer

Die Simulations-GUI, die der Server steuert

visualizer muss im PATH sein

Claude Code

Der KI-Assistent, der Tool-Aufrufe tätigt

claude.ai/code

Hinweis: Andere LLMs sollten ebenfalls funktionieren, aber ich verwende Claude Code (Abonnement).


Installation

Linux

# 1. Install uv (skip if already installed)
curl -LsSf https://astral.sh/uv/install.sh | sh
source $HOME/.local/bin/env    # reload PATH

# 2. Register visualizer-mcp with Claude Code
claude mcp add visualizer -- \
  uvx --from git+https://github.com/htminuslab/visualizer-mcp visualizer-mcp

Windows (PowerShell)

# 1. Install uv (skip if already installed)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

# 2. Register visualizer-mcp with Claude Code
claude mcp add visualizer -- `
  uvx --from git+https://github.com/htminuslab/visualizer-mcp visualizer-mcp

Überprüfen Sie die Registrierung:

claude mcp list

Arbeitsverzeichnis. Standardmäßig sucht der Server nach der Verbindungsdatei von Visualizer (.Visualizer/vccserver.cfg) relativ zu seinem eigenen Arbeitsverzeichnis, welches das Verzeichnis ist, aus dem Sie claude gestartet haben. Starten Sie sowohl Visualizer als auch Claude Code aus demselben Simulationsverzeichnis, dann ist keine weitere Konfiguration erforderlich. Falls sie sich unterscheiden, setzen Sie VCC_WORK_DIR — siehe Umgebungsvariablen.


Funktionsweise

Claude Code ──stdio──► visualizer-mcp ──TCP──► Visualizer GUI
  (LLM host)   (MCP)   (this server)   (VCC)  (Siemens EDA)

Claude Code startet visualizer-mcp als untergeordneten Prozess über stdio (den Standard-MCP-Transport). Der Server hält eine dauerhafte TCP-Verbindung zum Visualizer Command Channel (VCC)-Server aufrecht, der automatisch innerhalb jeder Visualizer-Sitzung startet.

Verbindungssequenz:

  1. Beim ersten Tool-Aufruf liest der Server $VCC_WORK_DIR/.Visualizer/vccserver.cfg. Visualizer schreibt diese Datei beim Start; sie enthält den VCC-Host und Port in der Form port@hostname.

  2. Der Server öffnet einen TCP-Socket, sendet vccRegisterClient und abonniert Benachrichtigungen für vDesignStateChange, vTimeChange und vHierarchyChange.

  3. Jeder Tool-Aufruf kodiert einen Tcl-Befehl in einen VCC-Frame (10-Byte-Header + in geschweiften Klammern eingeschlossener Body), sendet ihn über den Socket und wartet auf den passenden Antwort-Frame. Frames werden den Aufrufern über eine aufsteigende Nachrichtennummer zugeordnet.

  4. Asynchrone Signalbenachrichtigungen (z. B. Zeitänderungen, Design-Zustandsänderungen) kommen als unaufgeforderte Frames vom Typ s an und werden in einem Ringpuffer mit 256 Einträgen gespeichert, der über vcc_recent_signals lesbar ist.

  5. Wenn Visualizer geschlossen wird und der Socket abbricht, verbindet sich der Server beim nächsten Tool-Aufruf neu (oder startet Visualizer automatisch).

Jeder Visualizer-Tcl-Befehl, der im Visualizer Debug Environment Command Reference Manual beschrieben ist — run, step, wave add, examine, force, env und Hunderte mehr — ist über den vcc_eval-Ausgang verfügbar.


MCP-Tools

Alle Tools geben bei Erfolg {"ok": true, "result": "..."} oder bei Fehler {"ok": false, "error": "..."} zurück.

Tool

Beschreibung

vcc_connect

Verbindung zu Visualizer herstellen (automatischer Start bei Bedarf). Idempotent.

vcc_status

Meldet das Vorhandensein der cfg-Datei, Host/Port und Verbindungsstatus. Verbindet nicht.

vcc_eval

Sendet jeden Tcl-Befehl wortwörtlich — der vollständige Visualizer-Befehlssatz ist hier zugänglich.

vcc_run

Simulation vorantreiben: "100ns", "8 us", "-all" oder weglassen für einen Standardschritt.

vcc_step

Den Simulator um N Delta-Zyklen weiterschalten.

vcc_run_status

Gibt den aktuellen Laufstatus des Simulators zurück.

vcc_get_time

Gibt die aktuelle Simulationszeit zurück.

vcc_wave_add

Fügt ein oder mehrere Signale über den hierarchischen Pfad zum Wellenfenster hinzu.

vcc_force

Erzwingt einen Wert für ein Signal, optional zu einer bestimmten Simulationszeit.

vcc_examine

Liest den Wert eines Signals zur aktuellen oder einer angegebenen Simulationszeit.

vcc_scan_signal

Scannt ein Signal über einen Zeitbereich; optional Suche nach einem bestimmten Wert.

vcc_recent_signals

Gibt die neuesten asynchronen Signalbenachrichtigungen von Visualizer zurück.


Umgebungsvariablen

Variable

Standard

Beschreibung

VCC_WORK_DIR

Server CWD

Verzeichnis, dessen .Visualizer/vccserver.cfg gelesen wird; auch das CWD beim automatischen Starten von Visualizer.

VCC_CFG_FILE

(nicht gesetzt)

Expliziter Pfad zur cfg-Datei; überschreibt die VCC_WORK_DIR-Suche. Spiegelt das -vccfile-Flag von Visualizer wider.

VCC_CLIENT_NAME

Claude-MCP

Name, der mit vccRegisterClient gesendet wird.

VCC_VISUALIZER_BIN

visualizer

Binärdatei, die beim automatischen Starten von Visualizer verwendet wird.

VCC_LAUNCH_TIMEOUT_S

60

Sekunden, die nach dem Starten von Visualizer auf die cfg-Datei gewartet wird.

VCC_CMD_TIMEOUT_S

30

Timeout pro Befehl in Sekunden.

Um eine Umgebungsvariable beim Registrieren des Servers zu setzen:

# Linux
claude mcp add visualizer \
  -e VCC_WORK_DIR=/path/to/sim \
  -- uvx --from git+https://github.com/htminuslab/visualizer-mcp visualizer-mcp

# Windows
claude mcp add visualizer `
  -e "VCC_WORK_DIR=C:\path\to\sim" `
  -- uvx --from git+https://github.com/htminuslab/visualizer-mcp visualizer-mcp

Beispiel: VHDL-Dividierer-Simulation

Das Verzeichnis vhdl_example/ enthält einen 32-Bit-Nicht-Restaurierungs-Ganzzahldividierer (div.vhd) und einen Testbench (div_tb.vhd). Der Testbench führt sowohl vorzeichenlose als auch vorzeichenbehaftete Divisionen über mehrere Operandenpaare aus. Diese Anleitung zeigt, wie man Claude Code verwendet, um das Design zu kompilieren, zu simulieren und abzufragen.

1. Visualizer starten

Öffnen Sie ein Terminal/CMD-Fenster, wechseln Sie zu vhdl_example/ und starten Sie Visualizer mit:

cd vhdl_example
visualizer -do run.do

run.do kompiliert die VHDL-Quellen, optimiert das Design zu div_tb_vopt und lädt es mit vsim -visualizer in den Simulator. Die Visualizer-GUI erscheint mit der Simulation, die bei Zeit 0 pausiert ist.

2. Claude Code starten und den MCP-Server verifizieren

Öffnen Sie ein neues Terminal im selben vhdl_example/-Verzeichnis und starten Sie Claude Code:

cd vhdl_example
claude

Geben Sie innerhalb von Claude Code den folgenden Befehl ein, um zu bestätigen, dass der MCP-Server verbunden ist:

/mcp

Sie sollten visualizer als verbundenen Server aufgelistet sehen. Sie können auch direkt Claude fragen:

Sind die Visualizer MCP-Tools verfügbar?

Claude wird dies bestätigen und die verfügbaren Tools auflisten.

Das Visualizer-Transkriptfenster sollte die VCC-Serververbindung auflisten:

# Loading std.standard
# Loading std.textio(body)
# Loading ieee.std_logic_1164(body)
# Loading ieee.numeric_std(body)
# Loading work.div_tb(rtl)#1

# 18:09:53: Loading design data...
# 18:09:53: Loaded  design units
# 18:09:53: Loaded  design hierarchy
# 1

# VCC server established connection with remote client: Claude-MCP

3. Wellenfenster öffnen und Testbench-Signale laden

Fragen Sie Claude:

Öffne das Wellenfenster und füge alle Testbench-Signale von div_tb hinzu

Claude ruft auf:

vcc_eval("view wave")
vcc_wave_add(["sim.div_tb.*"])

Alle Top-Level-Testbench-Signale (clk_s, reset_s, dividend_s, divisor_s, quotient_s, remainder_s, start_s, busy_s) erscheinen im Visualizer-Wellenfenster.

4. Simulation für 8 µs ausführen

Fragen Sie Claude:

Führe die Simulation für 8 Mikrosekunden aus

Claude ruft auf:

vcc_run("8 us")

Die Simulation schreitet bis 8 µs voran. Die Wellenformen in der Visualizer-GUI werden aktualisiert und zeigen alle vom Testbench durchgeführten Divisionsoperationen.

5. Ein Debugging-Beispiel

Fragen Sie Claude:

War remainder_s während der Simulation jemals gleich 23?

Claude antwortet mit:

  Called visualizer 16 times (ctrl+o to expand)

● Yes — remainder_s did equal 23 at some point during the simulation. Let me find the exact timestamp.

  Called visualizer (ctrl+o to expand)

● Yes, remainder_s equaled 23 during the simulation. It held that value continuously from 3890 ns to 5580 ns
  (about 1.69 µs), which corresponds to one of the division results being held stable while busy_s was
  asserted. The value then changed as the next operation completed.

✻ Churned for 1m 0s

Sie können die Untersuchung fortsetzen, indem Sie Claude fragen:

Kannst du bei Zeit 4651 ns bestätigen, dass der Wert von quotient_s und remainder_s für die gegebenen Eingangswerte von dividend_s und divider_s korrekt ist?

Claude antwortet mit:

● At 4651 ns the signal values are:

  ┌─────────────┬────────────┐
  │   Signal    │   Value    │
  ├─────────────┼────────────┤
  │ dividend_s  │ 23         │
  ├─────────────┼────────────┤
  │ divisor_s   │ 46         │
  ├─────────────┼────────────┤
  │ divsigned_s │ 1 (signed) │
  ├─────────────┼────────────┤
  │ quotient_s  │ 0          │
  ├─────────────┼────────────┤
  │ remainder_s │ 23         │
  └─────────────┴────────────┘

  Verification: 23 ÷ 46 = 0 remainder 23

  Check: (46 × 0) + 23 = 23 ✓

  Both outputs are correct. Since the dividend (23) is smaller than the divisor (46), the quotient is 0 and
  the full dividend value is returned as the remainder.

✻ Baked for 8s

Einige allgemeine Kommentare

  • Die Steuerung von Visualizer über eine Claude Code-Eingabeaufforderung ist langsam und nicht sehr (kosten-)effektiv, da einfache Befehle Token verbrauchen. Es ist offensichtlich einfacher, eine .do- oder qrun-Datei auszuführen. Der Grund für die Demo ist jedoch zu zeigen, was möglich ist; die LLM die Simulation steuern zu lassen und die Ergebnisse zu überprüfen, ist sehr interessant.

  • Der Großteil dieses Codes wurde von Claude Code 4.6 erstellt.

  • Siemens hat einen weitaus leistungsfähigeren Questa/Visualizer-MCP-Server namens Questa Agentic Toolkit.

Lizenz

Siehe die LICENSE-Datei für Details zu dieser Demo.

Hinweis

Alle hier verwendeten Logos, Marken und Grafiken sind Eigentum ihrer jeweiligen Inhaber.

Install Server
A
license - permissive license
A
quality
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/htminuslab/visualizer-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server