Skip to main content
Glama

vunit-mcp

MCP(stdio) 서버로, LLM/에이전트가 VUnit(HDL 단위 테스트) 프로젝트를 처음부터 끝까지 구동할 수 있게 합니다: 테스트 목록, 컴파일, 실행, 보고서 및 테스트별 로그까지 검사합니다.

VUnit에는 독립형 CLI가 없고 VUnit.main()은 sys.exit()를 호출하므로, 서버는 vunit을 프로세스 안에서 실행하지 않습니다 — 사람이 실행하는 방식과 똑같이 프로젝트 자체 run.py를 셸 명령으로 실행합니다. 의도적인 예외가 하나 있습니다: vunit_test_dependencies는 "이 테스트를 구현하려면 어떤 파일이 필요할까?"라는 질문에 답하기 위해 프로세스 내 프로젝트 모델을 구축합니다. vunit-hdl은 이 패키지의 필수 의존성이라서 임포트는 항상 가능합니다. 다만 여전히 지연 임포트되어 해당 도구가 호출될 때만 로드됩니다.

로고

후보 로고는 모두 공식 VUnit 배지(파란색 #0c479d, 흰색 링, 굵은 V)를 기반으로 합니다. SVG 원본은 logos/에 있고, PNG는 400×400 미리보기입니다.

stamp — 기울어진 MCP 고무 도장

chip — V가 AI 칩을 감싼 모양 별

robot — 구석에 있는 로봇 친구

wordmark — V 아래 MCP 텍스트

:--:

:--:

Related MCP server: squish-mcp

설정

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

구성(환경 변수)

변수

의미

기본값

VUNIT_MCP_PROJECT_DIR

run.py가 있는 디렉터리(모든 도구에 필요)

—

VUNIT_MCP_RUN_SCRIPT

프로젝트 디렉터리를 기준으로 한 실행 스크립트 경로

run.py

VUNIT_MCP_PYTHON

run.py를 실행하는 인터프리터(vunit-hdl과 시뮬레이터가 있어야 함; 기본값은 둘 다 있음)

서버 자체

VUNIT_MCP_SIMULATOR

VUNIT_SIMULATOR로 그대로 전달됨

VUnit 자동 감지

VUNIT_MCP_OUTPUT_DIR

기본 -o 출력 경로

<project>/vunit_out

VUNIT_MCP_TIMEOUT

실행/컴파일당 최대 시간(초)

600

VUNIT_MCP_EXTRA_ARGS

추가 run.py 인자(탈출구 역할)

미설정

VUNIT_MCP_FINGERPRINT_EXCLUDE

등록된 파일 중 내용 변경이 내보내기 캐시를 무효화하지 않게 할 파일들의 패턴 목록(파일 이름이나 프로젝트 상대 경로에 대한 fnmatch glob 또는 디렉터리 이름) — 생성되거나 휘발성이 있는 파일용이며, 추가/제거하면 여전히 무효화됨

미설정(모든 것 지문 인식)

MCP 클라이언트 구성(Claude Code)

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

또는 수동 테스트를 위해 MCP Inspector와 함께:

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

Skill

이 저장소에는 에이전트 스킬인 skills/vunit-mcp/SKILL.md이 포함되어 있습니다. 이 스킬은 LLM에게 도구를 언제, 어떻게 사용할지 알려줍니다: 어느 요청에 어느 도구가 답하는지, 워크플로 레시피("테스트 X가 왜 실패했나?" → vunit_get_test_log), lib.entity[.proc] 테스트 이름 형식, lib.entity[.proc] 설정 등을 다룹니다. 서버 옆에 설치하면 에이전트가 자동으로 사용합니다.

Claude Code

심볼릭 링크는 저장소 체크아웃을 단일 소스 오브 트루스로 유지합니다(정적 설치를 원하면 cp -r로 복사하세요):

# 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는 동일한 ~/.claude/skills/ 디렉터리에서 스킬을 불러옵니다:

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

도구

도구

시뮬 필요

설명

vunit_status

아니요

구성, vunit이 제대로 있는지, 시뮬레이터 가용성 — 가장 먼저 호출

vunit_list_tests

아니요

--list 를 통해 전체 테스트(lib.entity[.proc])

vunit_list_files

아니요

--files 를 통해 컴파일 순서의 소스 파일들

vunit_compile

예

모든 소스 컴파일(--compile)

vunit_run_tests

예

패턴, 스레드, clean 등의 테스트 실행; JUnit XML을 기록하고, 통과/실패 요약과 실패 테스트를 반환

vunit_get_report

아니요

마지막 실행의 JUnit XML을 재실행 없이 다시 읽음; 로그에서 도출한 테스트별 실패 검사 횟수

vunit_get_test_log

아니요

테스트별 output.txt — 테스트가 왜 실패했는지 확인하는 방법; 기본적으로 마지막 100줄(lines로 증가 가능), 그리고 실패 검사 줄이 로그에 있을 때 파싱된 "Check results" 섹션 추가

vunit_test_dependencies

아니요

하나의 테스트를 구현하는 데 필요한 소스 파일들의 순서 있는 목록(라이브러리별, 컴파일 순서, VUnit 내장은 요약); <project>/.vunit-mcp-cache에 프로젝트 모델 캐시

vunit_export_json

아니요

--export-json 으로 프로젝트 파일, 테스트, 속성; <project>/.vunit-mcp-cache/export.json으로 캐시, 프로젝트 소스 변경 시에만 재실행

내보내기 캐시

vunit_export_json와 vunit_test_dependencies는 호출할 때마다 run.py --export-json을 다시 실행하지 않습니다. 내보낸 모델은 해당 입력의 지문과 함께 <project>/.vunit-mcp-cache/export.json에 기록되며, 지문이 일치하는 동안에는 해당 파일을 서비스합니다. 캐시는 다음 경우에 무효화됩니다:

  • 등록된 소스 파일 중 하나라도 mtime 또는 크기가 변하거나 파일이 사라진 경우;

  • run.py 자체가 변경된 경우(파일을 추가/제거/이동하는 것을 포함);

  • VUNIT_MCP_PYTHON, VUNIT_MCP_SIMULATOR, 또는 VUNIT_MCP_EXTRA_ARGS가 변경된 경우.

VUNIT_MCP_FINGERPRINT_EXCLUDE와 일치하는 파일들(파일 이름이나 프로젝트 상대 경로에 대한 쉼표로 구분된 fnmatch globs, 또는 디렉터리 이름)은 첫 번째 규칙에서 제외됩니다. 해당 mtime/size를 추적하지 않으며, 이런 생성/휘발 파일의 재작성은 캐시를 churn하지 않도록 하기 위한 것입니다. 그래도 파일의 이름과 존재 여부는 추적되므로 어떤 파일을 추가하거나 제거하면 평소와 같이 무효화됩니다.

새 내보내기를 강제로 생성하려면 .vunit-mcp-cache/export.json을 삭제하세요. vunit_test_dependencies가 사용하는 인프로세스(프로세스 내부) 프로젝트 모델은 추가로 메모리에 캐시되며, 내보낸 내용을 키로 사용합니다.

내부 뼈대(scaffold)

일부 VUnit 질문은 프로젝트 자체 run.py CLI로는 대답할 수 없습니다 — 예: "이 테스트를 구현하려면 어떤 파일이 필요할까?". 이러한 경우 vunit-mcp는 캐시된 --export-json 모델로부터 프로세스 내 VUnit 프로젝트("the scaffold")를 구축합니다: 실제 VUnit 인스턴스에 프로젝트의 라이브러리와 소스 파일이 등록된 것입니다. 이 인스턴스는 VUnit의 내부 API를 호출할 때만 사용됩니다(현재는 vunit_test_dependencies가 get_implementation_subset을 호출하고, 향후 추가 내부 질의도 여기에 기반하게 됩니다).

이 스캐폴드는 절대 CLI로 실행되지 않습니다: 내보내기 모델은 사용자의 run.py 특정 사항(사용자 정의 옵션? 테스트 속성, 요구사항 …)을 모두 포함하지 않으므로, 컴파일이나 실행을 필요로 하는 것은 반드시 프로젝트 자체 run.py를 통해야 합니다. 프로세스 내 인스턴스는 project_model.InternalProject에 있고 메모리에 캐시되며, 스크래치 디렉터리로 <project>/.vunit-mcp-cache를 사용합니다 (VUnit이 날려버릴 프로젝트의 vunit_out은 절대 사용하지 않습니다).

로그 크기 정책

도구 출력은 LLM 친화적으로 유지하기 위해 의도적으로 한계가 있습니다 — 원시 로그는 전체가 절대 던져지지 않습니다:

  • vunit_get_test_log는 기본적으로 마지막 100줄을 반환하고 이를 명시합니다(예: "3421줄 중 마지막 100줄을 보여줍니다"); 더 필요하면 lines를 늘리세요. 명시적인 "full" 읽기도 ~24 KB(파일의 꼬리 부분)로 제한됩니다.

  • vunit_compile은 성공 시 마지막 10줄을, 실패 시 오류 줄 문맥(error/fatal/failure 줄 + 문맥 2줄)을 반환합니다.

  • 그 밖의 원시 출력 폴백(fail한 run.py, 파싱 불가한 출력)은 꼬리 부분을 남기면서 4 000자까지 잘라냅니다. 끝부분에 오류와 결과 줄이 있기 때문입니다.

  • vunit_run_tests / vunit_get_report는 원시 출력 대신 파싱된 JUnit 요약(개수 + 실패한 테스트 이름)을 반환합니다.

  • vunit_export_json은 8 000자 미만일 때만 JSON을 인라인합니다; 그 이상은 개수 + 파일/테스트 이름 목록을 반환합니다.

  • vunit_list_files / vunit_export_json은 프로젝트 파일만 나열합니다. VUnit의 내장(inner) 라이브러리 소스(설치된 패키지 파일)는 안정적이고 프로젝트의 일부가 아니므로 개수로만 요약됩니다.

개발

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/

Available Tools

9 tools
vunit_compileA
Idempotent

Compile all sources in the VUnit project (--compile). Requires a simulator. Safe to re-run.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark idempotentHint=true and readOnlyHint=false; the description adds the simulator requirement and the 'all sources' scope, but does not describe side effects on build artifacts or what happens if the simulator is unavailable. It aligns with idempotency rather than contradicting it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences carry the primary action, scope, prerequisite, and safety property with no filler. Useful information is front-loaded in the first sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless tool with an output schema and safety annotations, the description is largely sufficient. It could be stronger by placing the tool in the VUnit workflow (compile before run_tests) and by noting build-artifact side effects, but nothing essential is missing for invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and the schema documents 100% of them (none), so the description does not need parameter-level detail. Baseline for zero params applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the action ('Compile') and the exact scope ('all sources in the VUnit project'), and anchors it to the CLI flag --compile. This is clearly distinct from sibling tools such as list_files, run_tests, and status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear context and prerequisite: the command requires a simulator, and re-running is safe. It does not explicitly contrast with siblings or say when not to use it, but an agent can infer this is the build/pre-step versus run_tests.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vunit_export_jsonA
Read-only

Export the project model (source files, all tests, attributes) as JSON via --export-json. Attributes carry requirement/traceability data. The export is cached at .vunit-mcp-cache/export.json in the project and re-run only when the project's sources change. Does not require a simulator.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=true and openWorldHint=false. The description goes beyond this by revealing non-obvious behavior: the export is cached at .vunit-mcp-cache/export.json and re-run only when project sources change. It also discloses that no simulator is required. These are meaningful behavioral traits not captured in the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each earning its place: purpose and contents, attribute meaning, and caching/no-simulator behavior. There is no redundancy, fluff, or repetition of what the schema or annotations already convey.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only export tool with an output schema, the description is complete. It tells the agent what is exported, that the result is cached and when it is refreshed, and that no simulator is required. Nothing an agent needs to correctly invoke this tool is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the description carries no parameter semantics burden. Schema coverage is trivially complete. The baseline for a 0-parameter tool is 4, and the description appropriately omits parameter information that would be irrelevant.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Export the project model (source files, all tests, attributes) as JSON.' It enumerates what is included, mentions the exact CLI flag (--export-json), and even notes that attributes carry requirement/traceability data. This clearly distinguishes it from siblings like vunit_list_tests or vunit_list_files, which only cover subsets.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides useful context such as 'Does not require a simulator' and the caching re-run condition, which helps an agent understand when the tool is feasible. However, it never explicitly tells the agent when to choose this tool over alternatives like vunit_list_tests or vunit_list_files, nor names them. The usage guidance is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vunit_get_reportA
Read-only

Re-read the last run's JUnit report from the output dir (no re-run). Returns per-test status, with the number of failing VUnit checks per test when its log shows any. Pass a failing test name to vunit_get_test_log to see why it failed.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description reinforces this with 'no re-run' and 're-read', making the read-only nature explicit. It adds behavioral details beyond annotations: it reads from the output dir, returns per-test status, and conditionally includes failing-check counts. This is valuable context without contradicting the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, with the core action front-loaded in the first sentence. The second sentence adds return semantics and a cross-reference to a sibling tool. Every word earns its place; there is no redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter read-only tool with an output schema, the description fully covers what the agent needs to know: what it does, what it returns, and how to follow up on failures. The output schema explains return structure, so not describing it here is appropriate. Nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the description has no parameter meanings to add. Per the rubric, 0 params yields a baseline of 4, and the description appropriately focuses on the return value instead of inventing parameter details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states a specific verb and resource: 'Re-read the last run's JUnit report from the output dir'. The phrase 'no re-run' explicitly differentiates it from vunit_run_tests. It also specifies the return content (per-test status and failing checks), leaving no ambiguity about what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool (after a run, to inspect results without re-running) and points to the alternative vunit_get_test_log for deeper investigation of a specific failing test. While it doesn't explicitly say 'use this instead of X' for all siblings, the pointer to the log tool and the emphasis on no re-run give sufficient guidance for routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vunit_get_test_logA
Read-only

Get the log output for one test (the per-test output.txt), which is how you see WHY a test failed. test_name is the full name from vunit_list_tests / vunit_get_report. Returns the last 100 lines by default (failure info appears at the end); pass a larger lines for more context. When the log contains failing VUnit checks, a structured "Check results" section is appended after the log.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

While annotations mark readOnlyHint=true, the description adds valuable behavioral details: the tool returns the last 100 lines by default, failure info appears at the end, and a structured 'Check results' section is appended when failing checks are present. It also notes the size cap ('~24 KB max') via the parameter description, but the tool description itself conveys the relevant default behavior and appended section. No contradictions with annotations exist.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, each earning its place: purpose, parameter source, and behavior. It is front-loaded with the core purpose and avoids any fluff. Every sentence adds actionable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only log retrieval tool with one required parameter and an output schema, the description provides all necessary context: why to use it, how to specify the test, what the default output is, how to get more context, and when an extra structured section appears. Nothing critical is missing for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides descriptions for both parameters (lines and test_name), so the tool description does not need to repeat basic definitions. But it adds contextual meaning by linking test_name to sibling tools ('full name from vunit_list_tests / vunit_get_report') and explaining the rationale for the lines default (failure info at end). The 'Check results' detail is not in the schema, so the description compensates for any gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Get the log output for one test', a specific verb and resource, and immediately clarifies its purpose: 'which is how you see WHY a test failed.' This clearly distinguishes it from sibling tools like vunit_list_tests (lists tests) and vunit_get_report (report-level data), making the tool's role unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description tells the agent that test_name comes from vunit_list_tests / vunit_get_report, implying the caller should first obtain a test name from those tools. It also gives concrete usage guidance: the default 100 lines is enough for failure info, increasing lines gives more context. However, it does not explicitly name alternatives or when-not-to-use cases, so it stops short of a fully explicit usage policy.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vunit_list_filesA
Read-only

List all source files in compile order. Does not require a simulator.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description adds non-obvious behavioral context: the listing is in compile order and needs no simulator. This goes beyond the schema and annotations, though it doesn't detail output format or failure modes; given the output schema and read-only annotation, this is sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no filler. The core function is stated first, followed by a useful environment note; every word adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless read-only tool with an output schema, the description covers what the tool does and a key environmental constraint (no simulator needed). Nothing required to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the empty schema fully documents the interface. The baseline for 0 parameters is 4; there is no parameter information the description would need to compensate for.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and identifies the resource ('all source files') plus an ordering property ('in compile order'). It clearly differentiates from the sibling vunit_list_tests, which lists tests rather than source files.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Does not require a simulator' gives useful usage context, indicating the tool works without simulator setup. However, it does not explicitly contrast this tool with alternatives like vunit_list_tests or vunit_compile, so when-to-use guidance remains implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vunit_list_testsA
Read-only

List all test cases (lib.entity[.proc]) the project knows about. Does not require a simulator.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already flags this as a safe read operation. The description adds value by specifying the output format (lib.entity[.proc]) and the notable behavior that a simulator is not required, which is not captured in annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no fluff. It front-loads the core action and resource, then adds the format and simulator requirement efficiently. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, read-only, zero-parameter tool with an output schema present, the description provides all necessary information: what it lists, in what format, and under what conditions (no simulator). Nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the schema leaves nothing undocumented. The description's mention of the test case format adds context that complements the empty parameter list, satisfying the baseline for no-parameter tools.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'List' with a clear resource 'all test cases' and defines the format (lib.entity[.proc]). This unambiguously distinguishes it from sibling tools like vunit_list_files and vunit_status, which serve different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clarifies that this tool lists tests the project knows about and explicitly notes that it does not require a simulator. This provides clear context for when it is applicable, though it does not explicitly compare against alternatives or state when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vunit_run_testsA

Run VUnit tests and return a pass/fail summary plus the list of failing tests. Patterns default to ['*'] (run everything). A JUnit XML is always written next to the output dir for vunit_get_report. Requires a simulator.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are sparse (readOnlyHint=false, openWorldHint=false), so the description carries the transparency burden. It discloses the always-written JUnit XML, the pattern default, and the simulator requirement—useful behavioral facts. However, it omits other side effects like filesystem changes or potential long-running execution.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no redundancy: the first states the core action and result, the second explains the default patterns, and the third notes the JUnit XML location and simulator requirement. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite many parameters, the description covers the essential operation, its output, a key artifact, and a prerequisite. The output schema exists, so return-value details are handled. A minor gap is not mentioning the compile prerequisite, but the sibling vunit_compile makes that obvious.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Top-level schema description coverage is 0%, so the description must compensate for parameter guidance. It mentions only the test_patterns default and leaves the other eight parameters to the nested schema. This is insufficient given the low coverage signal.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear verb+resource: 'Run VUnit tests', and specifies the outputs: a pass/fail summary and the list of failing tests. It also distinguishes itself from the sibling vunit_get_report by noting the JUnit XML is written for that tool, making the purpose unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides practical context: default test patterns ('*' runs everything), a prerequisite ('Requires a simulator'), and a pointer to vunit_get_report for the report artifact. It does not explicitly state when not to use it, but the 'for vunit_get_report' hint implies the companion flow.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vunit_statusA
Read-only

Report server configuration: project dir, run script, interpreter, VUnit version, and whether a simulator appears available. Call this first when diagnosing setup problems.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description reinforces this by saying 'Report' rather than implying mutation. It adds useful context by stating what configuration items are inspected and candidly notes that simulator availability is only 'appears available,' setting proper expectations about the check's certainty.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. The first sentence front-loads the tool's exact purpose and report contents, while the second gives a clear usage directive. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is complete for a zero-parameter status tool. It covers what the tool reports, when to call it, and the tentative nature of the simulator-availability check. The presence of an output schema means return-value details do not need to be in the description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and an empty input schema, so there are no parameter semantics to explain. This matches the baseline for no-parameter tools; the description focuses on output content rather than input handling, which is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Report' and identifies a clear resource: server configuration. It enumerates the exact content (project dir, run script, interpreter, VUnit version, simulator availability), making the tool's purpose unambiguous and distinct from sibling tools that list tests, compile, run, or fetch reports.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The instruction 'Call this first when diagnosing setup problems' explicitly states when to invoke the tool. It also implies a sequencing role relative to the sibling tools, providing clear usage guidance without needing to mention every alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vunit_test_dependenciesA
Read-only

Return the ordered list of source files needed to implement one test case: the files it depends on to elaborate, grouped by library in compile order (VUnit built-in files summarized as a count). Does not compile and needs no simulator.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already signal read-only behavior; the description adds useful non-obvious details: no compilation occurs, no simulator is needed, and VUnit built-in files are summarized as a count rather than fully enumerated. There is no contradiction with the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences: the first front-loads the returned data and its ordering/grouping, and the second gives the key no-side-effect constraint. Every sentence earns its place with no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter, read-only dependency query, the description plus schema fully covers what is returned, how it is grouped/ordered, and the fact that no compile or simulator is required. The output schema also exists, so return-value documentation beyond this is not necessary.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description says 'one test case' but does not explain how test_name selects it or how wildcard patterns behave. The input schema's test_name description already covers full names, wildcards, and ambiguous matches, so the main description provides only marginal semantic addition.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a precise verb and resource: returning the ordered source-file dependency list for one test case, grouped by library in compile order. It also clearly separates this from compile/run tools by noting it does not compile and needs no simulator.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description frames this as a lightweight dependency/elaboration inspection tool and explicitly states no compile or simulator is required, which helps the agent choose it for static dependency questions. It does not name sibling alternatives or give explicit when-not-to-use conditions, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 9 tool updatesv0.1.0
    • First observedvunit_compile
    • First observedvunit_export_json
    • First observedvunit_get_report
    • First observedvunit_get_test_log
    • First observedvunit_list_files
    • First observedvunit_list_tests
    • First observedvunit_run_tests
    • First observedvunit_status
    • First observedvunit_test_dependencies

TDQS

A4.4/5.0

Scored across 9 tools

Disambiguation5/5

Each tool targets a distinct concern: configuration health, test listing, file listing, compilation, running, report retrieval, per-test logs, JSON export, and dependency resolution. There is no meaningful overlap even between get_report and get_test_log because one is the aggregate results summary and the other is the raw output for a single test.

Naming Consistency4/5

All tools share the vunit_ prefix and mostly follow a verb_noun pattern (list_tests, list_files, run_tests, get_report, get_test_log, export_json). Minor deviations like vunit_status and vunit_compile are still readable and do not create confusion.

Tool Count5/5

Nine tools is well-scoped for a VUnit test project workflow. Each tool covers a distinct step from inspection and compilation through running tests and debugging failures, and none feels redundant or extraneous.

Completeness5/5

The tool set covers the full practical VUnit workflow: diagnosing setup, discovering tests and files, compiling, running, retrieving aggregate results, inspecting per-test logs, exporting project data, and tracing test dependencies. There are no obvious dead ends that would prevent an agent from completing a typical build-and-debug cycle.

Maintenance

ActivityActive
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides LLM clients a safe, structured interface to Intel Quartus Prime 25.1 FPGA flows, enabling linting, simulation, and asynchronous compilation with results returned as concise JSON.
    GPL 3.0
  • A
    license
    A
    quality
    B
    maintenance
    Enables AI coding agents and IDEs to lint, compile, syntax-check, and simulate Verilog/SystemVerilog designs through structured, token-efficient MCP tools with isolated containerized toolchains.
    4
    12 npm
    Apache 2.0