waver-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| WAVE_MAX_ROWS | No | Deprecated fallback for WAVE_MCP_MAX_ROWS. WAVE_MCP_MAX_ROWS takes precedence when both are set. | 1000 |
| WAVE_MAX_FILES | No | Deprecated fallback for WAVE_MCP_MAX_FILES. WAVE_MCP_MAX_FILES takes precedence when both are set. | 4 |
| WAVE_MCP_MAX_ROWS | No | Default max_changes for the waver_values tool. Defaults to 1000. | 1000 |
| WAVE_MCP_MAX_FILES | No | Maximum number of open waveform files in the LRU cache. Defaults to 4. | 4 |
| WAVE_MAX_SEARCH_RESULTS | No | Deprecated fallback for WAVE_MCP_MAX_SEARCH_RESULTS. WAVE_MCP_MAX_SEARCH_RESULTS takes precedence when both are set. | 100 |
| WAVE_MCP_MAX_SEARCH_RESULTS | No | Default number of signal search results returned by waver_search. Defaults to 100. | 100 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| waver_openA | 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. |
| waver_searchA | Which signals are in this waveform file? Answers "what signals does this FST contain? is there a signal named
X?". Pass a case-insensitive substring of |
| waver_valuesA | 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. |
| waver_value_atA | 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. |
| waver_analyzeA | 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. |
| waver_latencyA | 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. |
| waver_findA | 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 |
| waver_plotA | 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. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 8 tools
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.
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.
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.
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.