Skip to main content
Glama

waver-mcp

FST 파형 파일을 측정하는 MCP 서버 — 단순히 읽기만 하는 것이 아닙니다.

다른 파형 MCP가 LLM에게 원시 변경 테이블을 넘겨주고 사이클 계산과 산술을 맡기는 반면, waver-mcp는 질문에 직접 답합니다: 클록 주기 / 듀티 / 주파수, X/Z 시간, A→B 지연 통계, "신호가 V와 같았던 때" (문자열, enum, X/Z 버스 포함), 그리고 모델이 실제로 볼 수 있는 PNG 플롯. 시간은 시간 테이블의 인덱스가 아니라 "10ns"로 주소를 지정합니다.

읽기 전용, 헤드리스, 상태 비저장: 모든 도구는 파형 파일 경로를 받으며 "현재 파일"이 없습니다. pywellen (Rust wellen 리더) 기반으로, 실제로 쿼리하는 신호만 파일에서 디코딩됩니다.

실제 동작

waver_analyze — "이 클록의 주파수는 얼마인가?":

file:     /path/to/all_types.fst
signal:   tb_wave.clk  (matched 'clk')
window:   [0ns, 995ns)
changes:  200
clock:
  duty:     49.75% high, 50.25% low
  high pulse: 5ns
  low pulse:  5ns
  period:   10ns (median of 99 cycles, min 10ns, max 10ns)
  frequency: 100MHz

waver_find — "FSM이 RUN 상태인 때는 언제인가?":

file:     /path/to/all_types.fst
signal:   tb_wave.state  (matched 'state')
value:    "run"
matches:  33 (showing 5)
  5ns  held for 10ns
  35ns  held for 10ns
  65ns  held for 10ns
  95ns  held for 10ns
  125ns  held for 10ns
truncated after 5 — narrow with start='...' or raise limit

waver_latency — "클록 에지에서 상태 변경까지 얼마나 걸리는가?":

file:     /path/to/all_types.fst
a:        tb_wave.clk (20 edges)
b:        tb_wave.state (11 edges)
window:   [0ns, 100ns)
pairs:    20 (each a edge -> first b edge at/after it)
min:      0ns
max:      5ns
mean:     2.25ns
p50:      0ns
stddev:   2.49ns

출력은 의도적으로 LLM에 자기 설명적입니다: 파일/신호/윈도우 헤더, 다음 단계를 알려주는 잘림 알림, 올바른 형제 도구로 안내하는 오류. waver_plot은 추가로 PNG를 MCP 이미지 콘텐츠로 반환하므로, 비전 클라이언트는 파형을 인라인으로 볼 수 있습니다.

Related MCP server: wavekit-mcp

도구

모든 waver_*, 모두 읽기 전용:

도구

답변

waver_open

이 파일에 무엇이 있는가? (형식, 작성자, 시간 스케일, 지속 시간, 신호 수). 새 파일에 대해 먼저 호출하세요.

waver_search

어떤 신호가 있는가? (real / string / 64b 태그가 있는 전체 이름; 부분 문자열 pattern)

waver_values

이 신호가 이 윈도우에서 어떤 값을 가졌는가? (변경 목록 + 진입 값)

waver_value_at

시간 T에서 X는 무엇이었는가? (일괄: 여러 신호, 한 번의 호출)

waver_analyze

얼마나 빠른가 / 얼마나 오래 / 얼마나 많은가? (주기, 듀티, 펄스 폭, X/Z 시간, 실수 최소/최대/평균, 상위 10개 값 분포)

waver_latency

A의 에지에서 B의 에지까지 얼마나 걸리는가? (최소/최대/평균/p50/표준편차 + 첫/마지막 쌍)

waver_find

신호가 V와 같았던 때는 언제인가? (지속 시간이 있는 유지 구간; 문자열/enum 대소문자 무시, "x"/"z" = 전체 폭 버스)

waver_plot

보여줘. (PNG, 신호당 하나의 레인, X/Z 구간 음영, ~10k 포인트/트레이스로 데시메이션)

설치

uvx를 통한 제로 설치 — git에서 격리된 환경을 빌드합니다 (아직 PyPI 릴리스 없음; 게시되면 일반 uvx waver-mcp로 작동):

uvx --from "git+https://github.com/ru551n/waver-mcp.git" waver-mcp
# shorthand (single entry point, so uvx infers the command):
uvx "git+https://github.com/ru551n/waver-mcp.git"

MCP 클라이언트 구성 (stdio; 모든 MCP 클라이언트와 작동):

{
  "mcpServers": {
    "waver": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/ru551n/waver-mcp.git", "waver-mcp"]
    }
  }
}

체크아웃에서 실행하려면 대신:

{
  "mcpServers": {
    "waver": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/waver-mcp", "waver-mcp"]
    }
  }
}

또는 도구를 영구적으로 설치:

uv tool install "waver-mcp @ git+https://github.com/ru551n/waver-mcp.git"

그런 다음 클라이언트 구성에서 "command": "waver-mcp"를 사용하세요.

구성 (서버 시작 시 환경 변수)

변수

의미

기본값

WAVE_MAX_ROWS

waver_values의 기본 max_changes

1000

WAVE_MAX_FILES

열린 파형 파일의 LRU

4

WAVE_MAX_SEARCH_RESULTS

waver_search의 기본 신호 목록 크기

100

시간 및 신호 이름

  • 시간"10ns", "1.5us", "2ms" (fs / ps / ns / us / µs / ms / s, 대소문자 무시), 또는 파일의 시간 틱 단위의 정수 (waver_open이 보고하는 시간 스케일 참조). 윈도우는 [start, end); end를 생략하면 파일 끝 또는 신호의 마지막 변경까지 실행됩니다.

  • 신호 이름 — 대소문자 무시 전체 이름, 또는 고유한 점으로 구분된 접미사: clktb.dut.clk와 일치합니다 (결과가 이를 알려줍니다). 일치는 구성 요소 정렬이므로 clktb.clk_buf와 일치하지 않습니다.

  • — 정수는 10진수 또는 0x… (≥ 32비트 신호는 16진수로 표시), 대소문자 무시 문자열/enum, 논리 벡터의 전체 X / 전체 Z는 "x" / "z".

성능

측정 레이어는 벡터화되어 있습니다 (각 신호의 압축된 변경 목록에 대한 numpy); 신호는 첫 사용 시 디코딩되고 열린 파일당 캐시됩니다. 저장소의 ~40만 변경 벤치 픽스처 (tools/bench.py)에서:

작업

시간

콜드 오픈

~5 ms

waver_values (10 ns 윈도우)

~0.5 ms

waver_analyze (전체 파일)

~4 ms

waver_plot (전체 파일, 1 트레이스)

~140 ms

CI는 Linux에서 예산을 적용합니다 (콜드 오픈 < 100 ms, 웜 값 < 20 ms, 웜 분석 < 50 ms) 옵트인 성능 게이트 테스트 (pytest -m perf)를 통해.

에이전트 스킬

skills/waver-mcp/SKILL.md는 에이전트에게 서버를 언제 어떻게 사용할지 가르칩니다: 질문 중심의 도구 테이블, 워크플로 (VUnit 실패 에스컬레이션 포함 — vunit_get_test_logvunit_get_test_waveformwaver_openwaver_find / waver_analyzewaver_plot), 그리고 명시적인 사용/사용 금지 정책 (waver-mcp는 읽기 전용: 시뮬레이션을 실행하거나 다시 실행할 수 없습니다).

요구 사항

  • Python >= 3.10 (CPython; pywellen에는 Windows 휠이 없으므로 Windows는 지원되지 않음)

  • FST 파일 (예: nvc -r --wave=out.fst에서)

개발

uv sync
uv run ruff format .
uv run ruff check .
uv run mypy src
uv run pytest -q                 # perf-gate tests are opt-in
uv run pytest -q -m perf         # perf budgets on the ~400k-change fixture
uv run python tools/bench.py tests/fixtures/bench.fst clk

테스트 픽스처 (FST 파일 + VHDL 소스)는 tests/fixtures/에 있습니다.

라이선스

MIT — LICENSE 참조.

Available Tools

8 tools
waver_analyzeA
Read-only

How fast, how long, how much is this signal?

Answers "what's the period / frequency / duty cycle of ?", "how much time is in X/Z?", "what's the min/max/mean of this real?", "which values does take and how often?". This is the statistics tool: it summarizes a window instead of listing changes. Times are human-readable ('10ns') or integer ticks; the window is [start, end) — omit end to run to the signal's last change. For a raw change list use waver_values; for edge-to-edge timing between two signals use waver_latency.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNo
fileYes
startNo0
signalYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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

The readOnlyHint annotation already marks this as safe, and the description adds meaningful behavioral context: the window is [start, end), omitting end runs to the signal's last change, times accept human-readable strings or integer ticks, and the tool produces a summary rather than a list of changes. None of this contradicts 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 front-loaded with a memorable question, then moves from purpose to window semantics to alternatives. Each sentence adds information and the inline examples compress a lot of meaning without bloating the text.

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?

With an output schema present, the return-value details are already covered. The description supplies everything else needed to call the tool correctly: what it computes, how the window works, accepted time formats, and which sibling tools to choose instead. There are no material gaps for an agent selecting or invoking this tool.

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?

Schema description coverage is 0%, so the description carries the burden. It fully explains the start/end semantics including inclusivity, the time formats, and the meaning of signal via repeated '<signal>' examples. The only gap is that the required 'file' parameter is never directly mentioned, though it is fairly inferable from the waveform-analysis context.

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 specific verb and resource: it summarizes a signal window with statistics, and enumerates concrete questions it answers (period, frequency, duty cycle, min/max/mean, value distribution). It also explicitly differentiates itself from waver_values and waver_latency, so an agent can tell it apart from siblings without opening schemas.

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?

It clearly explains when to use this tool ('summarizes a window instead of listing changes') and names alternatives with their conditions: use waver_values for a raw change list and waver_latency for edge-to-edge timing. This gives an agent actionable selection criteria rather than leaving inference to chance.

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

waver_findA
Read-only

When was the signal equal to this value?

Answers "when did become ?", "when is the bus in X?", "when does the FSM enter ?". Int signals take decimal or hex ('0x1f'); string/enum signals match case-insensitively; on logic vectors 'x' or 'z' matches an all-X/all-Z bus. Returns each interval the value is held, with its duration, from start onwards. For a single time point use waver_value_at; for statistics use waver_analyze.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYes
limitNo
startNo0
valueYes
signalYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/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 useful behavioral detail: case-insensitive string matching, all-X/all-Z bus matching, and interval/duration output from start onwards. It does not disclose that `limit` can cap the returned intervals, so it is not fully transparent.

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 compact and front-loaded with concrete question examples, then adds necessary type-matching rules and routing guidance. There is no filler or redundant restatement of the schema.

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?

With an output schema present, return values do not need to be spelled out, and readOnly annotation covers safety. The main missing context is `limit` semantics and a bit more clarity around `file`, but an agent can still reasonably determine how to invoke the tool.

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?

Schema description coverage is 0%, so the description must compensate. It thoroughly explains `value` and partially `start` and `signal`, but `file` is not described and `limit` is never mentioned despite defaulting to 100 and affecting how many intervals are returned. This is a meaningful gap.

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 specific operation: find intervals where a signal equals a given value, and immediately gives concrete question forms. It also distinguishes the tool from waver_value_at, making its purpose easy to separate from siblings.

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?

It explicitly names alternatives: waver_value_at for a single time point and waver_analyze for statistics. It also gives practical matching rules for ints, strings/enums, and logic vectors, so an agent knows when and how the tool applies.

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

waver_latencyA
Read-only

How long from A's edge to B's edge?

Answers "what's the propagation delay from to ?", "how long after 's rising edge does rise?". For every edge of A in [start, end) it finds the first edge of B at or after that moment and reports min/max/mean/p50/stddev over all such pairs, plus the first and last pairs. edge='rise' needs both signals to be binary (0/1); use edge='any' for any change. Times are human-readable or ticks. For one signal's own timing use waver_analyze.

ParametersJSON Schema
NameRequiredDescriptionDefault
aYes
bYes
endNo
edgeNorise
fileYes
startNo0

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, it discloses the half-open [start, end) range, the pairing rule (first B edge at or after each A edge), and the exact statistics returned (min/max/mean/p50/stddev plus first/last pairs). It also warns about the binary-signal requirement for rising-edge mode, an otherwise unstated failure condition.

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?

Five short sentences deliver the metric, algorithm, output statistics, edge-mode caveat, time format, and sibling alternative without wasted words. The definition is front-loaded with the core question and then adds necessary detail.

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?

With an output schema present, the description covers the remaining needed guidance: selection criteria, algorithm, statistical outputs, constraints, and when to use an alternative. The unstated file semantics are a minor shared convention and do not block correct 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?

Schema description coverage is 0%, so the description must supply meaning for a, b, edge, start, and end; it does, including time formats and edge-mode constraints. However, the file parameter is left implicit and the meaning of null end is not stated, so it does not fully compensate for all six parameters.

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 opening question and restatement define the exact metric: propagation delay from an edge of signal A to the corresponding edge of signal B. It also distinguishes itself from waver_analyze by explicitly noting that the sibling is for one signal's own timing.

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?

It lists the natural-language queries this tool answers and explicitly routes single-signal timing questions to waver_analyze. It also gives conditional guidance for edge='rise' (binary signals only) vs edge='any' (any change), telling the agent when each mode is appropriate.

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

waver_openA
Read-only

What is in this waveform file?

Answers "what's in this FST? how long did the simulation run? what's the timescale?". Call it first for any file you have not inspected yet; the timescale and duration it reports frame every window you pass to the other waver_* tools. Use waver_search to list the individual signals.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYes

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 mark this as read-only. The description adds sequencing and contextual behavior: it is a first-step inspection call whose reported timescale/duration affect subsequent waver_* windows. It does not fully detail state/error behavior, but the read-only annotation lowers the burden.

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

Conciseness4/5

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

The description is short and front-loaded with the core purpose, followed by usage guidance and a sibling pointer. The opening rhetorical question is slightly redundant with the next sentence, but the overall structure is efficient.

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 simple one-parameter read-only tool with an output schema, the description is largely complete: it covers what the tool does, when to invoke it, and how it relates to sibling tools. It leaves out explicit file-format constraints, though this is a minor gap.

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 single required 'file' parameter has 0% schema description coverage, so the description must compensate. It adds that the file is a waveform file and gives FST as an example, but it does not clarify path expectations, accepted formats beyond FST, or how the parameter relates to the reported duration/timescale.

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?

Description clearly identifies waver_open as the tool that opens/inspects an unexamined waveform file and reports contents, simulation duration, and timescale. It also distinguishes itself from waver_search, which lists individual signals, so an agent can tell it apart without inspecting schemas.

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?

States an explicit precondition: call it first for any file not yet inspected. It explains that the resulting timescale and duration frame every window passed to other waver_* tools, and points to waver_search as the alternative for listing signals.

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

waver_plotA
Read-only

Show me the waveforms: a PNG plot of these signals in this window.

Answers "show me <signal(s)> around time A" / "what does the bus look like here?". One lane per signal: binary signals step between 0 and 1, small numeric signals draw as a line, and wide buses plus string/enum signals show their held values as text labels with X/Z spans shaded. Times are human-readable ('10ns', '1.5us') or integer file ticks; the window is [start, end) — omit end to run to the end of the file. Dense signals are decimated to ~10000 points so large files stay fast. Returns the plot as an image plus a text summary; the PNG is also written to a temp file whose path is in the summary. For statistics use waver_analyze; for exact values use waver_values.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNo
fileYes
startNo0
signalsYes

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, and the description adds substantial behavioral detail: lane rendering for different signal types, X/Z shading, decimation to ~10000 points, and the fact that the PNG is written to a temp file whose path appears in the summary. This exceeds what annotations alone provide and helps an agent predict the tool's output format and side effects.

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 dense but every sentence carries useful information: intended use, rendering behavior, time format, decimation, return payload, and alternatives. It is well front-loaded with the core purpose and avoids filler.

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?

Given the absence of an output schema, the description explains the return value (image plus summary with temp-file path) and the decimation behavior. It covers the main parameter semantics, usage conditions, and sibling-tool differentiation well enough that an agent can correctly select and invoke the tool.

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?

Schema description coverage is 0%, so the description must compensate. It adds valuable meaning for start/end (human-readable or integer ticks, half-open interval) and signal rendering behavior. However, it does not explicitly describe the `file` parameter or the exact signal naming syntax, though these are partially inferable from context.

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 concrete verb and resource: it plots signals as a PNG in a specified window. It also answers natural-language queries and describes per-signal rendering rules, making the tool's function unambiguous and distinguishable from waver_analyze and waver_values.

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?

It explicitly states when to use the tool ('show me <signal(s)> around time A'), and gives alternatives for statistics and exact values ('For statistics use waver_analyze; for exact values use waver_values'). It also clarifies window semantics and the effect of omitting end, leaving no ambiguity about invocation conditions.

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

waver_value_atA
Read-only

What were these signals at this exact time?

Answers "what was at 10ns?" (batch: pass several signals in one call). Returns the value held at that instant (the last change at or before the time). Time is human-readable ('10ns') or integer file ticks. If the time is past the end of the file, the last recorded value is returned and flagged. For a whole window of changes, use waver_values.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYes
timeYes
signalsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, the description discloses important behavioral details: it returns the last change at or before the time, accepts human-readable or tick times, and handles past-end time by returning the last recorded value with a flag. These boundary behaviors are genuinely useful and not inferable from the schema. No contradiction with 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 opens with a clarifying question, then packs key usage details, parameter semantics, edge-case behavior, and the sibling alternative into a compact block. Every sentence adds information; there is 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 read-only point-query tool with an output schema and readOnlyHint, the description covers the core semantics, time formats, edge-case behavior, and the relevant alternative. Nothing essential for selecting and invoking the tool is missing, and the output schema handles return-value details.

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?

With 0% schema description coverage, the description compensates by explaining 'time' in detail (human-readable vs integer file ticks) and clarifying that 'signals' supports multiple signals in one call. The 'file' parameter is not elaborated, but its meaning as the waveform file is reasonably inferable from the tool family context. Significant value added over the bare schema.

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 gives a precise question form ('what was <signal> at 10ns?') and states the exact resource and behavior: returning the value held at that instant. It also differentiates itself from waver_values by explicitly saying waver_values covers a whole window of changes. This is a specific, non-tautological definition.

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?

It clearly identifies when to use this tool ('Answers what was <signal> at time X') and explicitly directs to waver_values for a whole window of changes, naming the alternative. Batch usage is also explained. This gives an agent actionable selection guidance beyond the tool name.

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

waver_valuesA
Read-only

What values did this signal have in this time window?

Answers "what did do between A and B?". Times are human-readable ('10ns', '1.5us') or integer file ticks; the window is [start, end) — omit end to run to the signal's last change. Wide (>= 32 bit) values are shown in hex; X/Z samples and enum/ string values are kept as-is. For statistics instead of a change list, use waver_analyze; for one time point, waver_value_at.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNo
fileYes
startNo0
signalYes
max_changesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only convey read-only safety, so the description carries the burden of behavioral disclosure. It explains the half-open interval, optional end, human-readable time parsing, hex representation for wide values, and preservation of X/Z/enum/string values. This is rich, non-obvious behavior beyond the structured fields.

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

Conciseness4/5

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

The description is dense, well-organized, and front-loaded with the core purpose. The only flaw is minor redundancy: the opening question 'What values did this signal have...' is immediately restated as 'Answers "what did <signal> do between A and B?"'. All later sentences add distinct 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?

Given the output schema exists, return-format details are not required. The description covers the key invocation semantics: time parsing, interval bounds, optional end, value formatting edge cases, and routing to sibling tools. An agent has enough context to call the tool correctly, including sensible handling of defaults like start=0 and max_changes=1000.

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?

With 0% schema description coverage, the description compensates well for start and end: it defines accepted time formats, window inclusivity, and optional end. However, max_changes is not explained beyond its title, and file/signal are left to inference, though those are largely self-evident from the tool's purpose.

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 clear verb and resource: it retrieves signal values over a time window, answering 'what did <signal> do between A and B?'. It also distinguishes itself from siblings by pointing to waver_analyze for statistics and waver_value_at for a single time point.

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?

It explicitly names alternatives and the conditions that select them: 'For statistics instead of a change list, use waver_analyze; for one time point, waver_value_at.' It also gives concrete usage rules: time formats are human-readable or integer file ticks, the window is [start, end), and omitting end runs to the last change.

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

TDQS

A4.7/5.0
Disambiguation5/5

Each tool targets a clearly distinct operation: open inspects file metadata, search lists signals, values returns change lists, value_at samples a single instant, analyze computes statistics, latency measures edge-to-edge delays, find locates value-held intervals, and plot renders visual waveforms. The descriptions cross-reference each other, making selection unambiguous.

Naming Consistency5/5

All tools share the waver_ prefix and use lowercase snake_case with a descriptive suffix. Even though suffixes mix verbs (open, search, analyze, find, plot) and nouns (values, value_at, latency), the pattern is predictable and uniformly applied, creating a cohesive naming scheme.

Tool Count5/5

Eight tools is well-scoped for a waveform inspection server: each tool covers a distinct mode of interaction with waveform data, from metadata discovery to detailed querying and visualization. There is no redundancy and no sense that tools were added without purpose.

Completeness5/5

The surface covers the full waveform analysis workflow: open the file, find signals, query values over time or at instants, compute statistics, measure delays, locate specific values, and generate plots. No significant gaps are apparent for the stated domain of FST file inspection and analysis.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables analysis of RTL waveform files (VCD, FST) through WAL (Waveform Analysis Language). Supports signal inspection, transition extraction, and advanced waveform queries for hardware design verification.
    14
    BSD 3-Clause
  • F
    license
    Not graded
    quality
    B
    maintenance
    An MCP server that provides AI assistants with a persistent, sandboxed Python environment for waveform analysis, enabling loading and manipulation of VCD/FST/FSDB files and temporal pattern matching.
    9
  • A
    license
    Not graded
    quality
    C
    maintenance
    An MCP server for reading and querying FSDB waveform files, enabling AI assistants to browse hierarchy, search signals, and extract waveform data with value changes.
    13
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables AI assistants to analyze hardware simulation VCD waveforms and GTKWave save files, providing access to signal values, bus definitions, and groupings without loading entire files.
    5
    MIT

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/waver-mcp'

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