@zesun33/mcp-openroad
Run OpenROAD-based ASIC physical-design and timing tasks from an MCP client.
Perform end-to-end P&R plus STA with
openroad_pnron a gate-level netlist, returning area, utilization, wirelength, and timing slack.Initialize floorplans, die/core sizing, and I/O pin placement with
openroad_floorplan.Run global analytical and legalized detailed standard-cell placement with
openroad_place.Perform global/detailed routing on a placed DEF with
openroad_route, reporting wirelength and DRC metrics.Run OpenSTA static timing analysis with
openroad_sta, reporting WNS, TNS, and critical paths.Probe runtime and version info for OpenROAD, OpenSTA, and supported PDKs with
openroad_toolchain_info.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@@zesun33/mcp-openroad Run end-to-end P&R on counter_netlist.v (top: counter) with a 1ns clock and report timing."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@zesun33/mcp-openroad
Purpose and first steps
Run physical-design stages and inspect timing for a netlist through an MCP server.
Who it is for: Hardware engineers using an MCP-capable client or coding agent.
First task: Configure the server in your MCP client, then call openroad_toolchain_info before running a design.
What to expect: Tool availability, then placement/routing artifacts and stage-specific timing metrics.
Current scope: Published MCP server. The npx command starts a stdio server that waits for a client; EDA execution also needs its documented host/container tools.
Start here: Runtime requirements and configuration.
Related projects: mcp-yosys, mcp-gds, agentic-asic.
Model Context Protocol (MCP) server for open-source digital ASIC physical design (place-and-route) and static timing analysis via OpenROAD.
mcp-openroad equips AI coding agents and IDEs (Cursor, Windsurf, GitHub Copilot / OpenAI Codex, Claude Code, Google Antigravity, OpenCode, Cline) with structured tools to execute physical design (P&R) flows over standard cell netlists. It automates floorplanning, analytical cell placement, clock tree synthesis (CTS), global/detailed routing, and static timing analysis (STA), transforming verbose multi-thousand-line terminal logs into clean, low-token JSON metrics (< 150 tokens).
Related MCP server: mcp-verilog
Install and run
Run this MCP server directly from npm:
npx -y @zesun33/mcp-openroadFor the complete hardware-agent setup, use npx -y @zesun33/create-hw-agent my-asic.
⚡ Quick Tour: See It in Action
The examples below illustrate tool requests and result fields. Timings, counts, and scores depend on the input and runtime; they are not guaranteed outcomes or fresh verification results.
Why AI Agents Need mcp-openroad
Without | With |
Dumps 10,000+ lines of raw C++ log output into LLM context | Clean structured JSON with |
Timing slack (WNS/TNS) buried deep in STA reports | Direct |
Manual setup of tech LEFs, cell LEFs, and timing libraries | Zero-config bundled platform (Nangate45 + Sky130 support) |
Host installation requires complex C++ dependencies and conda | Isolated rootless Podman ( |
Unplaced cells and DRC shorts require visual inspection | Pinpointed DRC counts, HPWL, and displacement metrics |
Example tool requests and results
1. Probing the Environment (Zero-Config Verification)
// Tool Call: openroad_toolchain_info
{
"runtime": "podman",
"image": "ghcr.io/zesun33/asic",
"openroadVersion": "2.0-12381-g01bba3695",
"staVersion": "OpenSTA 2.6.0",
"platforms": ["nangate45", "sky130"]
}2. Automated Floorplanning & I/O Pin Placement (200ms)
// Tool Call: openroad_floorplan {"netlist_file": "counter_netlist.v", "top_module": "counter", "die_width": 50, "die_height": 50}
{
"success": true,
"dieArea": { "llx": 0, "lly": 0, "urx": 50, "ury": 50, "width": 50, "height": 50 },
"coreArea": { "llx": 5.13, "lly": 5.6, "urx": 44.84, "ury": 44.8, "width": 39.71, "height": 39.2 },
"pinsPlaced": 6,
"defFile": "counter_fp.def"
}3. End-to-End P&R and Static Timing Closure (400ms)
4. Clock Tree Synthesis on a Placed DEF
// Tool Call: openroad_cts {"placed_def": "counter_placed.def", "top_module": "counter", "clock_period_ns": 1.0}
{
"success": true,
"clockBuffers": 3,
"clockNets": 3,
"timing": { "timingMet": true, "wns": 0.0, "tns": 0.0 }
}5. Power Breakdown Without Leaving the Agent Loop
// Tool Call: openroad_power {"def_file": "counter_placed.def", "top_module": "counter"}
{
"success": true,
"totalW": 5.23e-05,
"breakdown": { "sequential": 3.28e-05, "clock": 1.84e-05 }
}6. Stdcell PDN (step tool on a placed DEF)
Inside openroad_pnr, PDN runs after floorplan/tap and before place. The standalone openroad_pdn tool still accepts a placed DEF.
// Tool Call: openroad_pdn {"placed_def": "counter_placed.def", "top_module": "counter", "platform": "sky130"}
{
"success": true,
"grid": "grid",
"defFile": "counter_pdn.def"
}// Tool Call: openroad_pnr {"netlist_file": "counter_netlist.v", "top_module": "counter", "clock_period_ns": 1.0}
{
"success": true,
"topModule": "counter",
"platform": "nangate45",
"cellCount": 13,
"utilization": 1.93,
"hpwl": 106.6,
"timing": {
"timingMet": true,
"wns": 0.0,
"tns": 0.0,
"clockPeriod": 1.0
},
"defFile": "counter_routed.def",
"warnings": [],
"errors": []
}Tools Exposed
Tool | Parameters | Engine | Description |
|
| OpenROAD Full Flow | Automated end-to-end physical design (floorplanning, placement, routing, and STA) returning area, utilization, wirelength, and timing slack metrics. |
|
|
| Initializes ASIC floorplan boundaries, core/die sizing, and I/O pin placement, generating a floorplan DEF file. |
|
|
| Performs standard cell global analytical placement (RePLace) and legalized detailed placement (DPL). |
|
|
| Performs global routing (FastRoute) on a placed DEF, reporting wirelength estimates. Follow with |
|
| OpenSTA | Performs static timing analysis on placed or routed DEF files, reporting Worst Negative Slack (WNS), Total Negative Slack (TNS), and critical paths. |
|
|
| Runs CTS on a placed DEF, reporting inserted clock buffers/nets and post-CTS timing. |
|
|
| Runs detailed routing with honest DRC issue counts and samples (completes with findings; check |
|
| OpenSTA | STA across Liberty corners with per-corner WNS/TNS plus the worst corner. |
|
|
| Power totals plus per-group breakdown. True IR-drop needs PSM (absent in OpenROAD 2.0). |
|
|
| Inserts a Sky130 stdcell power grid (VPWR/VGND global connections, met1 followpins, met4/met5 straps). The step tool still takes a placed DEF. Inside |
|
|
| Stateless single-shot Tcl eval with capped stdout; include setup in the snippet. |
|
| Probe | Returns container/host runtime and version information for OpenROAD, OpenSTA, and supported platform PDKs. |
Execution Runtime
mcp-openroad runs inside the zesun33/asic rootless Podman image so tools are identical on any Linux host.
Public install (recommended — anyone can pull):
podman pull ghcr.io/zesun33/asic:latest
export MCP_OPENROAD_IMAGE=ghcr.io/zesun33/asicghcr.io/zesun33/asic is the default (anyone can pull). Local builds still work as localhost/zesun33/asic via MCP_OPENROAD_IMAGE.
Container mount:
-v <workspace>:/workspace:Z -w /workspacePodman storage option:
--storage-opt overlay.ignore_chown_errors=true
To force host binaries instead of container execution:
export MCP_OPENROAD_RUNTIME=hostFor Sky130, set MCP_OPENROAD_PDK_ROOT to a host volare cache (mounted at /pdk).
Client Configuration
To register mcp-openroad with your AI IDE or agent, add it to your configuration file (e.g., .cursor/mcp.json, claude_desktop_config.json, or Windsurf settings):
{
"mcpServers": {
"openroad": {
"command": "node",
"args": ["/path/to/mcp-openroad/dist/index.js"],
"env": {
"MCP_OPENROAD_RUNTIME": "podman",
"MCP_OPENROAD_IMAGE": "ghcr.io/zesun33/asic"
}
}
}
}Universal Compatibility
Works out-of-the-box across all modern AI coding environments:
Cursor: Configure in
.cursor/mcp.json.Windsurf: Configure in
~/.codeium/windsurf/mcp_config.json.GitHub Copilot / OpenAI Codex: Configure via Copilot MCP settings or Codex tool proxy.
Claude Code: Configure via
claude mcp add openroad node /path/to/dist/index.js.Google Antigravity: Load as workspace MCP server in
antigravity.json.OpenCode & Cline: Direct stdio JSON-RPC connection.
Verification & Testing
Strict 6-gate verification suite matching the portfolio engineering standard:
# Full verification (all 6 gates with Podman integration)
./scripts/verify.sh
# Fast / CI verification (headless environments)
./scripts/verify.sh --quick
# Target specific gates
./scripts/verify.sh --gate 1 # Spec lock & package integrity
./scripts/verify.sh --gate 2 # Static build (TypeScript)
./scripts/verify.sh --gate 3 # Unit tests (parsers & schema contract)
./scripts/verify.sh --gate 4 # Live Podman container integration tests
./scripts/verify.sh --gate 5 # Stdio JSON-RPC contract check
./scripts/verify.sh --gate 6 # Documentation validationLicense
Apache-2.0 © 2026 Md Zesun Ahmed Mia
npm releases
See RELEASING.md for GitHub Actions dry runs and trusted publishing.
Available Tools
6 toolsopenroad_floorplanA
Initializes ASIC floorplan boundaries, core/die sizing, and I/O pin placement using OpenROAD, generating a floorplan DEF file.
Inputs: top_module (required), netlist_file (required), cwd, die_width, +4 more.
openroad_placeB
Performs standard cell global analytical placement (RePLace) and legalized detailed placement (DPL) on a floorplan DEF file.
Inputs: top_module (required), floorplan_def (required), cwd, density, +2 more.
openroad_pnrA
Performs end-to-end automated digital ASIC physical design (floorplanning, placement, routing, and static timing analysis) on a gate-level netlist using OpenROAD, returning area, utilization, wirelength, and timing slack metrics.
Inputs: top_module (required), netlist_file (required), cwd, sdc_file, +4 more.
openroad_routeA
Performs global routing (FastRoute) and detailed routing on a placed DEF file, reporting wirelength and DRC violation metrics.
Inputs: placed_def (required), top_module (required), cwd, output_def, +1 more.
openroad_staA
Performs static timing analysis using OpenSTA on placed or routed DEF files, reporting Worst Negative Slack (WNS), Total Negative Slack (TNS), and critical paths.
Inputs: def_file (required), top_module (required), cwd, sdc_file, +2 more.
openroad_toolchain_infoA
Returns active container/host runtime and version information for OpenROAD, OpenSTA, and supported platform PDKs.
Inputs: cwd.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 6 tools
Each tool targets a distinct, non-overlapping stage of the ASIC physical design flow: floorplan, place, route, static timing analysis, or the full end-to-end PNR run. The info tool is clearly separated as a utility for runtime details. No ambiguity in purpose.
All tools follow a consistent 'openroad_' prefix with a lowercase action or stage identifier (pnr, floorplan, place, route, sta, toolchain_info). This creates a predictable and readable pattern that makes tool selection straightforward.
Six tools is well-scoped for a physical-design-oriented MCP server covering the main flow stages plus an end-to-end wrapper and an info utility. Each tool earns its place, supporting both granular control and a one-shot option.
The set covers the primary stages (floorplan, place, route, STA) and an end-to-end PNR path, which likely includes clock tree synthesis internally. A minor gap is the lack of a dedicated clock tree synthesis tool for users who need to run CTS in isolation, but the core lifecycle is otherwise complete.
Maintenance
Related MCP Connectors
A public board where AI agents design pieces of an open AI inference accelerator on sky130. Submit Verilog and it is linted, synthesised, simulated against hidden vectors, mapped to real standard cells for area, timed for critical path and power, and proven equivalent to a reference. No key, no account, one call. The best verified design gets fabricated.
Design circuits, simulate and verify embedded firmware, and lay out PCBs with AI agents.
Turn datasheets into source-backed JSON contracts, pinout matrices, and KiCad CAD for AI agents.
Design, route, check, review and export manufacturable PCBs from plain language; KiCad import.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI assistants to perform Electronic Design Automation (EDA) tasks including Verilog synthesis, simulation, ASIC design flows, and waveform analysis through a unified interface.6ISC
- AlicenseAqualityBmaintenanceEnables AI coding agents and IDEs to lint, compile, syntax-check, and simulate Verilog/SystemVerilog designs through structured, token-efficient MCP tools with isolated containerized toolchains.415 npmApache 2.0
- AlicenseAqualityBmaintenanceEnables AI coding agents and IDEs to synthesize Verilog/SystemVerilog designs with Yosys, inspect cell hierarchies and gate counts, and detect synthesis hazards like inferred latches and combinational loops before physical design flows.414 npmApache 2.0
- AlicenseAqualityCmaintenanceEnables AI coding agents and IDEs to run a complete open-source FPGA flow, including synthesis, place-and-route, bitstream generation, and safe hardware programming for iCE40/ECP5 boards.611 npmApache 2.0