visualizer-mcp
visualizer-mcp
visualizer-mcp — это сервер Model Context Protocol (MCP), который подключает ИИ-ассистентов к Siemens Questa Visualizer через TCP-интерфейс Visualizer Command Channel (VCC). Он позволяет Claude Code управлять симуляцией в реальном времени с помощью естественного языка: открывать временные диаграммы, запускать проект, проверять значения сигналов и искать историю сигналов во времени. Visualizer поставляется со всеми версиями Questa, кроме OEM-версий(?).
Предварительные требования
Инструмент | Назначение | Примечания |
Python 3.10+ | Запуск MCP-сервера | |
uv | Установка сервера через | |
Siemens Visualizer | GUI симуляции, которым управляет сервер |
|
Claude Code | ИИ-ассистент, выполняющий вызовы инструментов |
Примечание: другие LLM также должны работать, но я использую Claude Code (по подписке).
Установка
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Проверьте регистрацию:
claude mcp listРабочая директория. По умолчанию сервер ищет файл подключения Visualizer (
.Visualizer/vccserver.cfg) относительно своей рабочей директории, которая является директорией, из которой вы запустилиclaude. Запускайте и Visualizer, и Claude Code из одной и той же директории симуляции, и дополнительная настройка не потребуется. Если они различаются, установитеVCC_WORK_DIR— см. Переменные окружения.
Как это работает
Claude Code ──stdio──► visualizer-mcp ──TCP──► Visualizer GUI
(LLM host) (MCP) (this server) (VCC) (Siemens EDA)Claude Code запускает visualizer-mcp как дочерний процесс через stdio (стандартный транспорт MCP). Сервер поддерживает одно постоянное TCP-соединение с сервером Visualizer Command Channel (VCC), который запускается автоматически внутри каждого сеанса Visualizer.
Последовательность подключения:
При первом вызове инструмента сервер считывает
$VCC_WORK_DIR/.Visualizer/vccserver.cfg. Visualizer записывает этот файл при запуске; он содержит хост и порт VCC в форматеport@hostname.Сервер открывает TCP-сокет, отправляет
vccRegisterClientи подписывается на уведомленияvDesignStateChange,vTimeChangeиvHierarchyChange.Каждый вызов инструмента кодирует команду Tcl в кадр VCC (10-байтовый заголовок + тело, ограниченное фигурными скобками), отправляет его через сокет и ожидает соответствующий кадр ответа. Кадры сопоставляются с вызывающими объектами по инкрементному номеру сообщения.
Асинхронные уведомления о сигналах (например, изменения времени, изменения состояния проекта) поступают как нежелательные кадры типа
sи сохраняются в кольцевом буфере на 256 записей, доступном черезvcc_recent_signals.Если Visualizer закрывается и сокет разрывается, сервер переподключается (или автоматически запускает Visualizer) при следующем вызове инструмента.
Каждая команда Tcl Visualizer, описанная в Visualizer Debug Environment Command Reference Manual — run, step, wave add, examine, force, env и сотни других — доступна через «черный ход» vcc_eval.
Инструменты MCP
Все инструменты возвращают {"ok": true, "result": "..."} в случае успеха или {"ok": false, "error": "..."} в случае ошибки.
Инструмент | Описание |
| Подключение к Visualizer (автозапуск при необходимости). Идемпотентно. |
| Отчет о наличии файла конфигурации, хосте/порте и состоянии подключения. Не подключается. |
| Отправка любой команды Tcl дословно — здесь доступен полный набор команд Visualizer. |
| Продвижение симуляции: |
| Пошаговое выполнение симулятора на N дельта-циклов. |
| Возврат текущего состояния выполнения симулятора. |
| Возврат текущего времени симуляции. |
| Добавление одного или нескольких сигналов в окно временных диаграмм по иерархическому пути. |
| Принудительная установка значения сигнала, опционально в определенное время симуляции. |
| Чтение значения сигнала в текущее или указанное время симуляции. |
| Сканирование сигнала в диапазоне времени; опционально поиск конкретного значения. |
| Возврат самых последних асинхронных уведомлений о сигналах от Visualizer. |
Переменные окружения
Переменная | По умолчанию | Описание |
| CWD сервера | Директория, чей |
| (не задано) | Явный путь к файлу конфигурации; переопределяет поиск |
|
| Имя, отправляемое с |
|
| Бинарный файл, используемый при автозапуске Visualizer. |
|
| Секунды ожидания файла конфигурации после запуска Visualizer. |
|
| Тайм-аут для каждой команды в секундах. |
Чтобы установить переменную окружения при регистрации сервера:
# 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Пример: симуляция делителя VHDL
Директория vhdl_example/ содержит 32-битный невосстанавливающий целочисленный делитель (div.vhd) и тестовый стенд (div_tb.vhd). Тестовый стенд проверяет как беззнаковое, так и знаковое деление для нескольких пар операндов. Это пошаговое руководство показывает, как использовать Claude Code для компиляции, симуляции и исследования проекта.
1. Запуск Visualizer
Откройте терминал/командную строку, перейдите в vhdl_example/ и запустите Visualizer с помощью:
cd vhdl_example
visualizer -do run.dorun.do компилирует исходные коды VHDL, оптимизирует проект до div_tb_vopt и загружает его в симулятор с помощью vsim -visualizer. Появится графический интерфейс Visualizer с симуляцией, приостановленной на времени 0.
2. Запуск Claude Code и проверка MCP-сервера
Откройте новый терминал в той же директории vhdl_example/ и запустите Claude Code:
cd vhdl_example
claudeВнутри Claude Code введите следующую команду, чтобы подтвердить, что MCP-сервер подключен:
/mcpВы должны увидеть visualizer в списке подключенных серверов. Вы также можете спросить Claude напрямую:
Доступны ли инструменты Visualizer MCP?
Claude подтвердит и перечислит доступные инструменты.
В окне транскрипта Visualizer должно быть указано подключение сервера 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. Открытие окна временных диаграмм и загрузка сигналов тестового стенда
Спросите Claude:
Открой окно временных диаграмм и добавь все сигналы тестового стенда из div_tb
Claude вызывает:
vcc_eval("view wave")
vcc_wave_add(["sim.div_tb.*"])Все сигналы тестового стенда верхнего уровня (clk_s, reset_s, dividend_s, divisor_s, quotient_s, remainder_s, start_s, busy_s) появятся в окне временных диаграмм Visualizer.
4. Запуск симуляции на 8 мкс
Спросите Claude:
Запусти симуляцию на 8 микросекунд
Claude вызывает:
vcc_run("8 us")Симуляция продвигается до 8 мкс. Временные диаграммы обновляются в графическом интерфейсе Visualizer, показывая все операции деления, выполненные тестовым стендом.
5. Пример отладки
Спросите Claude:
Равнялся ли remainder_s когда-нибудь 23 во время симуляции?
Claude отвечает:
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Вы можете продолжить исследование, спросив Claude:
в момент времени 4651 нс можешь ли ты подтвердить, что значения quotient_s и remainder_s верны для заданных входных значений dividend_s и divider_s?
Claude отвечает:
● 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Некоторые общие комментарии
Управление Visualizer из командной строки Claude Code происходит медленно и не очень эффективно (с точки зрения затрат), так как простые команды потребляют токены. Очевидно, проще запустить файл .do или qrun. Однако цель этой демонстрации — показать, что возможно, и позволить LLM управлять симуляцией и проверять результаты — это очень интересно.
Большая часть этого кода была создана Claude Code 4.6
У Siemens есть гораздо более мощный MCP-сервер для Questa/Visualizer под названием Questa Agentic Toolkit.
Лицензия
Подробности см. в файле LICENSE для этой демонстрации.
Уведомление
Все логотипы, товарные знаки и графические изображения, используемые здесь, являются собственностью их соответствующих владельцев.
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