Skip to main content
Glama

vunit-mcp

MCP-(stdio)-Server, mit dem ein LLM/Agent ein VUnit-Projekt (HDL-Unit-Tests) durchgängig steuern kann: Tests auflisten, kompilieren, ausführen und Berichte sowie Logs pro Test einsehen.

VUnit hat keine eigenständige CLI und VUnit.main() ruft sys.exit() auf. Der Server führt VUnit also nicht im eigenen Prozess aus – er stößt das projekteigene run.py als externen Prozess an, genau so, wie es auch ein Mensch täte. Eine bewusste Ausnahme: vunit_test_dependencies erstellt ein In-Process-Projektmodell, um die Frage „Welche Dateien brauche ich, um diesen Test zu implementieren?“ zu beantworten. vunit-hdl ist eine feste Abhängigkeit dieses Pakets, daher ist der Import immer verfügbar; importiert wird es trotzdem lazy, nur wenn dieses Werkzeug aufgerufen wird.

Kandidatenlogos, alle auf dem offiziellen VUnit-Badge basierend (blau #0c479d, weißer Ring, kräftiges V). Die SVG-Quellen liegen in logos/; PNGs sind 400×400-Vorschauen.

stamp – abgewinkelter MCP-Stempel

chip – das V umschließt einen KI-Chip

robot – ein Roboter-Kumpel in der Ecke

wordmark – V mit MCP-Schriftzug darunter

:--:

:--:

Related MCP server: Lupa MCP Server

Einrichtung

uv venv .venv
uv pip install -e .            # installs vunit-mcp + mcp + pydantic + vunit-hdl
# compile/run also need a simulator, in the env that runs run.py
# (default: this same venv):
uv pip install ghdl

Konfiguration (Umgebungsvariablen)

Variable

Bedeutung

Standard

VUNIT_MCP_PROJECT_DIR

Verzeichnis mit run.py (von allen Werkzeugen benötigt)

VUNIT_MCP_RUN_SCRIPT

Pfad des Startskripts relativ zum Projektverzeichnis

run.py

VUNIT_MCP_PYTHON

Interpreter, der run.py ausführt (muss vunit-hdl und einen Simulator enthalten; der eigene des Servers hat beides)

der eigene des Servers

VUNIT_MCP_SIMULATOR

wird als VUNIT_SIMULATOR durchgereicht

VUnit-Autoerkennung

VUNIT_MCP_OUTPUT_DIR

Standard-Ausgabepfad für -o

<project>/vunit_out

VUNIT_MCP_TIMEOUT

maximale Sekunden pro Lauf/Kompilierung

600

VUNIT_MCP_EXTRA_ARGS

zusätzliche run.py-Argumente (Ausweichmöglichkeit)

nicht gesetzt

VUNIT_MCP_FINGERPRINT_EXCLUDE

mit Komma getrennte Muster (fnmatch-Globs auf Dateiname, projektrelativen Pfad oder Verzeichnisnamen) registrierter Dateien, deren Inhaltsänderung den Export-Cache nicht ungültig machen darf – für generierte/volatile Dateien; Hinzufügen oder Entfernen macht ihn weiterhin ungültig

nicht gesetzt (Fingerprint für alles)

MCP-Client-Konfiguration (Claude Code)

{
  "mcpServers": {
    "vunit": {
      "command": "/home/sebbe/git/vunit-mcp/.venv/bin/vunit-mcp",
      "env": {
        "VUNIT_MCP_PROJECT_DIR": "/path/to/your/vunit/project"
      }
    }
  }
}

Oder mit MCP Inspector für manuelle Tests:

VUNIT_MCP_PROJECT_DIR=/path/to/project npx @modelcontextprotocol/inspector \
  /home/sebbe/git/vunit-mcp/.venv/bin/python -m vunit_mcp

Skill

Dieses Repo enthält einen Agenten-Skill, skills/vunit-mcp/SKILL.md, der dem LLM erklärt, wann und wie die Werkzeuge eingesetzt werden: welches Werkzeug welche Anfrage beantwortet, Workflow-Rezepte („Warum ist Test X fehlgeschlagen?“ → vunit_get_test_log), das Testname-Format lib.entity[.fix] und die VUNIT_MCP_*-Konfiguration. Installiere ihn direkt daneben, damit ihn der Agent automatisch findet.

Claude Code

Symlinks halten den Repo-Checkout als alleinige maßgebliche Quelle (mit cp -r kopieren, falls eine statische Installation bevorzugt wird):

# personal — available in every project
ln -s /path/to/vunit-mcp/skills/vunit-mcp ~/.claude/skills/vunit-mcp

# or project-local — available only in that project
mkdir -p <your-project>/.claude/skills
ln -s /path/to/vunit-mcp/skills/vunit-mcp <your-project>/.claude/skills/vunit-mcp

Maki

Maki lädt Skills aus demselben Verzeichnis ~/.claude/skills/:

ln -s /path/to/vunit-mcp/skills/vunit-mcp ~/.claude/skills/vunit-mcp

Werkzeuge

Werkzeug

Simulator nötig

Beschreibung

vunit_status

nein

Konfiguration, VUnit-Version, Simulatorverfügbarkeit – zuerst aufrufen

vunit_list_tests

nein

alle Tests (lib.entity[.proc]) über --list

vunit_list_files

nein

Quelldateien in Kompilierungsreihenfolge über --files

vunit_compile

ja

alle Quellen kompilieren (--compile)

vunit_run_tests

ja

Tests ausführen (Muster, threads, „clean“, …); schreibt VUnit-XML; gibt Zusammenfassung bestanden/fehlgeschlagen und die fehlgeschlagenen Tests zurück

vunit_get_report

nein

JUnit-XML des letzten Laufs erneut lesen, ohne erneuten Lauf; Anzahl der fehlgeschlagenen Prüfungen pro Test, abgeleitet aus den Logs

vunit_get_test_log

nein

output.txt des Tests – da sieht man, warum ein Test fehlgeschlagen ist; standardmäßig die letzten 100 Zeilen (lines erhöhen), plus einen geparsten Abschnitt „Check-Ergebnisse“, wenn das Log Zeilen mit fehlgeschlagenen Prüfungen enthält

vunit_test_dependencies

nein

geordnete Liste der Quelldateien, die zur Implementierung eines Tests benötigt werden (gruppiert nach Bibliothek, in Kompilierungsreihenfolge; VUnit-Built-ins zusammengefasst); speichert ein Projektmodell in <project>/.vunit-mcp-cache

vunit_export_json

nein

Projektdateien, Tests und Attribute über --export-json; in <project>/.vunit-mcp-cache/export.json zwischengespeichert und nur neu ausgeführt, wenn sich die Projektquellen ändern

Export-Cache

vunit_export_json und vunit_test_dependencies führen bei jedem Aufruf nicht erneut run.py --export-json aus: Das exportierte Modell wird samt Fingerprint seiner Eingaben nach <project>/.vunit-mcp-cache/export.json geschrieben und wird solange aus dieser Datei geliefert, wie der Fingerprint passt. Der Cache wird ungültig, wenn:

  • sich Änderung der mtage oder Größe einer registrierten Quelldatei ändert oder die Datei verschwindet;

  • sich run.py selbst ändert (umfasst Hinzufügen/Entfernen/Verschieben von Dateien);

  • sich VUNIT_MCP_PYTHON, VUNIT_MCP_SIMULATOR oder VUNIT_MCP_EXTRA_ARGS ändern.

Dateien, die zu VUNIT_MCP_FINGERPRINT_EXCLUDE passen (dk kommssparierte fnmatch-Globs auf Dateinamen, projektrelative Pfade oder Verzeichnisnamen), sind von der ersten Regel ausgenommen – ihr mtime bzw. ihre Größe wird nicht mitverfolgt, gedacht für generierte oder flüchtige Dateien, deren Neuschreiben den Cache sonst ständig ungültig machen würde. Name und Existenz werden weiterhin mitverfolgt, daher macht das Hinzufügen oder Entfernen den Cache wie gewohnt ungültig.

Um einen frischen Export zu erzwingen, lösche .vunit-mcp-cache/export.json. Das In-Process-Projektmodell von vunit_test_dependencies wird zusätzlich im Speicher gecacht, mit dem Exportinhalt als Schlüssel.

Internes Grundgerüst

Einige VUnit-Fragen lassen sich nicht über den eigenen run.py-CLI des Projekts beantworten – etwa „Welche Dateien brauche ich, um diesen Test zu implementieren?“. Dafür baut vunit-mcp aus dem gecachten --export-json-Modell ein In-Process-VUnit-Projekt („das Grundgerüst“) Psychology auf: eine echte VUnit-Instanz with registrierten Bibliotheken und Quelldateien des Projekts ist, die ausschließlich dazu dient, die interne API von VUnit aufzurufen (heute get_implementation_subset über vunit_test_dependencies; weitere interne Abfragen werden darauf aufbauen).

Das Grundgerüst wird nie über die CLI ausgeführt: Das Exportmodell enthielt nicht alle run.py-Besonderheiten des Benutzers (benutzerdefinierte Optionen, Testattribute, Anforderungen, …), also muss alles, was kompiliert oder läuft, durch das projekteigene run.py laufen. Die In-Process-Instanz lebt in project_model.InternalProject, wird pro Exportinhalt im Speicher gecacht und verwendet <project>/.vunit-mcp-cache als Scratch-Verzeichnis (niemals das vunit_out des Projekts, das VUnit löschen würde).

Begrenzung der Loggröße

Die Ausgabe der Werkzeuge ist bewusst begrenzt, damit sie LLM-freundlich bleibt – Roh-Logs werden niemals vollständig ausgegeben:

  • vunit_get_test_log liefert standardmäßig die letzten 100 Zeilen und weist darauf hin (z. B. „showing last 100 of 3421 lines“); lines erhöhen, um mehr zu erhalten. Auch ein explizites „vollständiges“ Lesen bleibt auf etwa 2 KB (am Ende) gedeckelt.

  • vunit_compile liefert bei Erfolg die letzten 10 Zeilen und bei Misserfolg einen Auszug der Fehlerzeilen (Fehler-/Fatal-/Failure-Zeilen plus 2 Kontextzeilen).

  • Alle anderen Fallbacks auf Rohausgaben (fehlgeschlagenes run.py, unparsebare Ausgabe) werden am Ende auf 4 000 Zeichen gekürzt, damit das Ende erhalten bleibt, wo Fehler- und Ergebniszeilen liegen.

  • vunit_run_tests / vunit_get_report liefern die geparste JUnit-Zusammenfassung (Anzahlen und Namen der fehlgeschlagenen Tests) statt der Rohausgabe.

  • vunit_export_json gibt das JSON nur unterhalb von 8 000 Zeichen aus; darüber enthält die Ausgabe Zählungen und Listen der Datei-/Testnamen.

  • vunit_list_files / vunit_export_json listen nur Projektdateien auf; eingebettete VUnit-Quellbibliotheken (installierte Paketdateien) werden als Anzahl zusammengefasst, da sie stabil und nicht Teil des Projekts sind.

Entwicklung

uv pip install -e ".[dev]"
uv run pytest tests/          # pure parsers — no simulator required
uv run ruff check src/ tests/
uv run mypy src/vunit_mcp/
Install Server
A
license - permissive license
A
quality
B
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.

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to drive Xilinx Vivado, Intel Quartus, and Anlogic TangDynasty for FPGA development, including project creation, synthesis, implementation, timing closure, and hardware programming through natural language.
    MIT

View all related MCP servers

Related MCP Connectors

  • Operate Linux, macOS and Windows from your LLM. Every action runs through an auditable allowlist.

  • Project management MCP for AI agents with safe task reads and writes.

  • Cross-agent artifact workspace with provenance across Claude Code, Codex, Cursor, LangGraph.

View all MCP Connectors

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/ru551n/vunit-mcp'

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