vivado-red-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| VIVADO_MCP_NO_AUTOFETCH | No | Set to 1 to disable the automatic download of the RedPitaya-FPGA repo on startup; the rp_fetch_repo tool can still download it on demand. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| start_sessionA | Start a persistent Vivado TCL session. Must be called before project/design tools. Vivado startup is ~30s; the session is reused across tool calls. |
| stop_sessionB | Stop the Vivado TCL session and free resources. |
| session_statusB | Get statistics for the current Vivado session (commands run, timing, errors). |
| check_session_healthA | Verify the Vivado process is responsive. With auto_recover=true the session is restarted if it hangs. |
| get_host_statusA | Get host hostname, free memory, and session state. Useful to check there is enough RAM before launching synthesis/implementation. |
| open_projectB | Open an existing Vivado project (.xpr file). |
| close_projectB | Close the currently open project. |
| get_project_infoA | Get name, part, target language, directory of the open project. |
| create_projectA | Create a new Vivado project on disk in project mode. Defaults to the Red Pitaya STEMlab 125-14 part (xc7z010clg400-1). Call add_sources / add_constraints next, then run_synthesis. |
| add_sourcesA | Add HDL source files (.v/.sv/.vhd) to the current project. Optionally sets the top module and updates compile order. |
| add_constraintsC | Add XDC constraint files to the current project. |
| list_boardsA | List boards with bundled XDC + metadata. No Vivado session required. |
| get_board_infoA | Get bundled metadata for a board: part, LED pinout, absolute XDC paths, default synth flags. Use the returned absolute_path values with add_constraints. No Vivado session required. |
| run_synthesisA | Run synthesis on the current project (reset_run -> launch_runs synth_1 -> wait_on_run). Returns ground-truth status from the run object, not just text parsing. |
| run_implementationA | Run implementation (opt_design -> place_design -> route_design). Returns ground-truth status from the impl_1 run object. |
| generate_bitstreamA | Generate bitstream — |
| set_run_strategyA | Set the strategy of a synthesis or implementation run (e.g. synth_1 'Flow_PerfOptimized_high', impl_1 'Performance_NetDelay_high'). On an unknown name, Vivado's error lists the valid strategies. |
| get_timing_summaryA | Get timing summary (WNS, TNS, WHS, THS). Returns parsed metrics by default. Use generate_full_report for raw output. |
| get_timing_pathsA | Get failing/critical timing paths. Returns structured summary by default; use detail_level=standard|full for the raw text too. |
| get_utilizationC | Resource utilization (LUT/FF/BRAM/DSP/IO). Parsed only by default. |
| get_clocksB | Get clock information and constraints (report_clocks). |
| get_messagesA | Get Vivado messages filtered by severity (error/critical/warning/all). |
| get_design_hierarchyC | Get the design hierarchy (modules and instances), optionally filtered. |
| get_portsB | Get top-level I/O ports of the design. |
| get_netsC | Search for nets by pattern (default '*'). |
| get_cellsC | Search for cells/instances by pattern. |
| launch_simulationC | Launch xsim in behavioral/post-synth/post-impl mode. |
| run_simulationC | Run the simulation for a specified time (e.g. 100ns, 1us, all). |
| restart_simulationB | Restart the simulation from time 0. |
| close_simulationB | Close the current simulation. |
| get_simulation_timeA | Get the current simulation time (current_time). |
| get_signal_valueC | Get current value of a signal in simulation. |
| get_signal_valuesC | Get values of multiple signals matching a wildcard pattern (max 50). |
| add_signals_to_waveC | Add signals to the waveform viewer. |
| set_simulation_topC | Set the top-level testbench module for simulation. |
| get_simulation_objectsC | List simulation objects in a scope (signals/ports/internal). |
| get_scopesC | List child scopes (hierarchy) in the simulation. |
| step_simulationB | Step simulation by delta cycles. |
| add_breakpointC | Add a breakpoint on signal edge or change. |
| remove_breakpointsB | Remove all breakpoints (remove_bps -all). |
| get_simulation_messagesC | Get simulation log messages filtered by severity. |
| run_tclB | Execute a raw TCL command in Vivado. Use for advanced ops not covered by other tools. |
| run_tcl_scriptB | Source a .tcl script file in the Vivado session (uses |
| create_block_designA | Create a new block design and make it current. Optionally sets the board_part property on the project beforehand (board_part requires the BSP to be installed in Vivado). |
| save_bd_designB | Save the currently open block design to disk. |
| close_bd_designA | Close the currently open block design (without deleting). |
| list_bd_cellsC | List cells in the current block design (optionally filtered). |
| add_ip_to_bdA | Add an IP core to the current block design ( |
| create_bd_portB | Create a top-level port on the current block design. Scalar or vector ( |
| add_module_to_bdA | Add an RTL module (Verilog/VHDL already in the project, see add_sources) to the current block design as a module-reference cell ( |
| configure_bd_cellA | Set CONFIG.* properties on an existing block-design cell (set_property -dict). Use for settings that must be applied after creation or in a separate step, e.g. importing a PS7 board preset: {'CONFIG.PCW_IMPORT_BOARD_PRESET': '/red_pitaya.xml'}. |
| connect_bd_netB | Connect two scalar pins/ports in the current block design. |
| connect_bd_intf_netC | Connect two AXI/interface pins in the current block design. |
| auto_connect_axiB | Use |
| apply_ps7_presetA | Apply the Zynq-7000 processing_system7 board preset to a PS7 cell — wires FIXED_IO / DDR / clocks per the board definition. Equivalent to clicking 'Run Block Automation' on a freshly added PS7 in the GUI. |
| validate_block_designA | Run validate_bd_design and return parsed status. Failures include unconnected pins, conflicting CONFIG values, or missing assignments. |
| regenerate_bd_layoutA | Regenerate the block design layout (cosmetic; useful before save). |
| assign_bd_addressC | Auto-assign addresses in the BD address editor (assign_bd_address). |
| generate_bd_wrapperA | Generate the HDL wrapper for a block design and (by default) add it to sources_1 and set it as project top. Implements the canonical pattern: make_wrapper -files -top; add_files -norecurse ; set_property top [current_fileset]; update_compile_order. |
| create_ipA | Create an IP from the Xilinx IP catalog. Generates a .xci file in the project's IP sources fileset. Use configure_ip + generate_ip_target afterwards, then run synth_ip if you want out-of-context synthesis. |
| configure_ipC | Set CONFIG.* properties on an existing IP via set_property -dict. |
| generate_ip_targetC | Generate IP output products (synthesis + simulation by default). |
| synth_ipC | Run out-of-context (OOC) synthesis on an IP. |
| upgrade_ipB | Upgrade IP version (no-op if already at latest). |
| report_ip_statusB | Get a structured snapshot of the project's IP and their upgrade status. |
| open_hw_managerA | Open the Hardware Manager (no JTAG connection yet). |
| close_hw_managerB | Close the Hardware Manager. |
| connect_hw_serverC | Connect to a hw_server (cs_server). Default URL is localhost:3121 — the value Vivado uses when running hw_server locally. |
| refresh_hw_deviceA | Refresh the currently selected hardware device (re-reads JTAG chain state). Call after re-plugging a cable. |
| program_deviceA | Program a .bit onto the first device on the JTAG chain. Sequence: open_hw_target -> set PROGRAM.FILE -> program_hw_devices. The hardware must already be connected ( |
| report_powerA | Run report_power and return parsed totals (total/dynamic/static W) + a truncated raw block. Full output stored at /tmp/vivado_red_mcp/. |
| report_drcA | Run report_drc and return parsed violations list (severity/code/message). Use after place_design/route_design to catch design-rule problems. |
| report_methodologyC | Run report_methodology (UltraFast methodology checks). Returns violation list grouped by severity. |
| report_qor_assessmentC | Run report_qor_assessment (overall design quality score). |
| report_clock_interactionB | Run report_clock_interaction to find cross-clock paths (timed/async/unconstrained). |
| load_board_xdcA | Resolve a bundled board XDC and attach it to the current project. Standalone wrapper over get_board_info + add_constraints. |
| generate_cfgmemA | Convert a .bit into a raw binary image (.bit.bin) loadable via /dev/xdevcfg on the Red Pitaya. Use after generate_bitstream. |
| get_synthesis_errors_parsedA | Return structured errors and critical warnings from a run's log (default: synth_1), plus those of every failed run (e.g. out-of-context IP runs). Use after run_synthesis fails to get a clean actionable list. |
| create_redpitaya_project_rtlC | One-shot composite: create project -> add HDL sources -> apply XDC -> synth -> impl -> write_bitstream -> generate .bit.bin. Stops on the first failing stage and returns a structured payload. |
| rp_fetch_repoA | Download the RedPitaya-FPGA repo from GitHub as a source zip and extract it (no git required, stdlib only). Returns repo_path to feed into rp_setup_workspace. Idempotent — pass force=true to redownload. No Vivado session required. |
| rp_setup_workspaceA | Copy a RedPitaya-FPGA repo into an isolated workspace so builds don't touch the pristine checkout. The copy is patched to run on the installed Vivado release (block-design version check) and without git. Idempotent — pass force=true to recopy. No Vivado session required. |
| rp_list_projectsA | List projects under prj/ of a RedPitaya workspace or repo. Flags which are Z10-capable (have ip/system.tcl or legacy ip/systemZ10.tcl). No Vivado session required. |
| rp_workspace_infoB | Report workspace state: projects present and which already have a built bitstream. |
| rp_create_custom_projectA | Clone an existing prj/ into prj/ inside the workspace, ready for custom PL logic. Returns the rtl/ dir and red_pitaya_top path to edit. No Vivado session required. |
| rp_build_projectA | Build a RedPitaya PS+PL project end-to-end: run the repo's project setup TCL (creates the PS7 block design from ip/system.tcl), then synthesis, implementation and write_bitstream, then generate the .bit.bin. Returns {stage, xpr_path, bit_path, bin_path, timing}. Requires start_session first. |
| deploy_to_redpitayaA | Copy a .bit.bin to a Red Pitaya over SSH/SCP and load it into the FPGA. Uses /dev/xdevcfg (works on Red Pitaya OS 1.04 + 2.00) or fpgautil (OS 2.00). No Vivado session required. |
| ssh_redpitaya_execB | Run an arbitrary shell command on a Red Pitaya over SSH and return stdout/stderr/exit code. Useful for status checks, dmesg reads, manual loader invocations. |
| get_vivado_docA | Look up a topical Vivado documentation summary bundled with this server. Returns markdown content + upstream URL. Known topics: block_design, ps7_zynq, timing_constraints, synthesis_strategies, simulation_xsim, red_pitaya_125_14, redpitaya_ps_pl_flow, tcl_quoting, hw_manager, ip_integrator, pitfalls_2020_1. |
| list_vivado_docsB | List the bundled Vivado documentation topics. |
| request_featureB | Submit a feature request for the Vivado MCP server (persisted on disk). |
| list_feature_requestsB | List all submitted feature requests. |
| generate_full_reportA | Generate a full Vivado report to a file. Use when inline reports get truncated or you need the complete output. Returns a report_id usable with read_report_section. |
| read_report_sectionB | Read a section of a previously generated report. Provide report_id (from generate_full_report) or a direct file_path. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 93 tools
Most tools target distinct Vivado operations, but the set mixes low-level primitives with composite one-shots (e.g., create_redpitaya_project_rtl vs rp_build_project vs create_project/run_synthesis, and generate_ip_target vs synth_ip). Several getters/report wrappers also require reading descriptions to choose correctly. Descriptions help, but with 93 tools misselection risk remains.
Nearly all names are snake_case verb_noun, with domain prefixes such as rp_, report_, and get_ used consistently. Minor exceptions like session_status and rp_workspace_info are noun-first but still readable and predictable.
93 tools far exceeds a reasonable single-server surface; even for a complex FPGA flow this creates high selection and cognitive load. It should be split into session/project/simulation/block-design/hardware/Red-Pitaya sub-servers. This falls in the extreme 50+ tool mismatch range.
The surface covers end-to-end Vivado flow plus Red Pitaya deployment, documentation, and a run_tcl escape hatch. Some granular removal/delete/debug operations are missing (e.g., remove sources/constraints, delete BD cells/nets, ILA or memory reports), but these are largely workaroundable via raw TCL.