visualizer-mcp
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 | |
uv | Instala el servidor mediante | |
Siemens Visualizer | La GUI de simulación que controla el servidor |
|
Claude Code | El asistente de IA que realiza las llamadas a herramientas |
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-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-mcpVerifique el registro:
claude mcp listDirectorio 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, establezcaVCC_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:
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 formatoport@hostname.El servidor abre un socket TCP, envía
vccRegisterClienty se suscribe a las notificacionesvDesignStateChange,vTimeChangeyvHierarchyChange.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.
Las notificaciones de señales asíncronas (p. ej., cambios de tiempo, cambios de estado del diseño) llegan como tramas de tipo
sno solicitadas y se almacenan en un búfer circular de 256 entradas, legible a través devcc_recent_signals.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 Visualizer — run, 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 |
| Conectar a Visualizer (inicia automáticamente si es necesario). Idempotente. |
| Informa de la presencia del archivo cfg, host/puerto y estado de la conexión. No conecta. |
| Envía cualquier comando Tcl literalmente: el conjunto completo de comandos de Visualizer es accesible aquí. |
| Avanza la simulación: |
| Ejecuta el simulador paso a paso N ciclos delta. |
| Devuelve el estado de ejecución actual del simulador. |
| Devuelve el tiempo de simulación actual. |
| Añade una o más señales a la ventana de ondas mediante ruta jerárquica. |
| Fuerza una señal a un valor, opcionalmente en un tiempo de simulación específico. |
| Lee el valor de una señal en el tiempo de simulación actual o especificado. |
| Escanea una señal en un rango de tiempo; opcionalmente busca un valor específico. |
| Devuelve las notificaciones de señales asíncronas más recientes de Visualizer. |
Variables de entorno
Variable | Predeterminado | Descripción |
| CWD del servidor | Directorio cuyo |
| (sin establecer) | Ruta explícita al archivo cfg; anula la búsqueda de |
|
| Nombre enviado con |
|
| Binario utilizado al iniciar automáticamente Visualizer. |
|
| Segundos a esperar por el archivo cfg después de generar Visualizer. |
|
| 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-mcpEjemplo: 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.dorun.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
claudeDentro de Claude Code, escriba el siguiente comando para confirmar que el servidor MCP está conectado:
/mcpDeberí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-MCP3. 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 0sPuede 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 8sAlgunos 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.
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