opensta-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| STA_BIN | No | OpenSTA binary | sta |
| STA_ARGS | No | Extra arguments passed to OpenSTA | -no_splash -no_init |
| OPENSTA_MCP_LOG | No | Server log level (stderr + `server.log`) | INFO |
| OPENSTA_MCP_HOME | No | Where sessions and ownership files live | ~/.opensta-mcp |
| OPENSTA_MCP_STDERR | No | `file`: sta's stderr goes to `sta.stderr.log`; `merge`: into stdout | file |
| OPENSTA_MCP_STALL_S | No | Seconds of silence before the server checks whether sta is idle | 60 |
| OPENSTA_MCP_MAX_OUTPUT | No | Characters returned per tool call before truncation (about 150 report lines) | 12000 |
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 |
|---|---|
| load_designA | Load a design into the OpenSTA session. Call this once before any analysis. liberty: Liberty (.lib) file path, or a list of paths verilog: gate-level netlist (.v) path top: top module name to link sdc: SDC constraints file (optional but required for meaningful timing) spef: parasitics file (optional; without it delays use wire-load / no parasitics) Returns per-step timings and a digest of warnings. Warnings raised here (unmatched SPEF nets, missing cells, unconstrained ports) affect every later result, so read them. Starts a new analysis state (see get_conditions). Loads on top of the running sta: to drop earlier constraints and run_tcl changes, call restart_session first. |
| get_summaryA | Timing and size summary as numbers: worst setup/hold slack, TNS, WNS, minimum clock period and fmax per clock, design-rule violation counts, cell and net counts. |
| report_timingA | Report timing paths (OpenSTA report_checks). path_delay: "max" = setup paths, "min" = hold paths path_count: paths per path group (-group_path_count) scope: "reg2reg" = register to register only, "in2reg" = from input ports, "reg2out" = to output ports, "all" = no restriction from_pin / to_pin: restrict to a start or end point (pin, port or instance name; bus bits like reg_next_pc[31] are fine, they are quoted for you) fields: include input-pin rows (separates wire from cell delay) and slew, capacitance, fanout and net columns format: "end" and "summary" are one line per path; "json" only if this OpenSTA supports it (check with run_tcl "help report_checks") timeout_s: 0 = wait as long as it takes (a stalled sta is still detected) |
| report_powerB | Report power by group (sequential, combinational, clock, macro, pad) and component (internal, switching, leakage), in watts. top_instances: also list this many highest-power instances (0 = none) format: "text" table or "json" (the instance list is always text) The result states where switching activity came from: a VCD/SAIF read through run_tcl, or OpenSTA's default activity (then values are estimates). |
| run_tclA | Run any OpenSTA Tcl command(s) in the live session. Rules:
|
| find_commandsA | Names of the OpenSTA commands matching a glob pattern (e.g. "power", "report_*"). Use this when you do not know a command's name or run_tcl answered "invalid command name". Returns names only; read a command's description and options with run_tcl "help ". |
| get_statusA | What the OpenSTA session is doing. Safe to call at any time, including while another tool is waiting: shows the running command and its elapsed time, whether sta is computing or idle, the loaded design and its state number, constraint changes made through run_tcl, and the session log directory. |
| get_conditionsA | The analysis conditions behind a result: the Liberty, netlist, SDC and
SPEF files (full paths), every constraint change made through run_tcl
since, the switching-activity source and the scenes. Analysis results end
with "[conditions #n]"; pass that n as |
| restart_sessionA | Stop the sta process and start a fresh one. The loaded design and any constraint changes are lost; call load_design again. Use this after get_status reports sta as exited, stalled, or holding an unfinished command. |
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 9 tools
Most tools have clearly distinct purposes: load_design loads, report_timing/report_power produce specific reports, restart_session resets, etc. However, run_tcl is a general escape hatch that overlaps functionally with report_timing and report_power, and get_status vs get_conditions both report session state, creating some potential for misselection. Descriptions mitigate this well.
All tool names follow a consistent snake_case verb_noun pattern (get_summary, load_design, report_timing, run_tcl, find_commands, get_status, get_conditions, restart_session). There are no deviations in casing or style.
Nine tools is a well-scoped set for an STA server. Each tool covers a distinct operation (load, report, inspect, reset, discover) and there is no redundant tool that could be removed without losing functionality.
The surface covers the full lifecycle: loading a design, querying conditions/status, producing timing and power reports, discovering commands, running arbitrary Tcl, and restarting. Missing specialized reports (e.g., area, clocks) can be accessed via run_tcl, so there are no dead ends.