Skip to main content
Glama

vivado-mcp

PyPI version Python License CI

让 Claude Code、Cursor、Codex 等 AI Agent 安全驱动本地 Xilinx Vivado。

30 个精选 MCP 工具覆盖会话、综合、实现、时序、XDC、IP、波形与烧录;其余 Vivado 能力由通用 run_tcl 承载。相比把每条 Tcl 命令包装成工具,这种设计占用更少上下文,也更容易跨 Vivado 版本维护。

30 个精选工具

8 个证据驱动工作流

2 个实时 Resources

GUI / Tcl / attach 三种会话

本项目控制的是你本机安装的 Vivado,不是云端综合服务。命令在当前用户权限下执行;工具说明和诊断建议以中文为主。

English: A lean MCP server for driving local Xilinx Vivado from AI agents. It provides 30 curated tools, 8 evidence-gated workflow prompts, GUI/headless/attach sessions, and raw Tcl escape hatches.

导航快速开始 · 为什么是 30 个工具 · 工作流 Prompts · 工具列表 · 会话模式 · 架构 · CLI · 反馈

环境要求

  • Python ≥ 3.10,Windows / Linux

  • Xilinx Vivado:必须安装在运行 vivado-mcp 的本机

  • MCP Python SDK 2.x:唯一直接运行时依赖,pip 会自动安装

Vivado 版本

支持等级

验证范围

2019.1

主要支持基线

作者长期实测 GUI / Tcl / attach 与完整 FPGA 流程

2018.3

部分路径验证

社区贡献者验证 IPDEF-only IP 元数据(PR #1

2022.2

社区现场验证

Windows 10 GUI/XSim 问题现场(Issue #2),不代表完整回归

其他版本

实验性兼容

协议层为纯 Tcl,但未持续做真机矩阵;请先跑下方冒烟验证

Related MCP server: vivado-mcp-agent

快速开始

1. 安装

python -m pip install vivado-mcp

多 Python 环境下,请让 MCP 客户端使用同一个 Python 解释器;必要时把下方配置中的 python 换成该解释器的绝对路径。

2. 先运行环境诊断

vivado-mcp doctor

doctor 默认完全只读,检查 Vivado 路径、init Tcl 注入、9999 端口协议、Claude Code/Codex 配置,并给出精确的修复计划。CI 或 Agent 可使用结构化输出:

vivado-mcp doctor --json

3. 注入 Vivado(一次性)

vivado-mcp install

这会修改你 Vivado 的 Vivado_init.tcl,让以后启动 GUI 时自动开启 TCP server(绑定 install 指定的单一端口,默认 9999;被占即退出,不会滑动到其他端口)。原文件会备份vivado-mcp uninstall 可恢复。

如果 Vivado 装在受保护目录(如 C:\Program Files\),用管理员身份运行命令即可。

也可以让 doctor 执行安全修复:

vivado-mcp doctor --fix --client all

--fix 才会写文件:复用幂等的 Vivado 注入,并在备份后原子更新选定客户端配置;不会删除第三方注入、终止占用端口的进程或自动升级软件。

4. 配置 MCP 客户端

doctor --fix 可自动配置 Claude Code 和 Codex。手动配置时,Claude Code 使用 ~/.claude.json,Cursor 使用项目级 .cursor/mcp.json 或用户级 ~/.cursor/mcp.json;两者都在 mcpServers 中加入:

"vivado": {
  "command": "python",
  "args": ["-m", "vivado_mcp"],
  "env": {
    "VIVADO_PATH": "D:/Xilinx/Vivado/2019.1/bin/vivado.bat"
  },
  "type": "stdio"
}

Codex 使用 ~/.codex/config.toml

[mcp_servers.vivado]
command = "python"
args = ["-m", "vivado_mcp"]

[mcp_servers.vivado.env]
VIVADO_PATH = "D:/Xilinx/Vivado/2019.1/bin/vivado.bat"

VIVADO_PATH 替换为你的 Vivado 实际路径:

  • Windows: "D:/Xilinx/Vivado/2019.1/bin/vivado.bat"

  • Linux: "/opt/Xilinx/Vivado/<版本>/bin/vivado"

  • 也可以不设置 VIVADO_PATH,将 Vivado bin 目录加入系统 PATH

VIVADO_PATH 负责让 MCP server 找到 Vivado 可执行文件;上一步的 vivado-mcp install 负责给 GUI/attach 模式注入 TCP server。其他支持 stdio MCP 的客户端使用相同的 commandargsenv,配置文件位置以客户端文档为准。

5. 重启 MCP 客户端

配置完成后重启客户端,即可加载 30 个工具、8 个工作流 Prompt 和 2 个会话状态 Resource。

6. 冒烟验证

在客户端中发送:

启动一个 GUI 会话,然后执行 Tcl: version -short

AI 应依次调用 start_session(mode="gui")run_tcl("version -short")。成功时 Vivado GUI 会启动(已有注入服务则直接 attach),并返回版本号。失败时直接运行 vivado-mcp doctor,无需逐项猜配置。

git clone https://github.com/mapleleavessssssss-wq/vivado-mcp.git
cd vivado-mcp
pip install -e ".[dev]"

各版本的完整变更和迁移说明见 CHANGELOG

设计哲学 — 为什么是 30 个工具而不是 500 个?

部分同类 Vivado MCP 采用数百个细粒度工具,其中许多只是单条 Tcl 的包装。问题是:

  • 每个工具都占用 AI 上下文(工具签名注入到每次系统提示)→ 调不调都烧 token

  • 大模型比我们更会拼 Tclcreate_bd_cell 这种就是写一行 Tcl 的事)

  • 绝大多数 facade 工具做的事 run_tcl("...") 能做

本项目只保留真正有本地价值的工具——Tcl 做不了或做不好的事:

  1. 结构化解析:IO / 时序报告 → JSON / 中文摘要(比原始表格省 token)

  2. 本地知识库:CRITICAL WARNING 按 ID 分类 + 中文修复建议(Tcl 里写这个太难)

  3. 跨命令协议:sentinel、会话管理、超时、比特流前置安全检查

  4. 跨会话工具compare_xci 纯 Python 对比两个 XCI 文件,不需要 Vivado

其他(BD / 仿真 / XSCT / 硬件调试 / IP 配置等)全部交给 run_tcl,让大模型自己拼 Tcl。

特性

  • 三种会话模式:GUI 可视化、Tcl 无头运行,以及只连接现有 GUI 的 attach

  • 30 个精选工具 — 覆盖完整 FPGA 开发流程、智能诊断、离线解析和外部工具链联动

  • 8 个证据驱动工作流 — 每个流程都要求新鲜基线、最小安全修改、复测门禁与明确停止条件

  • 一条命令自检doctor 只读定位环境问题,doctor --fix 才执行受限、可备份的修复

  • 可靠的长任务协议 — 综合/实现支持 wait=False 立即返回 job id,再由 get_run_progress 查询

  • 超时响应不串台 — 每个 session 保留在途响应所有权;旧响应完成前拒绝下一命令,不会把 FIRST 的结果交给 SECOND

  • 智能诊断 — 综合/实现后自动提取 CRITICAL WARNING / ERROR 分类 + 中文修复建议(含 18+ 种已知 ID)

  • IO 验证 — XDC 约束(支持 -dict 和传统两种语法)对比实际引脚分配,GT 端口不匹配标记为 CRITICAL

  • IP 调试 — 查询 IP 所有 CONFIG.* 参数(含 GUI 隐藏参数)、纯 Python 对比两个 XCI 文件

  • Bitstream 安全检查 — 生成比特流前自动检测 CRITICAL WARNING 并阻止(可 force 跳过)

  • 结构化报告 — IO 和时序报告解析为 JSON,便于 AI 精确提取数值(不再有"假 PASS"陷阱

  • 安全转义safe_tcl 自动对路径/标识符做 Tcl list 转义,Windows 含空格/中文/$ 的路径也能用

  • 多会话支持 — 默认复用端口 9999 的单个 GUI(不同 session_id 也 attach 同一台);传 port=0 自动分配空闲端口启动独立实例;server 只绑单一端口,被占即退出不滑动

工作流 Prompts

Prompts 解决的是“按什么顺序做、什么证据才算完成”,不会增加工具数量。正文只在选择该 Prompt 时加载,不会全部常驻上下文。

Prompt

用途

核心门禁

fpga_workflow

RTL 到 bitstream 的完整流程

上游失败不进入下游,post-route signoff 后才写 bitstream

debug_timing

setup/hold 时序收敛

baseline → 分类 → 最小修复 → 同指标复测,禁止假 false path

debug_gt_mapping

GT 引脚与 Lane 映射

原理图/XDC/实际布局三方证据一致后再改约束

debug_ip_config

IP 参数与 XCI 漂移

golden 来源可信、修改后 regenerate + synthesis 验证

debug_pcie

PCIe 分层排查

物理 → 时钟复位 → 时序 → 协议,上一层未过不下钻

simulation_bringup

XSim 编译、运行与失败分类

compile 不等于 pass;必须有非零测试和新鲜运行结果

cdc_audit

CDC crossing 审计

不用 waiver 隐藏真实 crossing,约束必须有结构证据

ila_hardware_debug

ILA 插入、烧录与采波

bit/ltx 配对、明确 JTAG target、有限等待,禁止全机 kill XSim

会话模式

start_session 工具支持三种模式:

mode

效果

适合

"gui" (默认)

先 probe 端口(0.3.19+):已有 vmcp server 直接 attach,没有才 spawn vivado -mode gui

交互开发、实时观察波形/原理图;支持复用你手动开的 GUI(只要装过 vivado-mcp install)

"tcl"

vivado -mode tcl 无头子进程

CI、批处理、不需要 GUI

"attach"

只 attach,不 spawn(端口无 server 时直接报错)

严格保证不会启新 GUI 进程的场景

用户: 启动 GUI 会话
AI: [调用 start_session(mode="gui")]
    → 端口空 → spawn 新 Vivado;端口已有 → attach 到现有 GUI(0.3.19+)
    
用户: 我刚自己手动开了 Vivado GUI,直接接管
AI: [调用 list_sessions]   → 看到 <external@9999>(你手动开的)
    [调用 start_session(mode="gui")]   → 自动 attach,不会再开第二个 GUI

用户: 批处理跑 10 个项目
AI: [调用 start_session(mode="tcl")] → 无 GUI,跑得更快

长时间综合/实现可以启动后立即返回,不占住一次 MCP 调用:

run_synthesis(run_name="synth_1", session_id="default", wait=False)
→ 综合已异步启动。job_id: default:synth_1

get_run_progress(run_name="synth_1", session_id="default")
→ STATUS / PROGRESS / 当前 phase / log tail / 最后更新时间

job_id 是由 session_id:run_name 组成的任务回执;查询时将两部分分别传给 get_run_progress。默认 wait=True 保持原有“等待完成并自动诊断”的兼容行为。每个 session 的命令严格串行,不同 session 可并行。

Resources

  • vivado://sessions:当前所有会话的结构化状态

  • vivado://session/{session_id}/status:指定会话的状态、模式、端口与存活信息

工具列表

会话管理

工具

说明

start_session

启动 Vivado 会话(gui/tcl/attach 三种模式)

stop_session

关闭指定会话(B13 修复:taskkill /T 递归杀进程树 + 清 vivado_pid*.str)

list_sessions

列出所有活跃会话

Tcl 执行(核心)

工具

说明

run_tcl

执行任意 Vivado Tcl 命令——AI 拼命令的主力

safe_tcl

带参数模板,自动 Tcl 转义,路径含空格/中文/$ 时使用

设计流程

工具

说明

run_synthesis

运行综合,Python 轮询不阻塞,完成后自动 open_run + 诊断

run_implementation

运行实现(布局布线)

get_run_progress

0.3.2 查 run 实时进度:Phase 序列 + log 尾部 + mtime,log 超 2 分钟不更新自动提示可能卡住

generate_bitstream

生成比特流(默认前置 CRITICAL WARNING 安全检查)

program_device

编程 FPGA 设备(封装 open_hw_manager → connect → program)

新手引导 & 工程摸底

工具

说明

get_next_suggestion

0.3.2 11 档决策表:没项目 → open/create,没顶层 → set_property TOP,综合完成 → run_implementation...每档附可执行命令

get_project_info

0.3.0 一次拿齐项目摸底:名称/part/顶层/源文件/XDC/IP/runs 状态

get_pre_commit_summary

0.3.4 生成 markdown 工程摘要直接贴 commit body:项目/时序 WNS+WHS/资源/CW/READY-WARN-BLOCK 门禁

诊断(独家差异化)

工具

说明

get_critical_warnings

提取并按 ID 分类 CRITICAL WARNING + ERROR,含 18+ 种已知 ID 的中文修复建议。0.3.9compare_with_last=True 差分。0.3.14 errors=0+cw=0 但 STATUS=ERROR 时 tail runme.log 扫非标关键词(TclStackFree/segfault/中文路径 cmd 报错)。0.3.15/16 run_name='sim_*' 时:先 glob xsim/*.log;全空就自动 launch_simulation -scripts_only + Vivado session 内 exec 跑 compile/elaborate.bat 抓真错

check_bitstream_readiness

0.3.0 烧板前一键 READY/WARN/BLOCK 综合判定

verify_io_placement_tool

对比 XDC 约束(-dict/传统两种语法)与实际 IO 布局,GT 不匹配标为 CRITICAL

xdc_lint

0.3.0 纯 Python 静态 XDC 检查(PIN_CONFLICT / 漏 IOSTANDARD / DUPLICATE_PORT / CLOCK_NO_PERIOD / 跨文件冲突),不需 Vivado

xdc_auto_fix

0.3.3 自动补 IOSTANDARD + create_clock -period,dry_run 预览 + 板卡 profile(basys3/nexys-a7/arty-a7/zybo/kc705),不碰 PIN_CONFLICT

verilog_compile_check

0.3.4 用 iverilog / verilator 做语法 + 连接性检查,通常远快于完整 Vivado 综合。未装返回 SKIP + 安装指引,支持 Windows+scoop 路径自动发现

IP 调试

工具

说明

inspect_ip_params

查询 IP 实例所有 CONFIG.* 参数(含 GUI 隐藏项),支持关键词过滤

compare_xci

纯 Python 对比两个 XCI 文件的参数差异(无需 Vivado 会话)

get_ip_status

0.3.4 检查哪些 IP 需要升级 / 被锁定 / 已最新,附 upgrade_ip 批量建议

离线摸底(无需 Vivado 会话,纯 Python)

工具

说明

parse_xpr

0.3.23 离线解析 .xpr 工程文件——不启 Vivado 秒级拿 part/顶层/源文件(按 fileset 分组,含 .v/.mem/.xci IP)/XDC/runs。对照 get_project_info 需先 open_project(中文路径会 TclStackFree 崩)

parse_bit_header

0.3.23 离线解析 .bit 头部——设计名/part(原始 7k325tffg900 + 规整 xc7k325tffg900)/构建日期时间/SHA256。烧前防错板 + 交付对账,Vivado 无 Tcl 命令读离线 .bit

parse_ltx

0.3.23 离线解析 .ltx ILA 探针清单——probe 名/位宽/映射 net。连板抓波前先拿清单,get_hw_probes 需活 hw session

结构化报告

工具

说明

get_io_report

IO 引脚报告(JSON),自动判定 GT/GPIO 类型

get_timing_report

时序报告,含 PASS/FAIL 判定、数据来源标注(post-synth 估算 vs post-route 最终)、关键路径详情。0.3.9 违例时自动附 Top N 违例路径 + 5 种模式分类(CDC/HIGH_FANOUT/LONG_COMBO/IO_UNREGISTERED/UNKNOWN)+ 具体 Tcl 修复命令

get_utilization_report

0.3.0 结构化资源占用(LUT/FF/BRAM/DSP/IOB),> 90% 标 CRITICAL,70-90% 标 WARN

通用报告(power / drc / clock / methodology / cdc 等)请直接用 run_tcl("report_power -return_string"),无需包装。

波形显示(XSim)

工具

说明

set_wave_zoom

0.3.22 设置波形时间缩放窗:改 .wcfg XML → close -force → open 重载(Vivado 2019.1 无 Tcl zoom 命令,跨命令协议封装)

set_wave_analog

0.3.22 把信号设为 Analog 模拟显示:自动补 STYLE_ 前缀 + 全路径/显示名寻址 + 空对象判空(三个实测静默坑一次封掉)。注意先 zoom 后 analog(重载会冲掉 analog 设置)

可选:Claude Code Hook 配置示例

注意:.claude/ 目录不随仓库 / PyPI 包分发,下面是一份可选的 hook 配置示例, 复制到你自己项目的 .claude/settings.json 即可启用。hook 里 import 的 vivado_mcp.analysis 模块随 pip install vivado-mcp 一起装好,无需额外脚本。 所有 hook 命令均为单行 python -c(分号串联)——Windows cmd 与 bash 下都能直接执行, 多行 python -c 在 cmd 下会 SyntaxError 静默失效,自行改写时请保持单行。

配好后 AI 不只会"被动应答",还能主动守门:

Hook

触发事件

作用

bitstream-guard

AI 调 generate_bitstream

弹确认框(permissionDecision: ask):提醒先跑 check_bitstream_readiness,由你决定放行或拒绝,不会硬阻断流程

xdc-lint

保存任意 .xdc 文件后

纯 Python 静态检查:PIN_CONFLICT / 漏 IOSTANDARD / create_clock 缺 -period 等,无需等综合

verilog-lint

保存任意 .v / .sv 文件后

零依赖预检:module 名匹配文件名 / endmodule 存在 / 括号配对

iverilog-check

保存任意 .v / .sv 文件后

0.3.4 iverilog 或 verilator 语法+连接性检查,未装静默跳过,有 error 时阻断

session-guard

Claude 停下时

vivado_pid*.str 文件,提醒清理未关闭的 Vivado session

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "mcp__vivado__generate_bitstream",
        "hooks": [
          {
            "type": "command",
            "statusMessage": "bitstream-guard",
            "command": "python -c \"import json; print(json.dumps({'hookSpecificOutput': {'hookEventName': 'PreToolUse', 'permissionDecision': 'ask', 'permissionDecisionReason': '烧板前确认已跑 check_bitstream_readiness 且结论为 READY(时序违例/未布线状态下生成的是无效比特流)'}}))\""
          }
        ]
      }
    ],
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "hooks": [
          {
            "type": "command",
            "statusMessage": "xdc-lint",
            "command": "python -c \"import json,sys; sys.stderr.reconfigure(encoding='utf-8'); d=json.load(sys.stdin); fp=d.get('tool_input',{}).get('file_path') or d.get('tool_response',{}).get('filePath') or ''; fp.lower().endswith('.xdc') or sys.exit(0); from vivado_mcp.analysis.xdc_linter import lint_xdc_files, format_lint_report; r=lint_xdc_files([fp]); r.issues and (sys.stderr.write('[xdc-lint hook] '+format_lint_report(r)+chr(10)), sys.exit(2))\""
          },
          {
            "type": "command",
            "statusMessage": "verilog-lint",
            "command": "python -c \"import json,sys; sys.stderr.reconfigure(encoding='utf-8'); d=json.load(sys.stdin); fp=d.get('tool_input',{}).get('file_path') or d.get('tool_response',{}).get('filePath') or ''; fp.lower().endswith(('.v','.sv')) or sys.exit(0); from vivado_mcp.analysis.verilog_quick_check import quick_check_verilog, format_report; t=format_report(quick_check_verilog(fp)); t and (sys.stderr.write('[verilog-lint hook] '+t+chr(10)), sys.exit(2))\""
          },
          {
            "type": "command",
            "statusMessage": "iverilog-check",
            "command": "python -c \"import json,sys; sys.stderr.reconfigure(encoding='utf-8'); d=json.load(sys.stdin); fp=d.get('tool_input',{}).get('file_path') or d.get('tool_response',{}).get('filePath') or ''; fp.lower().endswith(('.v','.sv')) or sys.exit(0); from vivado_mcp.analysis.verilog_compile_check import compile_check, format_compile_report; r=compile_check([fp], tool='auto', timeout=15.0); r.tool_available or sys.exit(0); r.errors and (sys.stderr.write('[iverilog-check hook] '+format_compile_report(r)+chr(10)), sys.exit(2))\""
          }
        ]
      }
    ],
    "Stop": [
      {
        "hooks": [
          {
            "type": "command",
            "statusMessage": "session-guard",
            "command": "python -c \"import sys,glob; sys.stderr.reconfigure(encoding='utf-8'); pids=glob.glob('vivado_pid*.str'); pids and (sys.stderr.write('[session-guard] 发现未清理的 Vivado session 痕迹: '+', '.join(pids)+'。建议用 mcp__vivado__stop_session 清理,或手动删除 .str 文件。'+chr(10)), sys.exit(2))\""
          }
        ]
      }
    ]
  }
}

把片段写入你项目的 .claude/settings.json 后,Claude Code 打开该项目时会弹框:"检测到项目配置了 hook,是否信任?" — 选 Yes 即启用。

要禁用单个或全部:在 .claude/settings.local.json(个人本地文件,不进 git)写入 {"hooks": {}} 覆盖即可。

使用示例 — 一轮完整的调试闭环

下面是 Vivado 2019.1 的两组实机片段:Basys 3 工程用于演示 IO/DRC 修复,独立的 Kintex-7 PCIe XDMA 工程用于演示时序诊断。两组结果串起 get_critical_warnings → XDC 修复 → compare_with_last 验证 → 时序自动诊断 → 烧板的完整闭环。

起点:打开项目,立刻看 ERROR / CW 详情

用户: 打开 basys3_uart 工程看看为什么 impl 挂了
AI:  [start_session(mode="gui")]
     [run_tcl("open_project .../basys3_uart.xpr")]
     [get_critical_warnings(run_name="impl_1")]

     !! 发现 3 条 ERROR !!
     诊断概览: errors=3, critical_warnings=0, warnings=0

     --- [ERROR][DRC BIVC-1] IO_STANDARD_MISMATCH (1 条) ---
       首次出现: 第 165 行
       示例消息: Bank IO standard Vcc: Conflicting Vcc voltages in bank 14...
       建议: Bank 内 IOSTANDARD 不一致(同一 Bank 的端口用了不同电压,如 LVCMOS18 和 LVCMOS33)。
       修复: 在 XDC 给所有端口显式指定 IOSTANDARD,同 Bank 保持电平一致。

     --- [ERROR][Vivado_Tcl 4-23] DRC_FAILED (1 条) ---
       建议: DRC 失败导致 Placer 未运行。
       修复: 查看同一日志里前面的 [DRC xxx-N] 定位根因,常见是 BIVC-1/NSTD-1/UCIO-1。

     --- [ERROR][Common 17-39] STAGE_ABORT (1 条) ---
       建议: 前置阶段失败导致后续阶段未能启动。

诊断第一步就锁定根因:BIVC-1Bank 14 有电压冲突,后两条 ERROR 都是连锁反应。

修 XDC + 再综合

用户: 按建议在 XDC 里给所有端口显式补 IOSTANDARD 再综合
AI:  [xdc_auto_fix(board="basys3", dry_run=false)]   # 0.3.3 一键补 IOSTANDARD
     [run_synthesis]
     [run_implementation]

验证真的修到了点 — compare_with_last 差分

用户: 确认一下修好了
AI:  [get_critical_warnings(run_name="impl_1", compare_with_last=True)]

     诊断概览: errors=0, critical_warnings=0, warnings=3

     === CW 差分报告(对比上次快照)===
     修复效果: 已消除 3 条 / 新出现 0 条 / 仍存在 0 条

     [-] 已消除(3):
       • [DRC BIVC-1] IO_STANDARD_MISMATCH
       • [Vivado_Tcl 4-23] DRC_FAILED
       • [Common 17-39] STAGE_ABORT

     结论: 修复生效,所有上次存在的问题均已消除。

不需要人工对比两份日志 —— 差分直接给结论:3 条 ERROR 都消了,修复生效

时序违例?自动给 Tcl 修复命令(0.3.9 亮点)

换到一个 WNS 违例的大工程(PCIe XDMA):

用户: 时序没过,告诉我怎么改
AI:  [get_timing_report]

     === 时序摘要 === 状态: FAIL (时序违例)
       Setup  WNS = -9.247 ns  TNS = -495735.094 ns
              失败端点: 247261 / 247354
       Hold   WHS = +0.015 ns  THS = 0.000 ns

     --- 违例路径 Top 10 ---
       [1] SETUP slack -9.247 ns  [HIGH_FANOUT]
           起点: .../xdma_0/.../tready_thrtl_reg/C
           终点: .../pcie_7x_i/pcie_block_i/CFGPMTURNOFFOKN
           延迟分解: logic 0.309 ns  route 2.094 ns  skew -6.845 ns  levels=2
           建议: 布线延迟(2.094 ns)远大于逻辑延迟(0.309 ns),通常是高扇出或跨芯片走线。
                 先跑 `report_high_fanout_nets -fanout_greater_than 1000` 定位,
                 然后对主干寄存器加 `set_property MAX_FANOUT 50 [get_cells <...>]`,
                 或在综合阶段加 `-fanout_limit 50` 让工具自动复制寄存器。

       [2] SETUP slack -9.219 ns  [HIGH_FANOUT]
           ...

不再有"时序挂了,咋办"的空转 —— 工具直接按模式(CDC / HIGH_FANOUT / LONG_COMBO / IO_UNREGISTERED / UNKNOWN)分类,给出具体 Tcl 命令。

烧板前安全门 + 编程设备

用户: 修好后准备烧板
AI:  [check_bitstream_readiness]
     结论: READY — route_design Complete / WNS +0.026 ns / CW=8 (GT_LOC 都是 IP 内部,可忽略)

     [generate_bitstream]          # 自动拦截:有 CW 会阻止,可 force=True 跳过
     [program_device(bitstream_path="impl_1/top.bit")]

常用旁路工具

其他单次查询/对比用例:

# 对比两个 XCI 找出配置漂移
compare_xci(file_a="golden.xci", file_b="suspect.xci")
# → PF0_DEVICE_ID: A=9024 | B=9038
# → LINK_SPEED:    A=5.0_GT/s | B=8.0_GT/s

# 验证 GT 引脚实际布局是否和 XDC 一致(支持 -dict 语法)
verify_io_placement_tool
# → !!! CRITICAL 不匹配 !!!  端口: pcie_7x_mgt_rtl_0_rxp[0]
#    XDC: AA4 | 实际: M6

# 任意 Tcl — AI 拼命令的主力
run_tcl("foreach p [get_ports] { puts \"$p: [get_property PACKAGE_PIN $p]\" }")
safe_tcl("set_property PACKAGE_PIN {0} [get_ports {1}]", args=["W5", "clk"])

架构

flowchart LR
    Agent["Claude Code / Cursor / Codex"] -->|"stdio MCP"| MCP["vivado-mcp"]
    MCP --> Tools["30 Tools"]
    MCP --> Prompts["8 Workflow Prompts"]
    MCP --> Resources["2 Session Resources"]
    Tools --> Tcl["SubprocessSession\nmode=tcl"]
    Tools --> Gui["GuiSession\nmode=gui"]
    Tools --> Attach["GuiSession\nmode=attach"]
    Tcl -->|"stdio + UUID sentinel"| VivadoTcl["vivado -mode tcl"]
    Gui -->|"TCP length-prefix"| VivadoGui["local Vivado GUI"]
    Attach -->|"TCP length-prefix"| VivadoGui

核心协议

  • subprocess 模式catch + UUID sentinel(stdio 分帧,修复了 0.1.0 的行顺序 bug)

  • GUI/attach 模式:TCP length-prefix framing(4 字节 BE + UTF-8 payload)

  • 命令通过十六进制编码传输,避免 Tcl 注入,并覆盖含空格、中文和特殊字符的路径

  • 每个 session 同时只拥有一个在途响应;调用超时不会释放协议所有权,避免迟到响应污染下一条命令

CLI 参考

命令

说明

python -m vivado_mcp

启动 MCP server(供 AI 工具调用)

vivado-mcp serve

同上

vivado-mcp install [path] [--port 9999]

注入 Vivado_init.tcl

vivado-mcp uninstall [path]

从 Vivado_init.tcl 移除

vivado-mcp doctor [path] [--port 9999] [--json]

只读检查环境与连接

vivado-mcp doctor --fix [--client all|claude-code|codex]

备份后修复可安全自动处理的配置

vivado-mcp version

显示版本

开发

git clone https://github.com/mapleleavessssssss-wq/vivado-mcp.git
cd vivado-mcp
python -m pip install -e ".[dev]"

# 运行测试(不需要 Vivado)
pytest

# 代码检查
ruff check src/ tests/

反馈与 Bug 提交

通过 Code Agent 提交 Bug

遇到问题?把下面的 prompt 复制到你的 agent(Claude Code、Cursor、Codex 等)中,它会自动收集环境信息并创建规范的 issue:

我在使用 vivado-mcp (https://github.com/mapleleavessssssss-wq/vivado-mcp) 时遇到了问题。

请帮我提交一个 GitHub issue,按以下步骤操作:

1. 收集我的环境信息:
   - 操作系统: 运行 `[System.Environment]::OSVersion.VersionString`(PowerShell)或 `systeminfo | findstr /B /C:"OS"`(cmd)
   - Python 版本: 运行 `python --version`
   - vivado-mcp 版本: 运行 `vivado-mcp version`(或 `pip show vivado-mcp`)
   - Vivado 版本: 运行 `vivado -version`(若 vivado 在 PATH 中);否则从我项目的 .xpr 文件里抓 Project 标签
   - 当前 Vivado 进程: PowerShell 跑 `Get-Process | Where-Object { $_.ProcessName -like "*vivado*" }`
   - MCP 客户端类型(Claude Code / Cursor / Codex 等)及版本
   - 我使用的 Vivado 模式(`gui` / `tcl` / `attach`)

2. 询问我:
   - 期望的行为是什么
   - 实际发生了什么
   - 复现步骤(从 `start_session` 开始的完整工具调用序列)
   - 相关的工具输出 / 错误日志(优先 `get_critical_warnings` 或 `get_run_progress` 的输出)

3. 使用 `gh issue create` 在 GitHub 上创建 issue,格式如下:
   - 标题: 简洁的问题概述,前缀建议 `[bug]` / `[feature]` / `[docs]`
   - 正文包含以下部分: **环境信息**、**问题描述**、**复现步骤**、**期望行为 vs 实际行为**、**相关日志**
   - 如果是 bug 请添加 `bug` 标签;如果涉及特定工具(如 `get_critical_warnings`),在标题里点出来

仓库: mapleleavessssssss-wq/vivado-mcp

直接提 issue

也可以直接到 GitHub Issues 提交 —— 麻烦带上 vivado-mcp version、Vivado 版本、复现步骤。

文档

许可证

Apache License 2.0

Available Tools

30 tools
check_bitstream_readinessA

烧板前一键检查:综合判断工程是否可以安全生成比特流。

这个工具是"发车前的最后一瞥":在你打算 generate_bitstream 或 program_device 之前,一次性给出 PASS/BLOCK/WARN 的综合结论,避免烧板后才发现问题。

检查维度:

  • impl_1 run 是否已到达 route_design Complete(没布线 = 无法生成比特流)

  • route 后的 CRITICAL WARNING 数量(> 0 通常意味着潜在功能风险)

  • 时序是否收敛(WNS/WHS 是否 met)

返回结论:

  • READY:可以安全烧板

  • BLOCK:存在阻塞性问题(route 未完成 / 时序违例 / 大量 CW)

  • WARN:可以生成但有风险(少量 CW 或估算时序偏低)

Args: impl_run: 实现 run 名称,默认 "impl_1"。 session_id: 目标会话 ID。

ParametersJSON Schema
NameRequiredDescriptionDefault
impl_runNoimpl_1
session_idNodefault

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

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

The description discloses specific checks performed (route_design completion, critical warning count, timing closure) and maps them to the three outcomes. It also explains the implication of critical warnings. Since no annotations are provided, the description fully carries the transparency burden, and it does so thoroughly.

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 well-structured with a title, rationale, bulleted checks, outcomes, and args. Every section contributes useful information, though the Args section repeats schema defaults, creating mild redundancy. Overall, it is appropriately sized and front-loaded with purpose.

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 tool's simple nature, the presence of an output schema, and the description's coverage of when to use, what is checked, and what outputs mean, it is fully complete. The description would be sufficient even without the output schema, and with it, all necessary context is provided.

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 schema provides only parameter names and defaults with no descriptions. The description adds one-line explanations for impl_run (implementation run name) and session_id (target session ID), which are slightly more informative than the parameter names alone. However, it does not explain valid values or how they affect the check, so it only partially compensates for the missing schema descriptions.

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 clearly states this is a pre-flight check that evaluates whether a project can safely generate a bitstream, returning READY/BLOCK/WARN. It distinguishes itself from sibling tools like generate_bitstream and program_device by being a pre-check. The slight inconsistency between PASS and READY does not undermine the purpose.

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?

Explicitly instructs to use this tool before generate_bitstream or program_device, preventing issues after board burn. This provides clear contextual guidance. The 'before...' formulation effectively indicates when to use it, and alternatives are implied by the sibling tool names.

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

compare_xciA

对比两个 XCI 文件的 IP 配置差异。

无需 Vivado 会话,直接读取 XML 文件对比参数。 适用于版本对比、不同板卡间配置迁移验证、调试 IP 参数差异。

Args: file_a: 第一个 XCI 文件路径(如基准/正常配置)。 file_b: 第二个 XCI 文件路径(如待检查/异常配置)。 show_all: 是否显示所有参数(默认仅显示差异)。

ParametersJSON Schema
NameRequiredDescriptionDefault
file_aYes
file_bYes
show_allNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states that the tool directly reads XML files and does not require a Vivado session, implying a non-destructive read operation. It also explains the default behavior of the show_all parameter. However, it does not explicitly mention whether any writes or modifications occur, though the read-only nature is strongly implied.

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 concise and well-structured: a high-level summary, followed by use cases, and then parameter details. Each sentence adds value without redundancy. The front-loaded purpose makes it easy to scan, and the parameter bullets are clear.

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 tool's moderate complexity and the presence of an output schema, the description adequately covers the input semantics, use cases, and the show_all flag. It does not need to describe return values because the output schema already provides that. The description is sufficient for an agent to invoke the tool correctly.

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

Parameters5/5

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

Schema description coverage is 0%, so the description's parameter explanations are essential. It defines file_a as the baseline/normal configuration and file_b as the to-be-checked/abnormal configuration, adding directional meaning that the schema lacks. It also clarifies show_all's default false behavior, fully compensating for the missing schema descriptions.

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 clearly states the tool's function: comparing IP configuration differences between two XCI files. It uses a specific verb ('对比') and resource ('两个 XCI 文件的 IP 配置'), and distinguishes itself from sibling tools like inspect_ip_params by focusing on comparison rather than single-file inspection.

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 explicit use scenarios: version comparison, board migration validation, and debugging IP parameter differences. It also notes that no Vivado session is required, helping the agent decide when to use this tool. However, it does not explicitly name alternative tools for cases where this tool is not suitable.

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

generate_bitstreamA

生成比特流文件。在实现完成后执行。

默认启用前置安全检查:检测 CRITICAL WARNING 后阻止生成, 需确认无风险后使用 force=True 跳过检查。

Args: impl_run: 实现 run 名称,默认 "impl_1"。 jobs: 并行任务数,默认 4。 timeout_minutes: 超时分钟数,默认 30。 force: 跳过 CRITICAL WARNING 安全检查,默认 False。 session_id: 目标会话 ID。

ParametersJSON Schema
NameRequiredDescriptionDefault
jobsNo
forceNo
impl_runNoimpl_1
session_idNodefault
timeout_minutesNo

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?

With no annotations provided, the description carries the full burden of behavioral disclosure. It explains a nontrivial behavior: a built-in pre-check detects CRITICAL WARNING and blocks generation unless force=True is set. This goes beyond just saying 'generate' and warns the agent about a condition that could affect the outcome. It could add more about return values or side effects, but the output schema likely covers that.

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 well-structured: a brief summary sentence, a note about the safety check, and a clearly formatted Args list. It is not overly long and each part serves a purpose. The only minor redundancy is repeating defaults that already appear in the schema, but this makes the description self-contained and readable.

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?

Given the tool's complexity (bitstream generation with a safety mechanism) and that an output schema exists, the description provides adequate context. It places the tool in the implementation flow, explains the safety behavior, and covers all parameters. It does not explain what the generated bitstream is used for or what the return value contains, but the output schema is expected to handle return 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?

The schema has 0% description coverage, so the description must compensate. It does this by listing all five parameters (impl_run, jobs, timeout_minutes, force, session_id) with brief explanations and defaults. The meaning of 'force' is clarified as skipping the CRITICAL WARNING safety check, which is valuable semantic context. However, 'session_id' is only described as 'target session ID', which is somewhat vague and could benefit from more explanation.

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 clearly states the tool's function: '生成比特流文件' (generate bitstream file) and specifies when it runs ('在实现完成后执行', after implementation completes). This distinguishes it from sibling tools like run_synthesis and program_device, which operate at different stages. The verb + resource is explicit and 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 gives clear timing guidance: the tool should be executed after implementation is complete. It also explains the default safety check that blocks generation on CRITICAL WARNING and how to override it with force=True. However, it does not explicitly mention alternatives or exclusions (e.g., not to use before implementation), but the context is reasonably clear.

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

get_critical_warningsA

提取并分类 CRITICAL WARNING / ERROR / 非标错误,统一失败诊断入口。

解析指定 run 的 runme.log,按 warning ID 聚合分类,返回中文诊断报告。 包含已知 warning 的分类标签和修复建议。

三种诊断模式根据 run_name 自动选择:

  1. synth_* / impl_* 等综合实现 run:走原流程(runme.log 解析 ERROR/CRITICAL WARNING)。额外:errors=0 且 cw=0 但 STATUS 含 ERROR 时, 自动 tail runme.log 最后 N 行扫非标错误关键词(TclStackFree / segfault / FATAL 等不带 ERROR: 前缀的内部异常),解决"messageDb 显示干净但 run 实际 崩了"的盲区。

  2. sim_* simulation fileset:改去 tail <proj>.sim/<sim_fs>/*/xsim/*.log (Vivado launch_simulation 的真错误位置,不在 runme.log),扫非标 关键词,自动暴露 xvlog 未找到等子进程错误。

  3. 任何 run:无论结果如何,都会静默把本次 CW 列表写快照(存到项目目录 .vmcp/ 下, 或 fallback 到 ~/.claude/vivado-mcp/)。启用 compare_with_last=True 时, 读上次快照与本次对比,报告消除/新增/仍存在的条目。(sim 模式不写快照)

Args: run_name: run / fileset 名称(如 synth_1 / impl_1 / sim_1), 默认 impl_1sim_* 走 simulation 日志诊断路径。 compare_with_last: True 时追加一段与上次快照的差分报告(仅对综合/实现有效)。 tail_n: 非标错误扫描时每个日志 tail 的末尾行数,默认 50,范围 1~500。 仿真模式适用于每个 xsim 子日志。 session_id: 目标会话 ID。

ParametersJSON Schema
NameRequiredDescriptionDefault
tail_nNo
run_nameNoimpl_1
session_idNodefault
compare_with_lastNo

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?

With no annotations, the description carries the full burden of behavioral disclosure. It is exceptionally transparent: it reveals silent snapshot writes ('.vmcp/' or fallback), the exclusion of sim mode from snapshotting, log tailing behavior (tail_n), and the fallback scan for non-standard error keywords like TclStackFree/segfault/FATAL. It even discloses the limitation of runme.log for simulation runs and points to the actual xsim log location.

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?

Although lengthy, the description is densely structured with numbered modes and bolded key terms, front-loading the core purpose and then systematically detailing each mode and parameter. Every sentence adds operational value—no filler. The format uses Markdown headers and lists to improve scannability for an AI agent.

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 comprehensive for a complex diagnostic tool: it covers the main flow, edge cases (errors=0 but STATUS contains ERROR), mode-specific behavior (sim vs impl), snapshotting and comparison, and parameter details. An output schema exists, and the description also clarifies return content (Chinese diagnostic report with labels and repair suggestions). Even without review of the output schema, the description provides sufficient context to select and invoke the tool 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?

Schema description coverage is 0%, so the description must compensate. It richly explains run_name (including mode routing), compare_with_last (diff report), and tail_n (range and per-sub-log behavior). However, session_id is only described as '目标会话 ID' (target session ID), which adds little beyond the parameter name itself, leaving a minor 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 opens with a specific verb+resource+scope: '提取并分类 CRITICAL WARNING / ERROR / 非标错误' (extract and classify critical warnings/errors/non-standard errors) and positions itself as a '统一失败诊断入口' (unified failure diagnosis entry). It clearly distinguishes itself from sibling monitoring/diagnostic tools like get_run_progress and get_timing_report by focusing on warning/error classification with actionable repair advice.

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?

Provides explicit usage guidance by describing three automatic diagnostic modes based on run_name (synth_*/impl_* vs sim_*). It explains when the tool is needed, e.g., '解决 messageDb 显示干净但 run 实际崩了' (solves the blind spot where messageDb looks clean but the run actually crashed), and clarifies that sim_* goes to a different log location. It also mentions compare_with_last behavior, giving clear context on when to use the diff functionality.

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

get_io_reportA

获取结构化 IO 引脚报告(JSON)。

执行 report_io 并解析为结构化数据,包含:

  • 每个端口的引脚、站点、方向、IO 标准、Bank

  • GT / GPIO 类型自动判定

  • 汇总统计(总数、GT 数、GPIO 数、未分配数)

Args: session_id: 目标会话 ID。

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idNodefault

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?

It discloses that the tool executes report_io and parses the result, and it describes the output structure. However, with no annotations, it does not explicitly state that the operation is read-only, whether an active session is required, or how errors are handled, leaving some behavioral ambiguity.

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 concise and well-structured, with a brief opening line, bullet points for output contents, and an Args section. Every sentence adds value and there is no redundant or filler content.

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?

The output schema exists, so return value structure is defined externally. The description adds the execution behavior (runs report_io) and highlights the key report contents. It lacks explicit session prerequisite information, but for a single-parameter report tool, it is largely sufficient.

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 input schema only provides the type and default for session_id; the description adds the semantic meaning '目标会话 ID' (target session ID). This compensates for the zero schema description coverage and gives the agent enough information to supply a valid session.

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 '获取结构化 IO 引脚报告(JSON)', clearly identifying the action (get) and resource (IO pin report) plus the JSON format. The bullet points listing pin, site, direction, IO standard, and Bank further distinguish it from sibling report tools like get_timing_report or get_utilization_report.

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 implies when to use the tool by detailing exactly what data it returns (per-port pin info and summary statistics). An agent can infer to use this tool when IO pin details are needed, but there is no explicit alternative comparison or when-not-to-use guidance.

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

get_ip_statusA

检查项目中所有 IP 的版本状态(哪个需要升级、哪个已锁定)。

老项目打开后 Vivado 常提示"N 个 IP 需要升级"。这个工具一次性列出:

  • 需要升级的 IP(Vivado 更新了更好的版本)

  • 已锁定的 IP(IS_LOCKED 属性为 TRUE,改动需先解锁)

  • 已最新的 IP

附带升级建议(单个升级 / 全部升级 / 升级后验证)。

Args: session_id: 目标会话 ID。

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idNodefault

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It describes what the tool lists (upgrade-needed, locked, up-to-date IPs) and explains the IS_LOCKED attribute, giving useful technical context. It also mentions upgrade suggestions as part of the output. It does not explicitly state it is read-only, but the wording implies inspection and not mutation.

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 concise and well-structured, with the main purpose front-loaded and bullet points listing the tool's outputs. The background about Vivado prompts earns its place as useful context. No unnecessary verbosity.

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 tool's simplicity (single optional parameter, no annotations) and the presence of an output schema, the description provides ample context: what the tool does, when to use it, what it returns, and parameter meaning. It is complete for an agent to select and invoke the tool correctly.

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

Parameters5/5

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

The schema has no description coverage for the single parameter, but the description includes 'Args: session_id: 目标会话 ID。' which clearly explains the parameter's purpose. This fully compensates for the lack of schema description, adding meaning beyond the schema's minimal type/default.

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 clearly states the tool checks the version status of all IPs in the project, listing those that need upgrade, are locked, or are up to date. This specific verb+resource+scope distinguishes it from siblings like compare_xci and inspect_ip_params, which focus on other aspects of IP/project inspection.

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 clear usage context: when opening an old project and Vivado prompts that IPs need upgrade. It does not explicitly list exclusions or alternative tools, but the context makes it evident when to use this tool over others, satisfying the 'clear context, no exclusions' level.

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

get_next_suggestionA

根据当前项目状态推断下一步应该做什么。

适合新手、刚打开老项目、或者不知道从哪下手的场景。规则:

  • 没项目 → 建议 open_project / create_project

  • 有项目没源文件 → 建议 add_files

  • 没顶层 → 建议 set_property TOP

  • 没 XDC → 建议添加约束

  • 有 testbench 且没跑过行为仿真 → 先 launch_simulation

  • 可综合 → xdc_lint + run_synthesis

  • 综合完成 → run_implementation

  • 布线完成 → check_bitstream_readiness + generate_bitstream

  • 比特流就绪 → program_device

  • 任何阶段失败 → 引导到 get_critical_warnings

Args: session_id: 目标会话 ID。

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idNodefault

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations, the description carries the burden. It clearly indicates an advisory role through '推断' and '建议', and fully discloses its decision logic. However, it does not explicitly state that it performs no side effects or how it handles invalid session IDs.

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 well-structured: a clear purpose sentence, a usage context, a bulleted decision list, and an Args section. Every sentence is informative, and the rules are compact and easily scannable.

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 covers the entire decision logic, the parameter, and usage scenarios. Since an output schema exists, return value details are unnecessary. The tool is fully self-described 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.

Parameters5/5

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

The input schema provides no description for session_id, but the description explicitly documents it as '目标会话 ID' (target session ID). This fully compensates for the 0% schema description coverage and adds meaningful 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 '根据当前项目状态推断下一步应该做什么' (infer next actions based on current project state), which is a specific verb and resource. It further differentiates from siblings by listing a decision tree that recommends distinct tools like open_project, run_synthesis, and generate_bitstream, making its 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 explicitly states it is '适合新手、刚打开老项目、或者不知道从哪下手的场景' (suitable for beginners, old projects, or unsure where to start), providing clear context. The decision rules also name alternative tools for each scenario, but it does not explicitly state when not to use this tool.

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

get_pre_commit_summaryA

生成一段可以贴进 git commit body 的工程摘要(时序/资源/CW)。

典型用途:做完 RTL 改动、跑完 impl 之后,想把关键数字写进 commit body, 避免 "改了 UART 模块" 这种无信息量的 commit。本工具一次性采样:

  • 项目 + part + 顶层

  • 时序摘要(WNS / WHS / 失败端点数)

  • 资源占用(LUT / FF / BRAM / DSP / IOB 百分比)

  • CW / ERROR 计数(若有 impl_run)

  • 综合生成 READY/WARN/FAIL 门禁标签

输出为 markdown 片段,直接粘贴到 commit 描述。

Args: impl_run: 用来查 runme.log 计数的 run(默认 impl_1)。 session_id: 目标会话 ID。

ParametersJSON Schema
NameRequiredDescriptionDefault
impl_runNoimpl_1
session_idNodefault

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses that it samples various data, includes conditional logic (CW/ERROR only if impl_run exists), and outputs markdown. It implies read-only behavior by mentioning '跑完 impl 之后' but does not explicitly state it won't trigger synthesis/implementation.

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 well-structured: purpose first, then typical use, bullet-pointed content list, output format, and args. It is slightly verbose but every sentence provides useful information with no fluff.

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?

There is an output schema, so return value details are covered by schema. The description covers input args, output format, and usage scenarios. It misses prerequisites like project/session existence, but overall it is sufficiently complete for a tool with two parameters.

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 coverage is 0%, so the description must compensate. It explains impl_run as the run used to query runme.log counts with default impl_1, but session_id is only described as '目标会话 ID' which adds little meaning. The description does not fully document how session_id is used.

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 clearly states the tool's purpose: generate a project summary for git commit body, listing specific content (timing/resource/CW/status). It distinguishes itself from sibling tools like get_timing_report and get_utilization_report by being a composite summary generator.

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 explicitly mentions a typical use case: after RTL changes and implementation, to fill commit body with key numbers. It does not explicitly exclude other scenarios or mention alternatives, but the context is clear enough.

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

get_project_infoA

获取当前 Vivado 项目的综合信息(项目名 / part / 顶层 / 文件列表 / IP / run 状态)。

一次查询完成"摸底":AI 接手陌生项目时的起点。包含:

  • 项目名称、目录、Part 型号、顶层模块

  • 所有源文件(按类型分组)

  • XDC 约束文件列表

  • IP 实例列表(含 VLNV)

  • synth_1 / impl_1 的当前状态

Args: session_id: 目标会话 ID。

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idNodefault

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?

With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly lists what information will be returned, but does not state whether the tool is read-only, whether it requires an open session, or any potential side effects. Given the 'get' prefix and the nature of the tool, the absence of these details is a minor gap, hence a 3.

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 well-structured: it starts with the purpose, gives a use-case justification, and follows with a concise bullet list of included information. Every sentence adds value, and the format is easy to scan without unnecessary verbosity.

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?

Given the tool's simple single-parameter shape and the presence of an output schema, the description does not need to detail return values. It sufficiently explains what categories are covered and when to use it. It could mention prerequisites like needing an active session, but that is handled by sibling tools (start_session, list_sessions), so a 4 is appropriate.

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 input schema provides no description and 0% schema coverage. The description compensates by explicitly defining the sole parameter: 'session_id: 目标会话 ID', which adds clear meaning. While minimal, it fully covers the parameter's purpose, exceeding the schema alone.

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 ('获取') and clearly identifies the resource ('当前 Vivado 项目的综合信息'), enumerating exact content categories (project name, part, top-level, files, IP, run status). This distinguishes it from sibling tools that target specific reports (e.g., get_timing_report, get_utilization_report), making it the go-to overview tool.

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 explicitly states a clear usage context: 'AI 接手陌生项目时的起点' (starting point when AI takes over an unfamiliar project) and emphasizes '一次查询完成摸底' (one query for reconnaissance). It does not provide explicit when-not-to-use guidance, but the context is strong enough to imply this is the first query to run before diving into more specific tools.

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

get_run_progressA

查看 run 的运行进度(适合长任务等待时看"走到哪一步")。

综合或实现常跑 10-30 分钟,这个工具让你不用开 GUI 就能看到:

  • 当前状态(running / complete / error)与 PROGRESS 百分比

  • runme.log 里最近若干条 Phase 行(Phase 1 → Phase 2.1 → Phase 3 ...)

  • 日志尾部 N 行(含最新 WARNING / CRITICAL WARNING 原文)

  • 日志最后更新时间(判断 Vivado 是否还在活跃)

Args: run_name: run 名称(如 "synth_1" / "impl_1"),默认 "impl_1"。 tail_lines: 日志尾部要读多少行,默认 30。 session_id: 目标会话 ID。

ParametersJSON Schema
NameRequiredDescriptionDefault
run_nameNoimpl_1
session_idNodefault
tail_linesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It does well by disclosing that it reads runme.log and reports the last log update time to judge whether Vivado is active. It also enumerates the types of information returned. While it doesn't explicitly state 'read-only', the 'get' prefix and progress-monitoring intent make that implicit.

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 well-structured with a one-line summary, a bulleted list of what the tool returns, and a clear 'Args' section. Every sentence provides useful information without redundancy. It is appropriately detailed for a tool with three parameters and no annotations.

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 tool's relatively simple purpose and the presence of an output schema, the description is complete. It explains the use case, what data is shown, and parameter meanings. It also provides enough context to differentiate it from sibling tools like get_critical_warnings, even though it does not name alternatives explicitly.

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

Parameters5/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 fully explain parameters. It does: run_name is described with examples and default ('synth_1'/'impl_1'), tail_lines is defined as how many log lines to read, and session_id is identified as the target session ID. All three parameters are meaningfully documented beyond their schema names.

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 clearly states the tool's purpose: '查看 run 的运行进度' (view run progress) and elaborates with a specific use case ('适合长任务等待时看走到哪一步'). It lists concrete outputs (status, progress percentage, phases, log tail, update time), distinguishing it as a monitoring/read tool rather than a synthesis/implementation action.

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 explicitly states when to use: during long-running tasks (10-30 minutes) when you want to check progress without opening the GUI. It does not explicitly contrast with alternatives like get_critical_warnings, but the context is clear enough for an AI agent to select this tool for progress checks.

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

get_timing_reportA

获取结构化时序报告。

执行 report_timing_summary 并解析为结构化摘要 + 关键路径详情。 返回人类可读的中文时序分析报告,包含 PASS/FAIL 状态判定。

Args: session_id: 目标会话 ID。

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idNodefault

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the burden and does disclose that it executes report_timing_summary and parses the result, which gives some insight into its behavior. However, it does not mention potential side effects, session requirements, or whether it is a read-only operation, limiting full transparency.

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 appropriately sized: a one-sentence summary followed by brief internal details and return characteristics. Every sentence adds value and the structure is front-loaded with the core purpose.

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?

The tool has a single parameter, an output schema, and a straightforward purpose. The description covers the purpose, internal execution, and output features (human-readable, Chinese, PASS/FAIL). It lacks explicit usage guidance and parameter elaboration, but is otherwise adequate for a report-generation tool.

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?

Schema description coverage is 0%, so the description must compensate. The only parameter, session_id, is described as '目标会话 ID' (target session ID), which merely restates the parameter name. It does not explain how to obtain the session ID, the meaning of the default value, or any constraints.

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 clearly states the tool retrieves a structured timing report, specifically executing report_timing_summary and parsing it into a summary with critical path details. It differentiates itself from siblings like get_utilization_report and get_io_report by focusing on timing analysis.

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 implies usage context by naming the underlying command (report_timing_summary) and the PASS/FAIL status, but it does not explicitly state when to use this tool versus alternatives like get_critical_warnings or other report tools. No exclusions or alternative recommendations are provided.

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

get_utilization_reportA

获取资源占用摘要(LUT/FF/BRAM/DSP/IO)。

执行 report_utilization -return_string 并从多个表格里抽取核心资源行, 高亮超过 90% 占用的 [CRITICAL] 项和 70-90% 的 [WARN] 项。

典型用途:

  • 综合后检查"LUT 够不够 / BRAM 够不够"

  • 时序收敛困难时先看资源是否超限(> 90% 会导致拥塞)

  • detail=True 进一步看 BRAM 由 RAMB36 还是 RAMB18 组成(优化位宽/级联时用)

Args: detail: True 时末尾附加 Block RAM 明细段(RAMB36/FIFO* / RAMB36E1 only / RAMB18 的 used/available)。默认 False,输出与原有格式一致。 session_id: 目标会话 ID。

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNo
session_idNodefault

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It discloses that it runs a specific TCL command, extracts rows from multiple tables, and adds [CRITICAL]/[WARN] highlighting based on thresholds. It also explains the effect of the detail flag. This goes beyond a simple 'get report' statement, though it doesn't cover error conditions or side effects, which are minimal for a read-only report tool.

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 well-structured and front-loaded with a clear summary sentence. It uses bullet points for typical uses and a dedicated Args section, making it scannable. Some redundancy with the schema exists in the Args block, but it avoids unnecessary jargon or bloat.

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?

Given the tool's simplicity and the presence of an output schema, the description is sufficiently complete. It covers the main use cases, the detail flag behavior, and the highlighting logic. Among many sibling report tools, it clearly differentiates itself by focusing on resource utilization and typical scenarios.

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 provides a thorough explanation of the 'detail' parameter (appending BRAM detail section, effects on output format, default false). However, 'session_id' is only described as '目标会话 ID' (target session ID), which adds minimal meaning beyond the schema's name and default. Only one of the two parameters gains meaningful 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 '获取' (get) and a clear resource scope: LUT/FF/BRAM/DSP/IO utilization. It distinguishes itself from sibling report tools like get_timing_report and get_io_report by focusing on resource utilization and explicitly mentions it executes 'report_utilization -return_string'. This makes the tool's 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?

The '典型用途' (typical uses) section provides concrete scenarios: post-synthesis resource checks, timing congestion diagnosis, and BRAM detail inspection. This gives clear context for when to use the tool. However, it does not explicitly name alternative tools or state when not to use it, so it stops short of full exclusion guidance.

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

inspect_ip_paramsA

查询 IP 实例的所有配置参数(含 GUI 中隐藏的参数)。

通过 Vivado Tcl API 获取指定 IP 的所有 CONFIG.* 属性及其当前值。 支持按关键词过滤(如 "gt"、"loc"、"lane"),不区分大小写。

Args: ip_name: IP 实例名称(如 "xdma_0")。 filter_keyword: 可选过滤关键词(如 "gt"、"loc"、"lane"),不区分大小写。 session_id: 目标会话 ID。

ParametersJSON Schema
NameRequiredDescriptionDefault
ip_nameYes
session_idNodefault
filter_keywordNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It explains it retrieves CONFIG.* properties via Tcl API and supports filtering, but does not explicitly state it is read-only/non-destructive, nor mention behavior on invalid IP names or missing sessions. The description adds some value but lacks safety and error context.

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 concise, with a clear two-sentence overview followed by an Args list. All information is relevant and front-loaded; no wasted words.

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?

The tool has 3 params and no annotations, but the description covers purpose, method, and parameter semantics. Output schema exists so return values are not needed. Minor gaps: no mention of session validity or error behavior, but overall adequate for a read-only inspection tool.

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

Parameters5/5

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

Schema description coverage is 0%, and the description fully compensates with an Args section that explains ip_name with an example, filter_keyword with examples and case-insensitivity, and session_id as target session ID. This provides meaning beyond 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 clearly states the tool queries all configuration parameters (including GUI-hidden ones) for an IP instance, using a specific verb (查询/inspect) and resource (IP config params). This distinguishes it from siblings like run_synthesis or get_io_report, which focus on other objects.

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 implies usage for inspecting IP configuration but does not explicitly state when to prefer this over alternatives or mention conditions like requiring an active session. No exclusions or alternative tool references are provided.

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

list_sessionsA

列出所有活跃的 Vivado 会话及其状态。

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses that only active sessions are returned and includes status, but does not explicitly state that the operation is read-only or has no side effects. The implication is fairly clear for a list operation, but some behavioral context is missing.

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 a single, clear sentence with no redundant words. It efficiently conveys the tool's core function without unnecessary detail.

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?

Given the tool's simplicity (no parameters, no nested objects, output schema exists), the description is sufficient for an agent to understand what it does. It lacks some context about status values, but the output schema likely covers that, so the description is reasonably complete.

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 0 parameters, so the baseline of 4 applies. The description doesn't need to add parameter information, and indeed it doesn't, which is appropriate.

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

Purpose4/5

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

The description clearly states the tool's function: 'List all active Vivado sessions and their status.' This is a specific verb (list) and resource (active Vivado sessions), and it distinguishes from siblings like start_session and stop_session, though it doesn't explicitly name alternatives.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention exclusions or suggest related tools, leaving the agent to infer context from the tool name alone.

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

parse_bit_headerA

离线解析 .bit 比特流文件头部,无需启动 Vivado。

只读文件头(不读 payload):提取设计名 / 目标 part(原始 + 规整)/ 构建日期时间 / 文件 SHA256。用于烧录前防错板(part 比对)、交付/返修对账(确认孤立 .bit 是不是 声称的那版)。Vivado 无任何 Tcl 命令读离线 .bit。 注意:.bit 里 part 去 'xc' 前缀 + 去速度等级(如 7k325tffg900);规整字段补回 'xc' 但速度等级无法还原,与 .xpr 的 part 比对时只能比到 package 级。

Args: file_path: .bit 文件的绝对路径。

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so well. It discloses that the tool is '只读文件头(不读 payload)' (read-only header, does not read payload), indicating no side effects. It also details the normalization behavior (removing 'xc' prefix and speed grade, restoring 'xc' but not speed grade), which is a key behavioral trait affecting output interpretation.

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 structured and front-loaded: it opens with the core purpose, then details the extracted fields, use cases, a key caveat, and finally the argument. Every sentence adds value without redundancy; it is appropriately sized for the tool's complexity.

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 tool has an output schema, so return values need not be repeated, but the description still explains the extracted fields and the part-normalization caveat, giving the user enough context to interpret results. It also covers usage scenarios and limitations, making it complete for a read-only header parser.

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

Parameters5/5

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

The input schema only specifies 'file_path' as a string with no description (0% coverage). The description compensates fully by stating 'Args: file_path: .bit 文件的绝对路径' (absolute path of the .bit file), adding a crucial requirement beyond the schema's type information.

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 clearly states the tool's function: '离线解析 .bit 比特流文件头部' (offline parse .bit bitstream file header), with a specific verb and resource. It also enumerates the extracted fields (design name, target part, build date, SHA256), distinguishing it from siblings like parse_xpr and parse_ltx by file type and offline nature.

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 description explicitly states when to use the tool: '用于烧录前防错板(part 比对)、交付/返修对账' (for pre-programming board error prevention via part comparison, and delivery/repair reconciliation). It also notes that 'Vivado 无任何 Tcl 命令读离线 .bit' (Vivado has no Tcl command to read offline .bit), implying this is the only option, and provides a practical limitation about part-level comparison.

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

parse_ltxA

离线解析 ILA 调试探针文件(.ltx),无需连板 / 启动 Vivado。

连板 ILA 抓波前先离线拿清单:每个 hw_ila 挂哪些 probe、probe 名、位宽、映射的 net。辅助在写 set_property TRIGGER_COMPARE_VALUE eq<位宽>'h.. [get_hw_probes ] 之前确认正确的 probe 名和宽度。get_hw_probes 需板子在手 + 活 hw session,本工具完全离线。Vivado 2019.1 的 .ltx 是 JSON 格式。

Args: file_path: .ltx 文件的绝对路径。

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses key behavioral traits: completely offline, no board connection or Vivado launch required, and that .ltx files are JSON format for Vivado 2019.1. It does not explicitly mention error handling or side effects, but for a read-only parse tool, the offline and format details are sufficient context.

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 starts with a clear, front-loaded summary of the tool's purpose. Each additional sentence adds context (use case, alternative, file format, arguments), but the middle sentence about 'set_property TRIGGER_COMPARE_VALUE' is somewhat verbose and could be tightened. Overall it's appropriately sized with no irrelevant filler, but it leans slightly wordy.

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 tool's simplicity (one parameter, no annotations, and an existing output schema), the description is remarkably complete. It covers the tool's purpose, when to use it, the alternative, the parameter semantics, and the file format. The output schema handles return-value details, so the description need not explain those. This is a well-rounded, self-contained 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 input schema has 0% description coverage, with only a raw string type for file_path. The description compensates by stating '.ltx 文件的绝对路径' (absolute path of the .ltx file), adding meaning beyond the schema: the file extension and absolute path requirement. This directly addresses the parameter's meaning and constraints.

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 clearly states the tool's function: offline parsing of ILA debug probe files (.ltx). It specifies the exact resource (ILA debug probe file), the verb (离线解析/parse), and the context (no board/Vivado needed). This distinguishes it from sibling tools like parse_xpr and parse_bit_header, which target different file types.

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 description explicitly explains when to use this tool: before board-connected ILA capture, to get an offline inventory of probes. It names the alternative (get_hw_probes) and states why this tool is better in that scenario: get_hw_probes requires a board and a live hardware session, while this tool is fully offline. This provides clear usage guidance and comparison.

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

parse_xprA

离线解析 Vivado 工程文件(.xpr),无需启动 Vivado。

秒级摸底陌生工程 / CI 门禁:不启 Vivado(避开 120s GUI 冷启 + 中文路径 TclStackFree 崩),纯 Python 读 .xpr 拿 part / 顶层 / 源文件(按 fileset 分组, 含 .v/.mem/.xci IP)/ XDC 约束 / synth+impl runs 及 Strategy。 对照 get_project_info(需先 start_session + open_project),本工具完全离线。

Args: file_path: .xpr 工程文件的绝对路径。

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

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

With no annotations, the description carries the transparency burden. It reveals key behavioral traits: it is pure Python, runs fully offline, and does not start Vivado, avoiding known crashes. It also lists the exact data it extracts (part, top, source files, XDC, runs). However, it does not explicitly state it is read-only or what happens with malformed .xpr files, leaving a small gap in completeness.

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 well-structured and information-dense: it starts with purpose, then usage context, then extracted data, and ends with parameter details. Every sentence adds value, and it avoids redundancy or filler. Despite its length, it remains focused and readable.

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 tool's moderate complexity (multiple output categories) and the presence of an output schema, the description covers all needed context: what the tool does, when to use it, how it differs from alternatives, and the parameter semantics. The output schema handles return structure, so the description is complete for an agent to select and invoke the tool correctly.

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

Parameters5/5

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

Schema coverage is 0%, but the description explicitly documents the only parameter: 'file_path: .xpr 工程文件的绝对路径', which adds the crucial requirement of an absolute path beyond the schema's bare 'File Path'. This fully compensates for the lack of schema description and leaves no ambiguity.

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 clearly states a specific action ('离线解析 Vivado 工程文件(.xpr)') and resource (.xpr files), and explicitly distinguishes from sibling get_project_info by noting that this tool is fully offline while the alternative requires start_session and open_project. This makes the purpose unambiguous and differentiates from similar tools.

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 description gives concrete use cases ('秒级摸底陌生工程 / CI 门禁') and contrasts with get_project_info, providing clear guidance on when to use this tool (offline, no Vivado) versus alternatives (session-based tools). It also mentions avoiding 120s GUI cold start and TclStackFree crash, which are specific reasons for choosing this tool.

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

program_deviceA

编程 FPGA 设备。封装 open_hw_manager → connect → program 多步操作。

只烧 .bit 进 FPGA(掉电即丢)。要掉电自启动须烧 SPI flash,见下面配方。

烧 flash 配方(2019.1,run_tcl 逐步执行):

  1. 查 flash 型号: get_cfgmem_parts -of [lindex [get_hw_devices] 0] (或按板上 flash 用 -filter 选,如 mt25ql128-spi-x1_x2_x4)

  2. 生成 .mcs: write_cfgmem -format mcs -size 16 -interface SPIx4 -loadbit {up 0x0 <top>.bit} -force out.mcs

  3. 建 cfgmem 对象: create_hw_cfgmem -hw_device [current_hw_device] [lindex [get_cfgmem_parts <part>] 0]

  4. 设属性四件套: set_property PROGRAM.FILES {out.mcs} [current_hw_cfgmem]

    • PROGRAM.ERASE 1 / PROGRAM.CFG_PROGRAM 1 / PROGRAM.VERIFY 1

  5. 烧写: program_hw_cfgmem

  6. 烧后 boot_hw_device [current_hw_device] 或断电重启从 flash 加载。 (Zynq 用 .bin: write_cfgmem -format bin -interface SMAPx32 ...)

Args: bitstream_path: 比特流文件路径(.bit 文件)。 target: 目标设备过滤器,默认 "*"(第一个可用设备)。 hw_server_url: 硬件服务器地址,默认 "localhost:3121"。 session_id: 目标会话 ID。

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNo*
session_idNodefault
hw_server_urlNolocalhost:3121
bitstream_pathYes

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?

With no annotations, the description carries full behavioral burden. It discloses the volatile nature of .bit programming and outlines the internal sequence (open_hw_manager → connect → program). It also provides a comprehensive flash recipe, shedding light on what the tool does not do. However, it does not mention potential side effects like interrupting a running design or requiring a live hardware server.

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

Conciseness3/5

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

The description is front-loaded with purpose and scope, but the extensive flash recipe adds significant bulk. While the recipe is useful, it is tangential to the tool's own parameters and could be summarized or referenced. The core description is efficient, but the overall length reduces conciseness.

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?

The description provides rich context for a hardware programming tool: it clarifies the volatile/flash distinction, gives a full alternative procedure, and defines all parameters. It does not mention prerequisites like hardware server availability or error handling, but the presence of an output schema reduces the need to explain return values. Overall, it is sufficiently complete for its complexity.

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 explains every parameter: bitstream_path as the .bit file, target as a filter defaulting to the first device, hw_server_url as the server address, and session_id as target session ID. This exceeds the bare schema, though target filter syntax and session ID requirements could be more detailed.

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 starts with '编程 FPGA 设备' (program FPGA device), clearly stating the verb and resource. It further specifies that it wraps the multi-step open_hw_manager → connect → program operation and explicitly notes it only burns .bit files to FPGA, distinguishing it from flash programming and sibling tools like generate_bitstream.

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 description gives explicit usage guidance: use this tool for volatile .bit programming, and for persistent boot use the provided SPI flash recipe via run_tcl. It even includes step-by-step TCL commands as an alternative, making the distinction clear and actionable.

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

run_implementationA

启动实现(布局布线);默认等待完成,也可异步提交。

不调用 Tcl wait_on_run(会阻塞 Vivado event loop,GUI 模式冻住界面); wait=True 时 Python 每 2 秒查一次 STATUS/PROGRESS;wait=False 时立即 返回 job_id,随后用 get_run_progress 查询。

Args: run_name: 实现 run 名称,默认 "impl_1"。 jobs: 并行任务数,默认 4。 timeout_minutes: 超时分钟数,默认 60。 session_id: 目标会话 ID。 wait: True 等待完成并诊断;False 启动后立即返回 job_id。

ParametersJSON Schema
NameRequiredDescriptionDefault
jobsNo
waitNo
run_nameNoimpl_1
session_idNodefault
timeout_minutesNo

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?

No annotations exist, so the description carries full burden. It discloses that it avoids blocking Tcl wait_on_run due to GUI freeze, polls STATUS/PROGRESS every 2 seconds when waiting, and returns a job_id immediately when wait=False. Missing details include return value for wait=True, error handling, and preconditions.

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 well-structured: a one-line summary, a focused explanation of wait behavior and rationale, and a clear Args list. Every sentence adds value and there is no redundancy.

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

Completeness3/5

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

An output schema exists, so missing return descriptions are not penalized. However, preconditions (e.g., synthesis must be completed first) and postconditions (what 'diagnose' entails) are not addressed. The timeout behavior is only mentioned as a parameter, not what occurs on timeout.

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 all 5 parameters in the Args section (run_name, jobs, timeout_minutes, session_id, wait) with their defaults and meaning. It does not provide constraints or examples, but the explanations are clear.

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 clearly states '启动实现(布局布线)' (start implementation/place-and-route), using a specific verb and resource. It distinguishes itself from siblings like run_synthesis and generate_bitstream by naming the implementation step.

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 explains when to use wait=True vs wait=False and directs the user to query with get_run_progress after async submission. However, it does not explicitly state that synthesis should be run first or when not to use this tool.

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

run_synthesisA

启动综合;默认等待完成,也可异步提交后查询状态。

不调用 Tcl wait_on_run(会阻塞 Vivado event loop,GUI 模式冻住界面); wait=True 时 Python 每 2 秒查一次状态并上报进度;wait=False 时立即 返回 job_id,随后用 get_run_progress 查询。

Args: run_name: 综合 run 名称,默认 "synth_1"。 jobs: 并行任务数,默认 4。 timeout_minutes: 超时分钟数,默认 30。 session_id: 目标会话 ID。 wait: True 等待完成并诊断;False 启动后立即返回 job_id。

ParametersJSON Schema
NameRequiredDescriptionDefault
jobsNo
waitNo
run_nameNosynth_1
session_idNodefault
timeout_minutesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It discloses the blocking concern, the 2-second polling interval, progress reporting, and the immediate return of job_id for async mode. However, it does not mention side effects such as whether an existing run is overwritten, permissions required, or failure behavior beyond the vague 'diagnose' term.

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 well-structured with an initial summary, a behavioral note, and a clear Args list. It's somewhat longer than minimal but every sentence adds value, particularly the explanation of the event-loop issue and parameter semantics. It earns its length without being bloated.

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?

The description covers the main workflow (sync/async), all parameters, and references get_run_progress for follow-up. An output schema exists, so return values need not be detailed. Gaps include the precise meaning of 'diagnose' and preconditions like active session, but overall it is sufficiently complete for a synthesis launch tool.

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

Parameters5/5

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

Schema description coverage is 0%, and the description compensates fully by explaining all five parameters (run_name, jobs, timeout_minutes, session_id, wait) with their meanings and defaults. This is exactly what the schema lacks, making the description the primary source of parameter understanding.

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 clearly states the tool's verb and resource: '启动综合' (start synthesis). It also distinguishes itself by explaining both synchronous (wait=True) and asynchronous (wait=False) behavior, which differentiates it from sibling tools like run_implementation and get_run_progress.

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?

Explicitly provides when/when-not usage: wait=True waits for completion and diagnoses, while wait=False immediately returns job_id and directs the user to use get_run_progress for status. It also explains why it doesn't call Tcl wait_on_run (to avoid blocking the Vivado event loop), giving clear rationale for the recommended polling approach.

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

run_tclA

执行任意 Vivado Tcl 命令。支持所有 Vivado Tcl API。

这是最通用的工具,可以执行任何 Vivado Tcl 命令,包括:

  • 项目: create_project, open_project, add_files, set_property top

  • 约束: create_clock, set_property PACKAGE_PIN

  • IP: create_ip, generate_target, set_property CONFIG.*

  • Block Design: create_bd_design, create_bd_cell, connect_bd_intf_net

  • 查询: get_ports, get_cells, get_property STATUS [get_runs]

  • 报告: report_utilization -return_string, report_timing_summary -return_string

  • 仿真: launch_simulation, run 100ns, add_wave

  • 以及任何其他 Vivado Tcl 命令

支持多行脚本(用换行符分隔)。

路径含特殊字符时请用 safe_tcl 而非 run_tcl,避免 Tcl 解析错误。

XSim 仿真常见坑摘要(0.3.17 实战沉淀,下面即完整清单):

  • add_wave_group 必须配 -into $g,否则信号全跑到顶层,group 是空的:

    set g [add_wave_group sig_grp]
    add_wave -into $g /tb/clk     ;# ✓ 进 group
    add_wave /tb/rst              ;# ✗ 跑到顶层
  • add_wave / get_objects 拒 escaped id,必须先 current_scope 切到目标 scope 再用 short name:

    # ✗ add_wave {\u_dut/sig}
    current_scope /tb/u_dut       ;# ✓ 切上下文
    add_wave sig
  • get_scopes 不支持多 path 参数,一次只能查一个 scope,多个要 foreach 逐个:

    # ✗ get_scopes /tb/u_dut /tb/u_ctrl
    foreach __p {/tb/u_dut /tb/u_ctrl} { puts "$__p: [get_scopes $__p]" }
  • size > 1 filter 对 escaped id 总线对象无效且不报错(其 size 属性可能 =1,静默漏数据)。筛总线别依赖 size,改用 regexp NAME 匹配 \[.*:.*\] 总线命名约定。

  • 清空波形只认 remove_wave [get_waves *],-all / * / -of_objects 都 不工作(XSim 2019.1 bug)

  • xsim -tclbatch 文件必须显式 quit,EOF 不自动退出,会卡死 CI

  • if-generate 命名块不是 scope —— 内部 reg 无 add_wave 寻址路径

  • [N] / [X] 在 Tcl 字符串里会触发命令替换,用 {} 包字面路径:

    # ✗ add_wave /tb/gen_ch[0].u/sig    invalid command "0"
    add_wave {/tb/gen_ch[0].u/sig}
  • marker 复位 = 磁盘 wcfg 干净时重载。marker 存在 .wcfg 的 <wave_markers><marker time="..fs"/></wave_markers>,清掉/复位用一行:

    close_wave_config -force          ;# 丢内存里的脏 marker
    open_wave_config C:/path/wave.wcfg ;# 从干净磁盘文件重载

set_property / radix 写脚本陷阱(0.3.20 实战沉淀,无 err 静默踩):

  • -filter "name =~ {...[$var]...}" 会污染后续 set_property 静默失败[$var] 触发 Tcl 命令替换,虽然 get_scopes 内部 fallback 仍返回正确对象, 但污染后续 wave property 路径,set_property RADIX dec $w 静默不生效。 改用 foreach + regexp 自己过滤,绕开 filter 字符串里的 [$var]

  • set_property RADIX value 大小写敏感(大多数 Vivado property 是大小写 不敏感的,这条是反直觉的例外):

    set_property RADIX dec $w   ;# ✓ RADIX=dec
    set_property RADIX DEC $w   ;# ✗ 静默退回 RADIX=default,不报错
  • add_wave -radixset_property RADIX 接受的 value 集合不一致:

    add_wave -radix : default | dec | bin | oct | hex | unsigned | ascii | smag
    set_property RADIX: dec | hex(其他实测未通过;大写一律不接受)

    signed decimal 在 XSim 叫 dec,不是 signed(从 ModelSim/QuestaSim 带过来的命名习惯会踩)。

  • Analog 波形可纯 Tcl 渲染(早期文档误判"无 Tcl 接口"的真根因)。 WaveformStyle 不在 list_property $w / set_property 全集里,要用专用命令 set_wave_prop。当年踩坑是因为值写成了裸 ANALOG——Vivado 收下不报错但 渲染器不认,只改属性值不渲染(静默接受陷阱)。正确值必须带 STYLE_ 前缀, 且信号寻址有两个静默坑(实测 2019.1):

    # ★ get_waves 按"显示名"(如 y0[15:0])/glob 匹配,传全路径 /tb/y0 返回空!
    #   且 set_wave_prop 对空对象 rc=0 静默接受 → 信号没 add 会伪装成功,务必先判空。
    set w [get_waves -quiet y0*]   ;# 用显示名/glob;或遍历 get_waves * 按 DESIGN_OBJECT 全路径过滤
    if {[llength $w]} {
      set_wave_prop WaveformStyle STYLE_ANALOG $w  ;# ★ 裸 ANALOG 静默吞值不渲染
      set_wave_prop AnalogMin -2048 $w             ;# 贴数据范围:太宽压平,太窄削顶
      set_wave_prop AnalogMax  2047 $w
      set_wave_prop AnalogInterpolation LINEAR $w
      set_property HEIGHT 80 $w                     ;# 存为 CellHeight
    }
    • 无法 Tcl 读回:get_wave_prop 不存在、report_wave_props 输出不可捕获, 设完只能人眼确认渲染(MCP set_wave_analog 工具已封装寻址 + STYLE_ 前缀)。

    • 重载冲掉 analog:先定好 zoom 再实时上 analog,别先改 analog 再 open_wave_config。

    • wcfg 磁盘路径属性是 FILE_PATH(不是 FILE_NAME,后者报 [Common 17-54]): get_property FILE_PATH [current_wave_config](MCP set_wave_zoom 改 zoom_setting 用此)。

Args: command: Tcl 命令文本(支持多行)。 session_id: 目标会话 ID,默认 "default"。 timeout: 命令执行超时秒数,默认 120。注意超时语义:超时只是 MCP 停止 等待并返回错误,命令在 Vivado 里仍在继续跑(不会被取消),后续 命令会排队等它跑完。长任务(综合/实现/比特流)请改用 run_synthesis / run_implementation / generate_bitstream (Python 轮询不阻塞),或按预期耗时调大本值。

ParametersJSON Schema
NameRequiredDescriptionDefault
commandYes
timeoutNo
session_idNodefault

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?

With no annotations provided, the description carries the full burden of disclosing behavior. It is exceptionally transparent: it explains that timeout only stops MCP waiting, not command execution; it documents many silent XSim pitfalls (e.g., add_wave_group requiring -into, escaped-id rejection, get_scopes multi-path failure, size filters being ineffective); and it warns about set_property RADIX case-sensitivity and other silent traps. This goes far beyond a typical description.

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 very long, but it is well-structured with clear sections (general examples, XSim pitfalls, set_property/radix traps) and front-loaded with the core purpose. It is information-dense and every section provides practical value, though it is verbose enough to be a token burden for an LLM; slight trimming would make it more concise.

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 tool's high complexity, zero schema coverage, and no annotations, the description is remarkably complete. It covers when to use alternatives, parameter semantics, timeout behavior, known bugs, silent failure modes, and concrete workarounds. The presence of an output schema means return values need not be described in detail, and the description exceeds what is necessary for effective tool invocation.

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

Parameters5/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 does: command is explained as Tcl text with multiline support and many examples; session_id is labeled as target session with default 'default'; timeout is explained with default 120 and detailed semantics about how timeout behaves (MCP stops waiting but command continues in Vivado). This gives the agent far more parameter understanding than 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 opens with a specific verb and resource: '执行任意 Vivado Tcl 命令' (execute any Vivado Tcl command), and explicitly lists supported domains with concrete examples. It distinguishes itself from siblings by naming safe_tcl as an alternative for paths with special characters and referring long-running tasks to dedicated tools like run_synthesis.

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 description provides explicit when-to-use guidance: it is the most generic tool for any Vivado Tcl command. It gives clear exclusions: use safe_tcl for special-character paths, and use run_synthesis/run_implementation/generate_bitstream for long tasks. It also explains timeout semantics with behavioral consequences, helping the agent decide when to set a larger timeout or use a different tool.

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

safe_tclA

执行带参数的 Tcl 命令模板,自动用 Tcl list 规则转义参数。

适用场景:命令中含文件路径、端口名、字符串值等可能有特殊字符的输入。 Tcl 的 $[]{}、反斜杠、空格都会被正确转义,防注入且防解析错。

用法示例:

  • safe_tcl("create_project {0} {1} -part {2}", args=["my_proj", "C:/path with space", "xc7a35tcpg236-1"])

  • safe_tcl("read_verilog {0}", args=["C:/files/top with $dollar.v"])

  • safe_tcl("set_property PACKAGE_PIN {0} [get_ports {1}]", args=["W5", "clk"])

template 用 Python format 的 {0} / {1} 占位符,args 中每个元素会被 tcl_quote() 包装成 "..." 并转义所有特殊字符。

Args: template: Tcl 命令模板,用 {0}/{1}/... 表示参数位置。 args: 参数值列表,将被自动转义。 session_id: 目标会话 ID,默认 "default"。 timeout: 命令执行超时秒数,默认 120。

ParametersJSON Schema
NameRequiredDescriptionDefault
argsNo
timeoutNo
templateYes
session_idNodefault

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?

With no annotations, the description carries the full burden and does well by disclosing the escaping mechanism (tcl_quote), placeholder syntax, and default session/timeout values. It misses any mention of error handling or side effects, but the safety-critical behavioral context is well covered.

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 well-structured with opening summary, use cases, examples, and parameter list. It is slightly verbose with repeated emphasis on escaping, but every element contributes to clarity and 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?

Given the tool's complexity and lack of annotations, the description covers primary use cases, parameter semantics, and security behavior. It does not address error handling or explicitly contrast with run_tcl, but the presence of an output schema reduces the need to describe return values.

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

Parameters5/5

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

Schema coverage is 0%, but the description compensates fully by explaining each parameter: template placeholders, args escaping behavior, session_id default, and timeout default. Concrete examples illustrate usage, adding significant meaning beyond raw schema types.

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 clearly states it executes parameterized Tcl command templates with automatic escaping using Tcl list rules, giving specific verb+resource. The examples further clarify its purpose and implicitly differentiate it from raw Tcl execution tools like run_tcl.

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 explicitly lists applicable scenarios (commands with file paths, port names, string values containing special characters) and highlights prevention of injection and parse errors. However, it does not explicitly say when NOT to use it or compare it directly with sibling tools like run_tcl.

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

set_wave_analogA

把信号设为模拟(Analog)波形显示(纯 Tcl 配方,实测 Vivado 2019.1 可渲染)。

本地价值(§1.3 条件2 本地知识库,三个实测静默坑):

  1. WaveformStyle 必须传 STYLE_ANALOG(带 STYLE_ 前缀);裸传 ANALOG 时 Vivado 收下 不报错但渲染器不认,只显示数字格。推翻早期"Analog 无 Tcl 接口只能 GUI 右键"的误判。

  2. get_waves 只匹配显示名(y0[15:0])/glob,直接传全路径 /tb/y0 返回空;工具自动按 DESIGN_OBJECT(全路径)/FULL_NAME/显示名解析,不命中才报 add_wave。

  3. set_wave_prop 对空对象 rc=0 静默接受(信号没 add 会伪装成功),工具先判空再 set。 wave 属性无 get 接口(get_wave_prop 不存在),无法 Tcl 读回校验,渲染请人眼确认。

⚠ 顺序硬约束:必须在 set_wave_zoom 之后调——zoom 重载(close+open wcfg)会冲掉 先设的 analog prop。 ⚠ AnalogMin/Max 必须成对显式传(贴数据范围:太宽压平、太窄削顶)。从仿真数据 自动算幅需 live 采样、数据源未定,本版本不做 auto。

Args: signals: 信号列表(短名或全路径,须已 add_wave 进波形)。 min: AnalogMin(必传,与 max 成对)。 max: AnalogMax(必传,与 min 成对)。 interp: 插值方式,白名单 LINEAR / HOLD。 height: 行高像素(存盘后在 wcfg 里叫 CellHeight)。 session_id: 目标会话 ID。

ParametersJSON Schema
NameRequiredDescriptionDefault
maxNo
minNo
heightNo
interpNoLINEAR
signalsYes
session_idNodefault

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

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

With no annotations, the description fully carries behavioral disclosure. It reveals multiple silent pitfalls: bare 'ANALOG' isn't rendered, get_waves doesn't match full paths, set_wave_prop silently succeeds on empty objects, min/max must be paired, and no Tcl readback is possible. These are crucial behaviors beyond what schema or annotations could provide.

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?

Though lengthy, the description is well-structured with bullet points and warnings. Every sentence adds local knowledge or constraints that cannot be derived from schema. It front-loads the core purpose and separates pitfalls, ordering, and parameters logically. No redundant or vague sentences.

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 six-parameter tool with high complexity and no annotations, the description covers all necessary context: ordering constraints, parameter semantics, silent failure modes, and verification limitations. The presence of an output schema means return values don't need elaboration, but the description still addresses verification by saying 'render please confirm visually'. It is fully complete for correct invocation.

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

Parameters5/5

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

Schema description coverage is 0%, and the description compensates completely. Each parameter is given meaningful semantics: signals can be short/full paths and must be added; min/max must be explicitly supplied in pairs; interp is whitelisted; height corresponds to CellHeight in wcfg; session_id targets a session. This exceeds schema's bare type definitions.

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 clearly states the tool sets signals to Analog waveform display in Vivado, with a specific verb and resource. It distinguishes itself from siblings like set_wave_zoom by focusing on analog properties rather than zoom. The added context about resolved signal names and rendering makes 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 Guidelines5/5

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

The description explicitly states the hard ordering constraint ('must be called after set_wave_zoom') and explains why, along with prerequisite signals must be added. It also notes when automatic amplitude calculation is not supported. This gives clear when-to-use context, plus a reference to a sibling tool, though it doesn't name alternatives explicitly.

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

set_wave_zoomA

设置波形时间缩放窗口(改 wcfg XML 后 close -force + open 重载)。

本地价值(§1.3 条件3 跨命令协议):Vivado 2019.1 无 Tcl zoom 命令,缩放窗存在 .wcfg 的 里,要改它再让 XSim 重载。重载顺序极易踩—— close 漏 -force 报 [Wavedata 42-26];同名 wcfg 已 open 时直接 open 报 42-52, 故必须先 close 再 open。本工具封装这条多步协议。

⚠ wcfg 未保存(current_wave_config 的 FILE_PATH 为空)时返回明确错误,要求先 save_wave_config——不自动存盘(避免擅自改用户磁盘文件)。 ⚠ close_wave_config -force 会丢弃所有未存盘的 live wave prop(含手设的 radix/ analog),故先 set_wave_zoom 再 set_wave_analog。

Args: start_ns: 缩放起始时间(ns),须 < end_ns。 end_ns: 缩放结束时间(ns)。 wcfg: 显式 wcfg 磁盘路径;缺省自动解析 current_wave_config。 session_id: 目标会话 ID。

ParametersJSON Schema
NameRequiredDescriptionDefault
wcfgNo
end_nsYes
start_nsYes
session_idNodefault

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

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

With no annotations, the description fully discloses behavior: it modifies the wcfg XML and triggers a reload, it does not auto-save (avoiding unsolicited disk writes), it returns an error when wcfg is unsaved, and it discards unsaved live wave properties due to close -force. These side effects are explicitly warned, going beyond generic descriptions.

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 long but front-loaded with the primary purpose, followed by rationale, warnings, and parameter details. Each section earns its place: the protocol explanation is necessary for correct usage, and the Args block is clear. Despite the length, it remains well-structured and scannable.

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 tool's complexity (multi-step XML editing and reload protocol, multiple side effects, prerequisites), the description is remarkably complete. It covers error conditions, ordering with sibling tools, unsaved file handling, and parameter semantics. The presence of an output schema means return values need not be described, so no essential context is missing.

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

Parameters5/5

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

Schema description coverage is 0%, so the description takes full responsibility for parameter documentation. It explains start_ns and end_ns (with the constraint start < end), wcfg (explicit path or auto-resolution), and session_id. This fully compensates for the empty schema descriptions.

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 clearly states the tool's function: setting the waveform time zoom window. It explains the mechanism (modify wcfg XML then close -force + open reload), and distinguishes itself from sibling set_wave_analog by focusing on zoom rather than analog properties. The verb '设置' plus the specific resource '波形时间缩放窗口' is precise.

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 description provides explicit when-to-use guidance, including the prerequisite that the wcfg must be saved (error if not, requiring save_wave_config), and the ordering constraint to call set_wave_zoom before set_wave_analog. It also explains the pitfalls of the reload sequence (missing -force or opening an already-open wcfg). This is detailed operational guidance.

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

start_sessionA

启动一个新的 Vivado 会话。

三种模式:

  • "gui" (默认) — MCP 自动 spawn vivado -mode gui,你能看到 Vivado 图标 并实时观察 Tcl Console / Block Design / 波形等 GUI 内容。首次使用会自动 通过 -source 注入 TCP server,或先运行一次 vivado-mcp install 持久化。

  • "tcl"vivado -mode tcl 无头子进程(无 GUI,适合 CI / 批处理)。

  • "attach" — 连接到用户已手动打开的 Vivado GUI(需先运行 vivado-mcp install 让 init.tcl 自动开启 TCP server)。

每个 session_id 对应一个独立的会话句柄;同 session_id 再次调用会复用现有会话 (会话模式自动复用)。多开独立 GUI 实例见下方 port 说明。

Args: session_id: 会话标识符,默认 "default"。 mode: "gui" / "tcl" / "attach",默认 "gui"。 port: TCP 端口语义(B 方案): - gui 默认 9999:先 probe 9999,命中现有 vmcp server 则直接复用/ attach(单 GUI 自动复用,也避免抢端口产生孤儿);无则 spawn 并绑 9999。 - 多开独立实例:传 port=0 自动分配一个空闲端口启动全新实例(零手动 配端口、跳过 probe),或给不同端口的显式值。注意:不传 port 时即便换 session_id 也会 probe/attach 到 9999 的同一个 GUI(不会自动多开),要独立 实例就传 port=0 或显式不同端口。 - attach 模式:要连接的现有 GUI 的显式端口(默认 9999)。 vivado_path: 可选,自定义 Vivado 可执行文件路径。留空则自动检测。 timeout: 启动超时秒数,GUI 模式建议 120+。默认 120。

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNogui
portNo
timeoutNo
session_idNodefault
vivado_pathNo

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?

With no annotations provided, the description carries the full behavioral burden and does so richly: it discloses process spawning, TCP server injection via -source, port 9999 probing, session reuse behavior, and the warning that omitting port will attach to the same GUI rather than create a new one. This is exactly the kind of non-obvious behavioral context agents need.

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 well-structured with a mode list and an Args block, and every major section adds value. It is lengthy and dense, especially the port semantics (including the 'B 方案' reference), which makes it slightly heavier than ideal for quick consumption, but it remains organized and useful.

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?

This is a complex tool with 5 parameters, no annotations, and no per-parameter schema descriptions, yet the description covers modes, session lifecycle, port probing, custom path, and timeout. An output schema exists, so return-value details are unnecessary. The description is complete enough for correct tool invocation without any external documentation.

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

Parameters5/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, and it does: the Args block explains session_id, mode, port, vivado_path, and timeout, and adds critical port semantics including port=0 for allocating a fresh instance. This fully replaces what would normally be in parameter descriptions.

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 '启动一个新的 Vivado 会话' (start a new Vivado session), stating a clear verb and resource. It distinguishes itself from siblings like stop_session and list_sessions by focusing on the launch/creation aspect, and further clarifies the three operating modes (gui, tcl, attach).

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?

Usage guidance is explicit for choosing modes: 'tcl' for headless CI/batch, 'attach' for connecting to an existing GUI, and 'gui' as the default. Port semantics for multi-instance vs reuse are also spelled out in detail. It lacks explicit 'do not use' exclusions, but the alternatives are clearly delineated.

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

stop_sessionC

关闭指定的 Vivado 会话。

Args: session_id: 要关闭的会话标识符。

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idNodefault

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description must convey behavioral traits. It only states 'close the session' without disclosing side effects (e.g., terminating running processes, losing unsaved data) or the tool's safety profile. This is a bare statement with no added transparency.

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

Conciseness3/5

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

The description is very short and free of fluff, but the brevity borders on under-specification. It is not structured to front-load practical information, and the Args section already appears in the schema, adding redundancy.

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

Completeness2/5

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

With no annotations and minimal description, the tool lacks completeness for an agent to understand the full context of stopping a session. The output schema exists, but the description does not clarify the return behavior or the impact on related sessions. Given the simple purpose, some context is still necessary, especially regarding killing active operations.

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?

Schema description coverage is 0%, so the description must compensate for parameter meaning. It repeats the parameter name 'session_id' and describes it as the session identifier to close, which adds little beyond the schema's title 'Session Id'. The default value 'default' is not explained, and there is no elaboration on accepted formats or behaviors.

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 clearly states the tool closes a specified Vivado session, using a specific verb ('关闭') and a distinct resource ('会话' = session). This differentiates it from sibling tools like start_session or list_sessions.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives, nor any mention of preconditions or typical use cases. The description only states what it does, not when to use it, leaving the agent without selection context.

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

verify_io_placement_toolA

验证 IO 引脚分配:比对 XDC 约束与实际布局。

自动读取项目 XDC 文件中的 PACKAGE_PIN 约束(支持 -dict 和传统两种语法), 与 report_io 的实际分配结果对比,发现 GT 引脚交叉等严重错误。

GT 端口不匹配标记为 CRITICAL,GPIO 端口标记为 WARNING。

Args: session_id: 目标会话 ID。

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idNodefault

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?

With no annotations, the description carries the full burden. It discloses the tool auto-reads XDC files, supports both -dict and traditional syntax, compares with report_io, and classifies mismatches as CRITICAL (GT) or WARNING (GPIO). This provides clear behavioral insight beyond what structured fields offer, though it does not explicitly state read-only or side effects (likely none for a verification tool).

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 concise and well-structured: purpose statement, detailed behavior, severity rules, then parameter list. It is front-loaded with the main action and every sentence adds value without redundancy.

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?

The tool is moderately complex (reads XDC, compares with report_io, outputs severity). The description covers what it does and its severity logic. It does not mention prerequisites (e.g., whether report_io must already be generated) or return structure, but since an output schema exists (context indicates), the description needn't detail return values. Overall, it's sufficiently complete for an agent to invoke.

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 input schema has one parameter (session_id) with no description in the schema (0% coverage), so the description must compensate. It provides a concise but adequate meaning: '目标会话 ID' (target session ID). For a single optional param with a default, this is sufficient, though it could have added more context about how session_id affects which XDC/report is used.

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 clearly states the tool's purpose: '验证 IO 引脚分配' (verify IO pin assignment) and specifies it compares XDC constraints with actual layout. It distinguishes itself from siblings like xdc_lint (syntax checking) and get_io_report (report retrieval) by focusing on the comparison and error detection.

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 implies when to use the tool (when you need to verify IO pin consistency between XDC and actual placement) and gives context (reads PACKAGE_PIN constraints, compares with report_io). However, it does not explicitly state when not to use it or name alternative tools, but the purpose is clear enough for an agent to select it appropriately.

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

verilog_compile_checkA

用 iverilog / verilator 做 Verilog 语法 + 连接性检查(比 Vivado 综合快 50 倍)。

典型用途:写完或改完 RTL 想在几秒内确认"能不能过综合",不用等 30-60s Vivado。 需要机器上装 iverilog 或 verilator: Windows: scoop install iverilog / choco install verilator Linux: apt install iverilog / apt install verilator macOS: brew install icarus-verilog / brew install verilator

检查模式:

  • iverilog -t null:只做 parse + elaboration,不产物

  • verilator --lint-only -Wall:静态检查,风格警告也给(更严格)

未装任何工具时返回 SKIP 并附安装指引,不报错。

Args: files: Verilog / SystemVerilog 文件路径列表(.v / .sv)。 .vhd/.vhdl 不支持,返回 SKIP 并附替代方案指引(check_syntax)。 tool: "auto"(默认,优先 iverilog) / "iverilog" / "verilator"。 timeout: 子进程超时秒数,默认 30。

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNoauto
filesYes
timeoutNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

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

With no annotations provided, the description carries the full transparency burden. It discloses that the tool returns SKIP with installation guidance when iverilog/verilator are missing, returns SKIP for VHDL files with alternative guidance, and notes that iverilog -t null produces no artifacts. It also documents both tool modes and timeout behavior.

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 well-organized and front-loaded, starting with purpose and typical use, then covering installation, modes, and parameters. Every section serves a purpose and no content is filler; the length is justified by the tool's complexity.

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 tool's moderate complexity, the presence of an output schema, and the fact that this description lacks annotations, it is remarkably complete. It covers input requirements, tool selection, timeout, unsupported files, and failure modes, leaving no critical ambiguity for an agent.

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

Parameters5/5

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

The schema has 0% description coverage, so the description fully compensates by explaining every parameter: files accepts .v/.sv and rejects .vhd/.vhdl with a SKIP, tool supports auto/iverilog/verilator with default auto, and timeout is subprocess timeout defaulting to 30. This adds substantial meaning beyond 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 clearly states the tool performs Verilog syntax and connectivity checks using iverilog/verilator, and positions it as a fast alternative to Vivado synthesis. This is a specific verb+resource combination that distinguishes it from synthesis-related sibling tools.

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 indicates when to use the tool (after writing/modifying RTL, for quick verification before synthesis) and when not to use it (for .vhd/.vhdl files, where it returns SKIP and recommends check_syntax). It also explains behavior when tools are not installed, providing clear context for invocation.

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

xdc_auto_fixA

自动修复 XDC 文件中能安全自修的问题(MISSING_IOSTANDARD / CLOCK_NO_PERIOD)。

默认 dry_run=True 只预览补丁,确认无误后调用 dry_run=False 实际写回。 写回前会为每个被修改文件生成同名 .bak 备份;注意 .bak 只保留最近一次 修改前的版本(再次写回会覆盖上一次的 .bak,与 sed -i.bak 同语义)。

只修这两类问题(其他需要人工判断):

  • MISSING_IOSTANDARD —— 在 PACKAGE_PIN 行之后插入 IOSTANDARD 语句

  • CLOCK_NO_PERIOD —— 仅当 board 已知时补 -period;未知板跳过

绝对不碰:

  • PIN_CONFLICT / DUPLICATE_PORT / PIN_CONFLICT_CROSS_FILE(冲突问题必须人改)

Args: xdc_paths: XDC 文件路径列表。不传则从当前 session 的项目里抓。 board: 板卡名,影响默认 IOSTANDARD 和时钟周期。支持: basys3 / nexys-a7 / arty-a7 / zybo / kc705。留空用 LVCMOS33 兜底。 dry_run: True(默认)只输出补丁预览不改文件;False 实际写回。 session_id: 目标会话 ID(仅在不传 xdc_paths 时使用)。

ParametersJSON Schema
NameRequiredDescriptionDefault
boardNo
dry_runNo
xdc_pathsNo
session_idNodefault

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?

With no annotations provided, the description fully covers the tool's behavior: dry-run preview mode, backup creation per file, .bak only keeping the latest version before write-back (with sed -i.bak semantics), insertion logic for IOSTANDARD after PACKAGE_PIN, and skipping CLOCK_NO_PERIOD when the board is unknown. It also states which issue types are intentionally not handled, making side effects and boundaries explicit.

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 well-structured with a main purpose, operational notes, explicit inclusion/exclusion lists, and a parameter breakdown. It is concise for the complexity involved, with every sentence contributing to understanding or safe usage. The use of bullets and clear headings (e.g., '只修', '绝对不碰') aids readability.

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 tool's complexity (mutating files, multiple parameters, safety implications) and lack of annotations, the description is exceptionally complete. It explains side effects (backup, overwrite), edge cases (unknown board), and provides a safe workflow. The presence of an output schema means return-value details are not required, and the description covers all other necessary contextual information.

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

Parameters5/5

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

Schema coverage is 0%, but the description thoroughly explains every parameter: xdc_paths (list, defaults to session project), board (supported values and fallback to LVCMOS33), dry_run (preview vs write-back), and session_id (used only when xdc_paths is omitted). It adds default values and cross-parameter dependencies, fully compensating for the lack of schema descriptions.

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 clearly states it automatically fixes self-safely fixable issues in XDC files, specifically MISSING_IOSTANDARD and CLOCK_NO_PERIOD. It distinguishes itself from sibling tools by explicitly limiting its scope to these two issue types and stating it never touches conflict-related problems (PIN_CONFLICT, DUPLICATE_PORT, etc.), which require manual intervention.

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 explicit when-to-use guidance: it only fixes the two listed issue types and absolutely avoids conflict categories. It also gives a clear workflow: use dry_run=True to preview, then dry_run=False to apply. However, it does not explicitly name sibling tools as alternatives (e.g., xdc_lint for broader linting), so it misses the 'alternatives' part of the top tier.

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

xdc_lintA

对 XDC 约束文件做静态检查(pure Python,不依赖 Vivado 综合)。

综合前就能捕到这些常见错误,省掉 30+ 秒的跑综合等待:

  • PIN_CONFLICT:同一物理引脚被多个 port 占用

  • MISSING_IOSTANDARD:有 PACKAGE_PIN 却没配 IOSTANDARD(NSTD-1 / BIVC-1 隐患)

  • DUPLICATE_PORT:同 port 被多次约束不同引脚(后者覆盖)

  • CLOCK_NO_PERIOD:create_clock 缺 -period

  • PIN_CONFLICT_CROSS_FILE:多个 XDC 文件间的引脚冲突

Args: xdc_paths: 要检查的 XDC 文件路径列表。若不传,则从当前 session 的项目里 自动抓取所有 constrs_1 下的 XDC 文件。 session_id: 目标会话 ID(仅在不传 xdc_paths 时使用)。

ParametersJSON Schema
NameRequiredDescriptionDefault
xdc_pathsNo
session_idNodefault

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?

With no annotations provided, the description carries the full burden of behavioral disclosure. It explains that the tool performs static analysis without requiring Vivado, lists the exact error codes checked, and describes the auto-discovery behavior when xdc_paths is omitted. This gives a clear picture of the tool's behavior and non-destructive nature.

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 moderately sized but well-structured, with a clear intro, a useful bullet list of detectable errors, and an Args section. Each line contributes value, for example the error list helps the agent understand capabilities. It is slightly longer than strictly necessary but not wasteful.

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 tool has only two optional parameters and an output schema, so the description does not need to explain return values. It provides complete context: the tool's purpose, when to use it, the parameters' behavior, and the expected error types. This is sufficient for an agent to select and invoke the tool correctly.

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

Parameters5/5

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

The schema provides only names and types with no descriptions (0% coverage). The description's Args section fully compensates by explaining xdc_paths and session_id in detail, including the default auto-grab behavior and when session_id is used. This provides complete parameter semantics beyond the raw 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 clearly states the tool's purpose as a static checker for XDC constraint files, listing the specific error patterns it detects. This distinguishes it from synthesis, implementation, and other sibling tools. The mention of being pure Python and not relying on Vivado synthesis further clarifies its scope.

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 explicitly recommends running this tool before synthesis to catch common errors and avoid the 30+ second synthesis wait, providing a clear usage context. It does not explicitly name alternative tools or exclusion cases, but the timing and benefit are well communicated.

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. Dates show when Glama detected each change.

  1. 30 tool updatesv0.3.25
    • First observedcheck_bitstream_readiness
    • First observedcompare_xci
    • First observedgenerate_bitstream
    • First observedget_critical_warnings
    • First observedget_io_report
    • First observedget_ip_status
    • First observedget_next_suggestion
    • First observedget_pre_commit_summary
    • First observedget_project_info
    • First observedget_run_progress
    • First observedget_timing_report
    • First observedget_utilization_report
    • First observedinspect_ip_params
    • First observedlist_sessions
    • First observedparse_bit_header
    • First observedparse_ltx
    • First observedparse_xpr
    • First observedprogram_device
    • First observedrun_implementation
    • First observedrun_synthesis
    • First observedrun_tcl
    • First observedsafe_tcl
    • First observedset_wave_analog
    • First observedset_wave_zoom
    • First observedstart_session
    • First observedstop_session
    • First observedverify_io_placement_tool
    • First observedverilog_compile_check
    • First observedxdc_auto_fix
    • First observedxdc_lint

TDQS

A3.6/5.0

Scored across 30 tools

Disambiguation3/5

Most tools have distinct purposes, but there are notable overlaps: run_tcl and safe_tcl are essentially the same with different escaping, get_critical_warnings and get_run_progress both inspect logs for warnings, and parse_xpr vs get_project_info both provide project information (offline vs live). These ambiguities could cause agent misselection despite helpful descriptions.

Naming Consistency4/5

The majority of tools follow a clean verb_noun pattern (get_*, run_*, parse_*, set_*). However, there are meaningful deviations: xdc_lint (noun-first), xdc_auto_fix, verilog_compile_check, safe_tcl, and verify_io_placement_tool break the pattern, making the naming slightly inconsistent.

Tool Count2/5

30 tools is excessive for a single server, exceeding the 25+ threshold. Several tools are redundant (safe_tcl vs run_tcl) or overly niche (set_wave_zoom, set_wave_analog, get_next_suggestion), making the surface feel bloated and harder for an agent to navigate.

Completeness4/5

The tool set covers the primary FPGA flow: synthesis, implementation, bitstream, programming, reporting, XDC checks, and offline parsers. However, there is no dedicated tool for project creation or source file management—agents must rely on the generic run_tcl for these, which is a minor but noticeable gap.

Maintenance

ActivityMaintained
ResponsivenessResponsive

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

  • F
    license
    C
    quality
    C
    maintenance
    An AI-centric MCP server that enables automated Xilinx Vivado workflows, including project management, synthesis, implementation, and timing analysis. It allows AI agents to drive hardware design processes while integrating directly with the official Vivado GUI for visual context.
    15
    4
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server for deterministic Vivado FPGA automation including project scaffolding, simulation, synthesis, implementation, and gated bitstream generation.
    4
    MIT
  • F
    license
    B
    quality
    B
    maintenance
    A Model Context Protocol server that lets AI clients operate AMD Vivado through safe, workflow-level tools while allowing the user to watch and interact with the Vivado GUI.
    21
    -

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/mapleleavessssssss-wq/vivado-mcp'

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