Xcelium MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MCP_BRIDGE_PORT | No | The TCP port the bridge listens on (default is 9876). This is also used to determine the path of the readiness signal file (/tmp/mcp_bridge_ready_<port>). | 9876 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| connect_simulatorA | Connect to a SimVision instance running mcp_bridge.tcl. Args: host: SimVision host (use localhost with SSH tunnel for remote). port: TCP port of the Tcl bridge (default 9876). timeout: Connection timeout in seconds. |
| disconnect_simulatorB | Disconnect from the SimVision bridge. |
| sim_runA | Run the simulation, optionally for a specified duration. Args: duration: Simulation time to run (e.g. "100ns", "1us"). Empty = run until breakpoint or end. timeout: MCP response timeout in seconds (default 600s for gate-level sim support). |
| sim_stopB | Stop a running simulation. |
| sim_restartA | Restart the simulation from time 0. |
| sim_statusA | Get current simulation status (time, scope, state). |
| set_breakpointA | Set a conditional breakpoint in the simulation. Args: condition: Tcl expression (e.g. "{/tb/dut/state == 3}"). name: Optional breakpoint name. |
| get_signal_valueA | Read current values of one or more signals. Args: signals: List of signal paths (e.g. ["/tb/dut/clk", "/tb/dut/data[7:0]"]). |
| describe_signalA | Get detailed information about a signal (type, width, direction). Args: signal: Full hierarchical signal path. |
| find_driversA | Find all drivers of a signal (useful for X/Z debugging). Args: signal: Full hierarchical signal path. |
| list_signalsB | List signals in a scope, optionally filtered by pattern. Args: scope: Hierarchical scope path (e.g. "/tb/dut"). pattern: Glob pattern to filter signals (default "*"). |
| deposit_valueB | Force-deposit a value onto a signal. Args: signal: Full hierarchical signal path. value: Value to deposit (e.g. "1'b1", "8'hFF", "0"). |
| release_signalB | Release a previously deposited signal, restoring driven value. Args: signal: Full hierarchical signal path. |
| waveform_add_signalsB | Add signals to the SimVision waveform viewer. Args: signals: List of signal paths to add. group_name: Optional group name for organizing signals. |
| waveform_zoomB | Set the waveform viewer time range (zoom to region). Args: start_time: Start time (e.g. "0ns"). end_time: End time (e.g. "100ns"). |
| cursor_setB | Set a waveform cursor to a specific time. Args: time: Simulation time (e.g. "50ns"). cursor_name: Cursor name (default "TimeA"). |
| take_waveform_screenshotA | Capture a screenshot of the SimVision waveform window. Returns the screenshot as a PNG image that Claude can analyze. |
| run_debugger_modeB | Comprehensive debug snapshot: simulation state + signal values + screenshot + debugging guide. Returns a combined text report and waveform screenshot for AI-assisted hardware debugging. |
| shutdown_simulatorA | Safely shutdown the simulator, preserving SHM waveform data. Closes all SHM databases and terminates xmsim gracefully. Always use this instead of disconnect_simulator when ending a debug session. WARNING: exit or pkill will lose SHM data. This is the only safe way. |
| watch_signalA | Set a watchpoint to stop simulation when a signal matches a condition. The simulation will automatically stop at the exact clock edge where the condition becomes true. Much more efficient than manual probing. Args: signal: Full hierarchical signal path (e.g. "top.dut.r_state[3:0]"). op: Comparison operator ("==", "!=", ">", "<", ">=", "<="). value: Target value in Verilog format (e.g. "8'h10", "4'b1010"). |
| watch_clearC | Clear watchpoints. Use "all" to clear all, or a specific stop ID. Args: watch_id: Watchpoint ID to clear, or "all" for all watchpoints. |
| probe_controlA | Control SHM waveform recording to manage dump file size. Disable probes during uninteresting simulation periods to save disk space. Re-enable before the region of interest. Optionally target a specific scope. Args: mode: "enable" to start recording, "disable" to pause, "status" to check. scope: Hierarchical scope to target (e.g. "top.hw.u_ext"). Empty = all probes. |
| save_checkpointA | Save a simulation checkpoint for later restoration. Checkpoints capture the complete simulator state. Use restore_checkpoint to return to this point without re-simulating from time 0. Args: name: Checkpoint name (alphanumeric, e.g. "chk_10ms"). Auto-generated if empty. |
| restore_checkpointA | Restore simulation to a previously saved checkpoint. Args: name: Checkpoint name to restore. Empty = last saved checkpoint. |
| bisect_signalA | Find when a signal condition first becomes true using automated binary search. Internally saves checkpoints and repeatedly restores/runs with watchpoints to narrow down the exact time. Returns iteration log and final time range. Args: signal: Full hierarchical signal path. op: Comparison operator (e.g. "=="). value: Target value (e.g. "8'h11"). start_ns: Start of search range in nanoseconds. end_ns: End of search range in nanoseconds. precision_ns: Stop when range is narrower than this (default 1000ns). |
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 25 tools
Most tools have clearly distinct purposes (e.g., deposit_value vs. release_signal, save_checkpoint vs. restore_checkpoint). Minor potential confusion exists between disconnect_simulator and shutdown_simulator (both end sessions but differ in data preservation), and between watch_signal and bisect_signal (both detect conditions but via different mechanisms). Descriptions clarify these distinctions.
Generally follows verb_noun convention (e.g., connect_simulator, set_breakpoint, find_drivers). Consistent prefixes group related functionality (sim_*, watch_*, waveform_*). Minor deviations include cursor_set (noun_verb inversion compared to set_breakpoint) and run_debugger_mode (slightly vague compared to specific action names).
With 25 tools, this is at the upper boundary of the 16-25 range, feeling heavy for an MCP server. While the hardware simulation domain is complex and justifies extensive coverage (signals, checkpoints, waveforms, debugging), the surface area is large enough that an agent may struggle to select the optimal tool without careful description reading.
Provides comprehensive coverage for hardware debugging workflows: connection lifecycle, simulation control (run/stop/restart), signal inspection/manipulation, checkpoint management, conditional breakpoints/watchpoints, and waveform visualization. Minor gaps include lack of explicit 'step' (single-cycle advance) or direct Tcl command execution, though set_breakpoint allows Tcl expressions.