visualizer-mcp
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 | |
uv | Installiert den Server via | |
Siemens Visualizer | Die Simulations-GUI, die der Server steuert |
|
Claude Code | Der KI-Assistent, der Tool-Aufrufe tätigt |
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-mcpWindows (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 listArbeitsverzeichnis. Standardmäßig sucht der Server nach der Verbindungsdatei von Visualizer (
.Visualizer/vccserver.cfg) relativ zu seinem eigenen Arbeitsverzeichnis, welches das Verzeichnis ist, aus dem Sieclaudegestartet haben. Starten Sie sowohl Visualizer als auch Claude Code aus demselben Simulationsverzeichnis, dann ist keine weitere Konfiguration erforderlich. Falls sie sich unterscheiden, setzen SieVCC_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:
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 Formport@hostname.Der Server öffnet einen TCP-Socket, sendet
vccRegisterClientund abonniert Benachrichtigungen fürvDesignStateChange,vTimeChangeundvHierarchyChange.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.
Asynchrone Signalbenachrichtigungen (z. B. Zeitänderungen, Design-Zustandsänderungen) kommen als unaufgeforderte Frames vom Typ
san und werden in einem Ringpuffer mit 256 Einträgen gespeichert, der übervcc_recent_signalslesbar ist.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 |
| Verbindung zu Visualizer herstellen (automatischer Start bei Bedarf). Idempotent. |
| Meldet das Vorhandensein der cfg-Datei, Host/Port und Verbindungsstatus. Verbindet nicht. |
| Sendet jeden Tcl-Befehl wortwörtlich — der vollständige Visualizer-Befehlssatz ist hier zugänglich. |
| Simulation vorantreiben: |
| Den Simulator um N Delta-Zyklen weiterschalten. |
| Gibt den aktuellen Laufstatus des Simulators zurück. |
| Gibt die aktuelle Simulationszeit zurück. |
| Fügt ein oder mehrere Signale über den hierarchischen Pfad zum Wellenfenster hinzu. |
| Erzwingt einen Wert für ein Signal, optional zu einer bestimmten Simulationszeit. |
| Liest den Wert eines Signals zur aktuellen oder einer angegebenen Simulationszeit. |
| Scannt ein Signal über einen Zeitbereich; optional Suche nach einem bestimmten Wert. |
| Gibt die neuesten asynchronen Signalbenachrichtigungen von Visualizer zurück. |
Umgebungsvariablen
Variable | Standard | Beschreibung |
| Server CWD | Verzeichnis, dessen |
| (nicht gesetzt) | Expliziter Pfad zur cfg-Datei; überschreibt die |
|
| Name, der mit |
|
| Binärdatei, die beim automatischen Starten von Visualizer verwendet wird. |
|
| Sekunden, die nach dem Starten von Visualizer auf die cfg-Datei gewartet wird. |
|
| 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-mcpBeispiel: 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.dorun.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
claudeGeben Sie innerhalb von Claude Code den folgenden Befehl ein, um zu bestätigen, dass der MCP-Server verbunden ist:
/mcpSie 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-MCP3. 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 0sSie 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 8sEinige 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.
Maintenance
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