Skip to main content
Glama
htminuslab

visualizer-mcp

by htminuslab

visualizer-mcp

visualizer-mcp es un servidor del Protocolo de Contexto de Modelo (MCP) que conecta asistentes de IA a Siemens Questa Visualizer a través de la interfaz TCP del Canal de Comandos de Visualizer (VCC). Permite que Claude Code controle una simulación en vivo mediante lenguaje natural: abrir formas de onda, ejecutar el diseño, examinar valores de señales y buscar historiales de señales a lo largo del tiempo. Visualizer se suministra con todas las versiones de Questa excepto las versiones OEM(?).


Requisitos previos

Herramienta

Propósito

Notas

Python 3.10+

Ejecuta el servidor MCP

python.org

uv

Instala el servidor mediante uvx (sin venv manual)

docs.astral.sh/uv

Siemens Visualizer

La GUI de simulación que controla el servidor

visualizer debe estar en el PATH

Claude Code

El asistente de IA que realiza las llamadas a herramientas

claude.ai/code

Nota: otros LLM deberían funcionar también, pero estoy usando Claude Code (suscripción).


Instalación

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

Verifique el registro:

claude mcp list

Directorio de trabajo. Por defecto, el servidor busca el archivo de conexión de Visualizer (.Visualizer/vccserver.cfg) en relación con su propio directorio de trabajo, que es el directorio desde el cual lanzó claude. Inicie tanto Visualizer como Claude Code desde el mismo directorio de simulación y no se necesitará ninguna configuración adicional. Si difieren, establezca VCC_WORK_DIR — vea Variables de entorno.


Cómo funciona

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

Claude Code lanza visualizer-mcp como un proceso hijo a través de stdio (el transporte MCP estándar). El servidor mantiene una conexión TCP persistente con el servidor del Canal de Comandos de Visualizer (VCC), que se inicia automáticamente dentro de cada sesión de Visualizer.

Secuencia de conexión:

  1. En la primera llamada a la herramienta, el servidor lee $VCC_WORK_DIR/.Visualizer/vccserver.cfg. Visualizer escribe este archivo al iniciarse; contiene el host y puerto VCC en el formato port@hostname.

  2. El servidor abre un socket TCP, envía vccRegisterClient y se suscribe a las notificaciones vDesignStateChange, vTimeChange y vHierarchyChange.

  3. Cada llamada a la herramienta codifica un comando Tcl en una trama VCC (encabezado de 10 bytes + cuerpo delimitado por llaves), lo envía a través del socket y espera la trama de respuesta correspondiente. Las tramas se emparejan con los llamadores mediante un número de mensaje incremental.

  4. Las notificaciones de señales asíncronas (p. ej., cambios de tiempo, cambios de estado del diseño) llegan como tramas de tipo s no solicitadas y se almacenan en un búfer circular de 256 entradas, legible a través de vcc_recent_signals.

  5. Si Visualizer se cierra y el socket se cae, el servidor se reconecta (o inicia automáticamente Visualizer) en la siguiente llamada a la herramienta.

Cada comando Tcl de Visualizer descrito en el Manual de referencia de comandos del entorno de depuración de Visualizerrun, step, wave add, examine, force, env y cientos más — está disponible a través de la puerta de escape vcc_eval.


Herramientas MCP

Todas las herramientas devuelven {"ok": true, "result": "..."} en caso de éxito o {"ok": false, "error": "..."} en caso de error.

Herramienta

Descripción

vcc_connect

Conectar a Visualizer (inicia automáticamente si es necesario). Idempotente.

vcc_status

Informa de la presencia del archivo cfg, host/puerto y estado de la conexión. No conecta.

vcc_eval

Envía cualquier comando Tcl literalmente: el conjunto completo de comandos de Visualizer es accesible aquí.

vcc_run

Avanza la simulación: "100ns", "8 us", "-all", o se omite para un paso predeterminado.

vcc_step

Ejecuta el simulador paso a paso N ciclos delta.

vcc_run_status

Devuelve el estado de ejecución actual del simulador.

vcc_get_time

Devuelve el tiempo de simulación actual.

vcc_wave_add

Añade una o más señales a la ventana de ondas mediante ruta jerárquica.

vcc_force

Fuerza una señal a un valor, opcionalmente en un tiempo de simulación específico.

vcc_examine

Lee el valor de una señal en el tiempo de simulación actual o especificado.

vcc_scan_signal

Escanea una señal en un rango de tiempo; opcionalmente busca un valor específico.

vcc_recent_signals

Devuelve las notificaciones de señales asíncronas más recientes de Visualizer.


Variables de entorno

Variable

Predeterminado

Descripción

VCC_WORK_DIR

CWD del servidor

Directorio cuyo .Visualizer/vccserver.cfg se lee; también el CWD al iniciar automáticamente Visualizer.

VCC_CFG_FILE

(sin establecer)

Ruta explícita al archivo cfg; anula la búsqueda de VCC_WORK_DIR. Refleja la bandera -vccfile de Visualizer.

VCC_CLIENT_NAME

Claude-MCP

Nombre enviado con vccRegisterClient.

VCC_VISUALIZER_BIN

visualizer

Binario utilizado al iniciar automáticamente Visualizer.

VCC_LAUNCH_TIMEOUT_S

60

Segundos a esperar por el archivo cfg después de generar Visualizer.

VCC_CMD_TIMEOUT_S

30

Tiempo de espera por comando en segundos.

Para establecer una variable de entorno al registrar el servidor:

# 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

Ejemplo: Simulación de divisor VHDL

El directorio vhdl_example/ contiene un divisor de enteros sin restauración de 32 bits (div.vhd) y un banco de pruebas (div_tb.vhd). El banco de pruebas ejercita la división tanto sin signo como con signo a través de varios pares de operandos. Este recorrido muestra cómo usar Claude Code para compilar, simular e interrogar el diseño.

1. Iniciar Visualizer

Abra una terminal/símbolo del sistema, cambie a vhdl_example/ e inicie Visualizer con:

cd vhdl_example
visualizer -do run.do

run.do compila las fuentes VHDL, optimiza el diseño a div_tb_vopt y lo carga en el simulador con vsim -visualizer. La GUI de Visualizer aparece con la simulación pausada en el tiempo 0.

2. Iniciar Claude Code y verificar el servidor MCP

Abra una nueva terminal en el mismo directorio vhdl_example/ e inicie Claude Code:

cd vhdl_example
claude

Dentro de Claude Code, escriba el siguiente comando para confirmar que el servidor MCP está conectado:

/mcp

Debería ver visualizer listado como un servidor conectado. También puede preguntar directamente a Claude:

¿Están disponibles las herramientas MCP de Visualizer?

Claude confirmará y listará las herramientas disponibles.

La ventana de transcripción de Visualizer debería listar la conexión del servidor VCC:

# 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. Abrir la ventana de ondas y cargar las señales del banco de pruebas

Pregunte a Claude:

Abre la ventana de ondas y añade todas las señales del banco de pruebas desde div_tb

Claude llama a:

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

Todas las señales del banco de pruebas de nivel superior (clk_s, reset_s, dividend_s, divisor_s, quotient_s, remainder_s, start_s, busy_s) aparecen en la ventana de ondas de Visualizer.

4. Ejecutar la simulación durante 8 µs

Pregunte a Claude:

Ejecuta la simulación durante 8 microsegundos

Claude llama a:

vcc_run("8 us")

La simulación avanza a 8 µs. Las formas de onda se actualizan en la GUI de Visualizer, mostrando todas las operaciones de división realizadas por el banco de pruebas.

5. Algún ejemplo de depuración

Pregunte a Claude:

¿Alguna vez remainder_s fue igual a 23 durante la simulación?

Claude responde con:

  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

Puede continuar la investigación preguntando a Claude:

en el tiempo 4651 ns, ¿puedes confirmar si el valor de quotient_s y remainder_s son correctos para los valores de entrada dados en dividend_s y divider_s?

Claude responde con:

● 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

Algunos comentarios generales

  • Controlar Visualizer desde un prompt de Claude Code es lento y no muy efectivo (en términos de costo), ya que los comandos simples consumirán tokens. Obviamente es más fácil ejecutar un archivo .do o qrun. Sin embargo, la razón de la demostración es mostrar lo que es posible; dejar que el LLM controle la simulación y verificar los resultados es muy interesante.

  • La mayor parte de este código fue creado por Claude Code 4.6

  • Siemens tiene un servidor MCP de Questa/Visualizer mucho más capaz llamado Questa Agentic Toolkit.

Licencia

Consulte el archivo LICENSE para obtener detalles sobre esta demostración.

Aviso

Todos los logotipos, marcas comerciales y gráficos utilizados en este documento son propiedad de sus respectivos dueños.

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