Releases: Tencent/wave-mcp
Release list
v0.2.6
wave-mcp v0.2.6
0.2.6 修好了两件影响面最大的事:从 PyPI 安装的用户终于能用 FSDB,viewer 和
分析工具对写错的参数给出明确指示,而不是假装功能不可用。
修复
- 从 PyPI 安装后 FSDB 不可用的问题修好了。 FSDB 支持从 0.2.0 起就写在
文档里,但它依赖的 fsdb2fst 转换器需要在本地按需编译,而转换器源码和构建
脚本一直没进包,pip 用户的自动构建没有任何东西可编,实际用不了。现在
third_party/fsdb2fst/的源码和deploy/build_fsdb2fst.sh随 wheel 和
sdist 一起分发,配好VERDI_HOME后首次转换自动编译(约十几秒),之后走
缓存。离线包同样带源码。 - viewer 参数写错现在有明确报错。 以前
cursor: {"time_units": 1}这类
写法会得到一句含义模糊的available: false,看起来像服务坏了;现在是
status: error加error_type: invalid_argument,带上出错的参数名、
修正建议(did_you_mean)和正确写法示例。available: false只保留给
功能确实不可用的场景(缺资产、surver 起不来)。 - 时间格式严格校验。 时间必须是整数加可选单位(
"1523400"、
"1523400ps"),后缀与单位冲突、未知单位、小数都会直接报错;以前会被
静默丢弃,视图打开后既没有光标也没有提示。 - 命令生成失败不再静默。 打开或更新视图时若有命令没能生成,返回值里带
warnings列表说明丢了什么、为什么。 - 打开失败不再泄漏 surver 进程,surver 启动失败时把它的 stderr 最后几行
带回错误信息里。 - 空值与极端时间不再破坏 guard 判定。 时间超出波形最后一次跳变时 FST
取值为空,分支 guard 会崩溃或给出错误结论;现在空值按未知处理,判定保持
不确定,active_drivers继续可用。超出 64 位 FST 范围的时间返回结构化
错误,不再是裸OverflowError。
变更
signal_fanin返回边界网络的直接对端。 对没有模块内扇入记录的边界
网络(结构体端口、聚合总线、子模块输出),以前会挑任意一个对端往下钻几层,
结果既与signal_connectivity的层次不一致,也漏掉其他分支。现在直接模式
返回全部直接相连的对端端口,transitive: true展开每个对端背后的锥;
fan_in成为connectivity的严格子集。需要源码位置的场景继续用
signal_drivers。
下载
- 主包(PyPI):
pip install wave-mcp==0.2.6,或下载下方的 wheel 与 sdist。 - 离线包两档:
glibc2.28与glibc2.17(CentOS 7 等老机器)。自带独立
Python 与全部依赖,目标机解包跑install.sh即可,不联网、不编译。
注意离线包不含 viewer 资产,需要波形查看的用户按下方说明另装。 - viewer 资产
0.25.6.post1:修复了 0.25.6 漏发内嵌字体许可文本的问题
(OFL-1.1、Ubuntu font、Hack 等五份文本现随包附带)。PyPI 上是可供
pip install wave-mcp[viewer]使用的瘦身版;需要完整源码材料(审计或
镜像场景)的用户下载下方的+materials全量 wheel。 SHA256SUMS.txt覆盖以上全部文件。
wave-mcp v0.2.6 (English)
0.2.6 fixes the two issues with the widest impact: FSDB now works for
installations from PyPI, and the viewer and analysis tools point at the actual
mistake when a parameter is wrong instead of reporting a feature outage.
Fixed
- FSDB was unreachable for anyone who installed from PyPI. The fsdb2fst
converter is built on demand, but its sources and build script were never
packaged, so the automatic build had nothing to compile. The converter
sources anddeploy/build_fsdb2fst.shnow ship in the wheel and the sdist;
setVERDI_HOMEand the first conversion compiles automatically (a few
seconds), then caches. The offline bundles carry the sources too. - Viewer parameter mistakes return structured errors. A cursor written as
{"time_units": 1}used to answer with a vagueavailable: false, as if
the feature were broken. It now returnsstatus: errorwith
error_type: invalid_argument, the failing parameter, adid_you_mean
suggestion and an example of the right shape.available: falseis
reserved for the feature itself being unavailable. - Time strings are validated strictly. Integer digits with an optional
unit suffix ("1523400","1523400ps"); conflicting suffixes, unknown
units and fractional values are errors instead of being dropped silently. - Dropped commands are reported. Opening or updating a view surfaces a
warningslist when a command cannot be generated. - A failed viewer open no longer leaks a surver process, and surver
startup failures now include the last lines of its stderr. - Empty values and extreme times no longer break guard evaluation. When a
time lies past the dump's last change, FST lookups return empty; guards now
treat that as unknown instead of crashing or answering confidently, and a
time beyond the 64-bit FST range returns a structured error.
Changed
signal_faninreports every direct peer of a boundary net. A net
without a module-local fan-in record (a struct port, an aggregated bus, a
sub-module output) used to resolve to the internal fan-in of one arbitrary
peer; direct mode now returns all directly connected peer ports and
transitive: trueexpands the cone behind each.fan_inis now a strict
subset ofconnectivity. Usesignal_driverswhen you need source
locations.
Downloads
- Main package (PyPI):
pip install wave-mcp==0.2.6, or the wheel and sdist
below. - Offline bundles:
glibc2.28andglibc2.17(CentOS 7 class hosts).
Self-contained Python and dependencies, no network or compiler needed:
unpack and runinstall.sh. They do not include viewer assets; install
those separately as described below. - Viewer assets
0.25.6.post1: fixes the embedded font license texts that
0.25.6 shipped without (five texts, including OFL-1.1, Ubuntu font and
Hack). The slim wheel on PyPI servespip install wave-mcp[viewer]; the
+materialswheel below carries the complete source material set for
audit and mirroring. SHA256SUMS.txtcovers all of the above.
v0.2.5
wave-mcp v0.2.5
嵌入字体许可材料的更正版本。代码功能没有变化,改动集中在随包分发的许可文本,
以及一道防止空白模板再次被打包的构建门禁。
修复
- 更正 Hack 字体的许可归属。
epaint_default_fonts在 Cargo.toml 里声明的是
(MIT OR Apache-2.0) AND OFL-1.1 AND Ubuntu-font-1.0,我们此前把这串声明当成了
逐字体的映射,于是把Hack-Regular.ttf记成了 OFL-1.1。实际上 Hack 是
MIT(Copyright 2018 Source Foundry Authors)加 Bitstream Vera
(Copyright 2003 Bitstream, Inc.,保留字体名 "Bitstream" 与 "Vera"),
所以声明里的OFL-1.1只覆盖NotoEmoji-Regular.ttf。上游原始声明现已收录为
docs/licenses/epaint-default-fonts.Hack.txt,SOURCES.txt也改为依据上游
逐字体声明来记录映射,不再照抄声明串。 - 把空白的 SIL 模板换成上游原文。 之前那份 OFL-1.1 是通用模板,
<Copyright Holder>和<Reserved Font Name>占位符都没填,等于没有指明
版权人,不满足许可的声明要求。现在这份是上游随字体分发的fonts/OFL.txt原文。
四份字体声明均与epaint_default_fonts0.35.0 逐字节一致。 - 构建增加占位符门禁。
build_viewer_assets.sh现在会拒绝打包任何仍含模板
占位符的字体许可文本,空白声明不会再被静默发布。
变更
deploy/viewer-pin.sh将 viewer 资产包钉定到0.25.6.post1。
钉定的 surver/wasm 二进制没有变化,所以 wellen 版本断言仍是0.25.6;
post 后缀标记的是仅打包层面的修正,分发的是同一份二进制加更正后的字体声明。
影响范围
只影响随包分发的许可材料,不涉及 API、工具集与波形解析行为。
从 0.2.4 升级无需改动配置。字体声明的更正同样适用于已发布的
wave-mcp-viewer-assets 0.25.6,该缺口由 0.25.6.post1 补上。
wave-mcp v0.2.5
A correction release for the embedded font license materials. No functional
changes: the diff is limited to the license texts that travel with the package,
plus a build gate that stops a blank template from being packaged again.
Fixed
- Hack font license attribution corrected. The license string declared in
epaint_default_fonts' Cargo.toml is
(MIT OR Apache-2.0) AND OFL-1.1 AND Ubuntu-font-1.0. We had read that string
as a per font mapping and recordedHack-Regular.ttfas OFL-1.1. Hack is
actually MIT (Copyright 2018 Source Foundry Authors) plus Bitstream Vera
(Copyright 2003 Bitstream, Inc., with Reserved Font Names "Bitstream" and
"Vera"), which means the declaredOFL-1.1coversNotoEmoji-Regular.ttf
only. The upstream notice is now vendored at
docs/licenses/epaint-default-fonts.Hack.txt, andSOURCES.txtrecords the
mapping taken from the upstream per font notices rather than from the declared
string. - Blank SIL template replaced with the upstream text. The previous OFL-1.1
file was a generic template still carrying unfilled<Copyright Holder>and
<Reserved Font Name>placeholders, so it named no copyright holder and did
not satisfy the notice requirement. It is now the verbatimfonts/OFL.txt
that upstream distributes with the font. All four font notices are byte
identical toepaint_default_fonts0.35.0. - Placeholder gate added to the build.
build_viewer_assets.shnow refuses
to package any font license text that still contains template placeholders, so
a blank notice cannot ship silently again.
Changed
deploy/viewer-pin.shpins the viewer asset package to0.25.6.post1. The
pinned surver/wasm binaries are unchanged, so the wellen version assertion
stays at0.25.6; the post release suffix marks a packaging only fix that
ships the same binaries with the corrected font notices.
Scope
Only the license materials shipped with the package are affected. The API, tool
set and waveform parsing behaviour are unchanged, and upgrading from 0.2.4
requires no configuration changes. The same font notice correction applies to
the already published wave-mcp-viewer-assets 0.25.6; that gap is closed by
0.25.6.post1.
v0.2.4
What's new
This release is about making redistribution correct rather than adding
features. If you install from PyPI, you now get the license and attribution
material with the package instead of having to fetch it from the repository.
Attribution and notices ship with the wheel
LICENSE, docs/THIRD_PARTY.md, docs/PACKAGING_MATERIALS.md and the full
docs/licenses/ directory are now installed via data-files. Previously a
plain pip install wave-mcp gave you only LICENSE; the third-party notices
lived in the sdist and the offline bundle, so anyone installing from PyPI
never saw them. That gap is closed.
Font licenses for the viewer
The surver binary embeds fonts from the epaint_default_fonts crate, whose
license is a conjunction: (MIT OR Apache-2.0) AND OFL-1.1 AND Ubuntu-font-1.0. Earlier asset builds recorded this component as an unknown
license and shipped no font text at all, which is not what those licenses
ask for. OFL-1.1, Ubuntu-font-1.0 and the MIT text for emoji-icon-font
are now vendored, built into the assets package, and covered by the
packaging gate.
Complete redistribution materials for optional components
Offline and container builds can now carry everything a recipient needs, with
hashes verified against upstream:
- standalone Python runtime: 52 files
vcd2fst: 27 files, including thefstapi,FastLZ,LZ4,helperand
jrblicense texts and aSOURCES.jsonprovenance record- viewer assets: source archives, dependency notices and an inventory tied
to the asset hashes
See docs/PACKAGING_MATERIALS.md for the layout.
A gate that fails the build
deploy/redistribution_materials.py blocks a build when required materials
are missing, unresolved or hash-mismatched. A release can no longer ship
without them by accident.
Notes
wave-mcpitself stays MIT licensed. The EUPL-1.2 Surfer components remain
a separate aggregation:surverruns as its own subprocess and the WASM
bundle is served as static files, neither linking into wave-mcp.- Older releases are not modified or removed. Earlier asset packages are still
missing the font texts; installing the current assets package is the way to
get them.
Install
pip install --upgrade wave-mcpv0.2.3
wave-mcp v0.2.3
缺陷修复版本,来自真实项目实测。工具数不变(34),无 API 变更、无数据格式变更,
升级无需改动任何调用方代码。
安装
pip install --upgrade "wave-mcp[viewer]" # 含波形查看器
pip install --upgrade wave-mcp # 仅分析工具主要修复
DUT 顶层信号追踪不到。 以 DUT 为根构建 netlist 时,所有直接声明在 DUT 顶层的信号
都返回 unresolved_path,signal_drivers 一个也查不出来,尽管 netlist 里其实有这些
驱动关系。
根因是作用域解析的第三级判据读的是 FST 的 component 字段,而这个字段对波形来说
恒为空,Verilator 原生 FST 和 VCD 转出来的都一样。也就是说那段代码从来没生效过。
它一直没暴露,是因为以前都是从 testbench 顶层展开,netlist 根 key 和 FST 根 scope
同名,第一级精确匹配就把所有查询都接住了,第三级根本走不到。换成 DUT 为根就断在这里:
netlist 根是 DUT(decode),FST 根是 testbench(top_tb.U_DECODE),前两级全部落空,
正好掉进那个从来不工作的分支。现在第三级也接受 definition_name,它由 netlist 锚点推导
得出,根节点因此能解析,顶层信号恢复可追踪。
跨层次追踪只能单向。 loads() 会下钻子模块,drivers() 不会,于是同一根线在
signal_connectivity 里显示有连接,signal_drivers 却说是悬空的。现在两个方向都遍历
peer,并且按端口方向过滤:上游取同层 fan-in 加子模块的 output 口,下游取同层 loads
加子模块的 input 口。方向过滤是关键,否则一个顶层 reset 会被报成由它驱动的那些
触发器所驱动。解析结果会标明来自哪一跳。
netlist 里的源码路径打不开。 modules_in_file 恒返回 0,signal_drivers 给出的
examples/sample/counter.sv 这类路径对任何目录都解析不出来,因为路径是相对展开时的
cwd 存的,查询时却拿当前 cwd 去对。现在 netlist 构建会记录自己当时的 cwd 并优先用绝对
路径,其余相对路径在加载时统一重写一次,依次按构建根目录、netlist 目录及其祖先解析。
只做一次归一化,是因为这些路径会通过 drivers、loads、fan-in、trace 结果和声明等多条
路径到达调用方。
filelist 不认环境变量。 -F $PROJ_FE/rtl/foo.f 被当成字面量,整组文件因此静默地
以"文件缺失"退出展开。现在 token 会过一遍 os.path.expandvars;未定义的变量保持原样,
这样它仍然以文件缺失失败,而不会碰巧变成一个真实存在的路径。
时间单位写错会静默跑偏。 --cursor 1000nanoseconds 会被接受,然后落到一个任意
时刻且不报任何错,因为单位解析失败时转换器退化成输出裸数字,那和做单位换算是完全
不同的两件事。现在未知单位在 CLI 就被拒绝,同时从生成的命令批次里剔除,其余 marker
重新编号,避免一个坏条目把后面的 id 全顶错。可用单位收敛到 timeutil 里的单一列表。
IDE 内嵌浏览器里查看器全白。 页面通过 URL query string 接收后端 token,部分内嵌
浏览器会在跳转时把 query 丢掉,于是 shell 去请求一个 404 的地址,画布永远不绘制。
现在 token 随视图状态一起下发,页面会回退到它,裸 URL 也能正常工作。每个服务仍然只
在 localhost 上服务一个视图。
开视图偶发启动失败。 开一个视图要两个端口,shell 一个、surver 一个,两个都是先
bind 一个 socket 读出端口号、关掉、稍后再 bind 一次。中间这段端口无主,宿主机上任何
进程都可能抢走,第二次 bind 就失败。它只在有负载时复现,比如全量回归快速连开多个
视图,表现为随机的 "surver failed to start"。
两个调用方的修法不同,因为其中一个没法持有自己挑的端口。shell server 现在直接接收
一个已在监听的 socket,挑端口和 bind 变成同一个操作,窗口彻底消失。surver 是外部
二进制、只收一个端口号,没法继承 socket,所以改成子进程起不来就弃用这个端口、换一个
重试;只有 bind 失败才重试,波形缺失、二进制不可执行这类确定性错误仍然第一次就报出来。
测试
新增 tests/unit/test_dut_root.py,用 pylibfst 现场合成波形来钉住上面第一个问题,
不需要仿真器,也不会被仓库里过期的波形文件掩盖。它不只断言结果,还断言"这个 bug
可达"的前提条件,所以后续改动没法悄悄把它变成对叶名匹配的测试。把修复回退掉,8 个
断言里有 5 个会失败。
兼容性
无破坏性变更。alloc_port() 保持原签名,新增的可选 exclude 参数用于重试时跳过已知
不可用的端口。全量回归 9/9 通过。
完整能力
34 个 MCP 工具 / 8 大类:层次探索、信号查询、值查询、驱动分析、值/X 态追踪、波形查看
器、pass/fail 对比、视图生命周期。输入格式 FSDB / VCD / FST,已在 Xcelium 上适配。
不依赖任何商用 EDA 工具。
v0.2.2
What's Changed
Added
WAVE_MCP_SESSION_ROOTconfines where session directories land.out_diris chosen by the calling model, so a drifted prompt could scatter sessions across/tmp, the cwd, or a shared regression directory, where two users with different filelists collide on one directory and silently inherit each other's netlist. Set this variable and everyout_dirresolves inside it: a bare name or relative path lands in the root, a path already inside it is kept, and one pointing elsewhere is remapped in by basename. Unset, behaviour is unchanged. The reply'ssession_pathis always the real location.- Environment variables documented in one table. Both READMEs now carry the full set (session root, Verdi/FSDB, vcd2fst, viewer, cache) and state that these belong in the
envblock of the MCP client config, since an agent-spawned server does not inherit an interactive shell's exports.
Fixed
- Viewer backends outlived the process that started them.
SurverManagerrelied solely on anatexithook, which Python skips onSIGTERM, so killing awave-viewCLI or an MCP server left onesurverper open view running indefinitely, holding memory and a listening port. Both entry points now installSIGTERM/SIGINT/SIGHUPhandlers that close views explicitly, andsurverchildren additionally setPR_SET_PDEATHSIGso the kernel reaps them even when the parent isSIGKILLed or crashes.
Changed
- FSDB converter attribution made accurate.
docs/THIRD_PARTY.mdand the headers of both converter sources now record the project name, author, MIT license, and link for the public implementation that informedParseScaleFsand the offlineffrAPIstub.
Full Changelog: v0.2.1...v0.2.2
v0.2.1
Fixed
Air-gapped deployment fixes, all reported from an on-site install.
- The launcher could not find its own interpreter.
install.shtook--prefix
verbatim, so a relative value baked a relativeRUNTIMEinto the generated
bin/wave-mcp. An MCP client spawns that launcher with the user's project
directory as cwd, not the install directory, so the interpreter path resolved
to nothing and the client reported only a bare-32000. The prefix is now
resolved to an absolute path (and probed for write permission) before anything
is installed, the launcher anchors a relativeRUNTIMEon its bundle, and it
prints the missing path, the bundle and the cwd instead of dying silently. - The install-time check now covers the launcher. The sanity check ran the
venv interpreter directly, which bypassed the generated launcher entirely, so
any cwd-dependent path in it survived install and only surfaced in the client.
It now also runsbin/wave-mcpfrom an unrelated cwd, reproducing how a client
starts it. WAVE_MCP_VIEWER_ASSETSwas silently ignored when relative. A relative
value resolved against whatever cwd the client happened to use and then
degraded to "viewer unavailable" with a hint telling you to set the variable
you had already set. Relative values now resolve against$HOME, and the hint
names the real cause (path missing, orsurver/wasm/index.htmlabsent).- Build scripts resolve
--outto an absolute path.build_offline_bundle.sh
useddirname "$OUT"for the tarball step, and the two Docker based builders
pass$OUTas a-vmount source, where a relative path is rejected outright. open_sessiondescription no longer mentions a sim log it stopped loading,
so the tool description an agent sees matches what it does.
No functional or API changes: the tool set stays at 34 tools.
Downloads
Offline bundles for air-gapped networks. Extract, then run
install.sh --prefix <absolute_dir>:
wave-mcp-bundle-glibc2.28.tar.gzmainstream hosts (CentOS 8+ / Ubuntu 18.10+)wave-mcp-bundle-glibc2.17.tar.gzlegacy hosts (CentOS 7 / RHEL 7)
Both embed a standalone Python 3.11, so the target machine needs no Python of
its own. SHA256SUMS.txt covers every attachment.
From PyPI:
pip install "wave-mcp[viewer]==0.2.1"
v0.2.0
wave-mcp v0.2.0
浏览器波形查看器、pass/fail 波形对比、FSDB 输入。工具数 27 到 34。
安装
pip install "wave-mcp[viewer]" # 含波形查看器
pip install wave-mcp # 仅分析工具查看器资产是独立包(wave-mcp-viewer-assets,EUPL-1.2),因此主包保持 MIT。
不用 PyPI 也可以:下载本 Release 的 wave_mcp_viewer_assets-0.25.6-*.whl 装上,
或解开后用 WAVE_MCP_VIEWER_ASSETS 指向资产目录。
主要变化
浏览器波形查看器。 open_wave_view 把 session 渲染成真正的波形 GUI(Surfer 编到
WASM,由 surver 流式喂数据),agent 可以把发现的问题直接摆给你看,而不是用文字描述。
update_wave_view 原地改视图(信号、分组、颜色、进制、游标、marker、视口、分析说明),
get_view_state 读回用户手动改过什么,双向闭环。39GB FST 实测打开 114 到 339ms。
视图生命周期。 list_wave_views / close_wave_view 管理已开视图,流式后端按波形文件
集共享并引用计数,关掉一个视图不会切断另一个还在读同一份波形的视图。默认上限 8 个并发视图
(WAVE_MCP_MAX_VIEWS),长批量跑不会堆积进程。端口可用 WAVE_MCP_VIEWER_PORT_BASE
钉在 64 端口窗口内,一条 ssh -L 规则就能一直用。
pass/fail 对比。 diff_waveforms 定位同一设计两次运行的首个分歧点,给出逐信号首次
差异时刻与比较覆盖率。
FSDB 输入。 prepare_session 直接吃 .fsdb,自动调自带的 fsdb2fst 转换(无 VCD
中间文件),大文件可用 fsdb_scopes / fsdb_signals_file 切片。转换只需本机有 Verdi 的
FsdbReader 运行库,运行时不占 license。在 MCP 配置里给出 VERDI_HOME 即可,转换器
首次使用时自动构建并缓存到用户目录。
Xcelium 直出 FST。 通过 fstdumper VPI 插件让 xrun 在仿真时直接写 FST,零转换、免商用
波形 license,含针对 Xcelium 的五项修复补丁。适用范围与硬限制(generate/task 子 scope
不可遍历)在指南里写明。
转换缓存。 VCD 与 FSDB 转换产物落在源波形旁并跨 session 复用,缓存键含源文件身份与
切片参数,换了范围不会误用旧产物。
离线部署。 一条命令产出加密网 bundle 矩阵(glibc 2.17 / 2.28),自带独立 Python 3.11,
目标机不需要 docker,也不需要升级系统 Python。CentOS 7 实测通过。
修复
查看器的 /index.html 抢占了 Surfer WASM 入口导致波形区空白;update_wave_view 的
marker 参数顺序颠倒导致落在错误时刻;HTTP server 关闭时泄漏监听 socket;service worker
在 range 请求失败时返回 undefined 卡住流式传输;多词信号分组名被波形后端静默丢弃导致
分组标题不显示。
校验和
见本 Release 附件 SHA256SUMS.txt。
完整变更记录见 CHANGELOG.md。
v0.1.1 - CLI
v0.1.1 — 命令行接口
0.1.0 的所有能力保持不变,新增 wave-mcp query 命令行接口:
27 个 MCP 工具全部可以在终端直接调用,不挂 Code Agent 也能用。
新增:wave-mcp query
pip install wave-mcp
wave-mcp query --list # 列出全部 27 个工具
wave-mcp query signal_values --session sessions/my_module \
--full_path top.u_tx.tx_serial
wave-mcp query signal_drivers --session sessions/my_module \
--json-args '{"full_path": "top.u_tx.tx_serial"}'- 参数按工具签名自动生成,
wave-mcp query <工具名> --help查看参数 - 默认输出人读文本,加
--json输出完整结构化结果 --session一键打开 session,--json-args支持 JSON 传参- 适合 CI 脚本、开发调试、快速验证
- 以后每新增一个工具,自动获得 CLI 接口,零维护成本
兼容性
不带 query 子命令时,wave-mcp 的 MCP server 行为与 0.1.0 完全一致。
完整能力(继承自 0.1.0)
- 27 个 MCP 工具 / 8 大类:层次探索、信号查询、值查询、驱动分析、值/X 态追踪等
- 无波形静态分析(open_static_session):仿真前仅凭 RTL 源码分析设计
- VCD→FST 转换(convert_vcd_to_fst / wave-vcd2fst)
- 生产级验证:225 万信号值查询正确性 100%,一百多个测试 case、310 万多次工具调用全部通过
v0.1.1 — Command-line interface
Everything from 0.1.0 stays the same, plus a new wave-mcp query CLI:
all 27 MCP tools are now callable directly from the terminal, no agent needed.
New: wave-mcp query
pip install wave-mcp
wave-mcp query --list # list all 27 tools
wave-mcp query signal_values --session sessions/my_module \
--full_path top.u_tx.tx_serial
wave-mcp query signal_drivers --session sessions/my_module \
--json-args '{"full_path": "top.u_tx.tx_serial"}'- Flags are generated from each tool's signature;
wave-mcp query <tool> --help - Human-readable output by default;
--jsonfor the full structured result --sessionopens a session in one shot;--json-argsaccepts JSON arguments- Built for CI scripts, development debugging and quick checks
- Every future tool gets a CLI surface automatically, zero maintenance
Compatibility
Running wave-mcp without the query subcommand behaves exactly like 0.1.0.
Everything from 0.1.0
- 27 MCP tools across 8 categories: hierarchy, signals, values, drivers, value/X tracing, and more
- Waveform-free static analysis (open_static_session) straight from RTL sources
- VCD→FST conversion (convert_vcd_to_fst / wave-vcd2fst)
- Production-grade validation: 2.25M signals at 100% value correctness, 100+ test cases, 3.1M+ tool calls all passed
v0.1.0
v0.1.0 — 首个正式版本
开源、免 License 的波形调试 MCP Server:读取 FST 波形 + RTL netlist,
提供层次探索、信号查询、驱动分析、值/X 态追踪等 27 个工具,
支持无波形静态分析(仿真前即可分析设计结构)。
生产级验证
在真实生产级芯片项目上全量测试:
- 225 万信号级验证,值查询一致性 100%
- 一百个测试 case,全模块覆盖
- 驱动分析在生产级项目上全量验证
- 百万级 scope 超大模块稳定完成分析
27 个工具 / 8 大类
波形读取、层次探索、信号查询、值查询、驱动分析、值/X 态追踪。
独有能力
- 无波形静态分析(open_static_session):仿真前仅凭 filelist 分析设计
- VCD→FST 转换(convert_vcd_to_fst)
安装
pip install wave-mcp