Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

MCP server for AI agents

ics mcp (the mcp command of the ics command line tool) exposes IC Studio to AI agents through the Model Context Protocol (stdio). An agent can create and open projects, read netlists, simulate, edit layouts, generate and route layout from a schematic, and run DRC, extraction and LVS.

Setup

The release installer registers the server with Claude Code when claude is on the PATH. In the app, File > Settings… > AI agents (MCP) has Add to Claude Code, which does the same, and Copy MCP config, which copies the JSON below for other clients.

To register it by hand:

claude mcp add --scope user ic-studio -- /path/to/ics mcp

For other MCP clients, add a stdio server whose command is the ics binary with the argument mcp:

{ "mcpServers": { "ic-studio": { "command": "/path/to/ics", "args": ["mcp"] } } }

From source, build it with cargo build --release -p ics-cli and use target/release/ics.

Then ask, for example: “create a demo project in ./demo and run LVS on cmos_inverter”.

Agent skill

The tools tell an agent what it can do; the ic-studio skill in skills/ic-studio tells it how to design with them: the schematic → simulation → layout → DRC → LVS → post-layout flow, units, how to read LVS / DRC results, the schematic.json format and the ics CLI as a fallback. Install it with:

npx skills add geniuskey/ic-studio

or copy skills/ic-studio into ~/.claude/skills/.

Conventions

  • Coordinates are in µm, y pointing up, snapped to the technology grid.
  • A cell argument is a cell name or lib/cell. Layout edit tools create the cell (in library work) and its layout view if they do not exist.
  • Edits stay in memory until save_project.

Tools

The server has 34 tools:

ToolPurpose
open_project, new_project, save_project, project_infoProject management; project_info lists the technology layers, vias and all cells
get_netlistSPICE deck of a cell
write_schematicCreate or replace a cell’s schematic from a SPICE netlist; its analysis lines set the simulation setup
set_simulationChange a cell’s analyses, backend, temperature, extra lines, parasitics or corner
simulateRun the cell’s saved analyses (optional backend, parasitics); returns a compact summary
run_spiceSimulate a raw SPICE deck
layout_summaryBounding box, shapes per layer, labels and instances
add_rect, add_path, add_labelDraw shapes; a label on a routing layer names the net under it
place_instance, place_pcellPlace a cell or a PCell (nmos, pmos with an optional PDK device, poly_res, mom_cap)
delete_itemsDelete shapes / instances by id
generate_layoutSchematic-driven placement with matching (no wiring)
flylinesList unrouted connections
routeRoute the flylines on the metal layers
run_drcDRC with the technology deck
fix_drcApply verified quick fixes to the cell’s top-level geometry until nothing more can be fixed
compactSlide top-level items toward each direction until the rules stop them; constraints hold
optimizeSize device parameters to meet specs (optionally after layout); apply writes the best values
place_likeLayout by example: place a cell like a finished cell with the same circuit topology, optionally route
diff_layoutXOR a cell’s layout per layer against a git revision (default HEAD) or the saved files
extractExtracted nets and devices, plus SPICE
run_lvsCompare layout and schematic
run_signoffRun an external KLayout / Calibre / netgen runset of the technology
post_layout_parasiticsExtracted parasitics and the largest net and coupling capacitances
emirIR drop and electromigration of a net: worst drop and where, loads, highest current densities, EM violations
load_pdkReplace the technology with a PDK file
export_gds, import_gdsGDSII / OASIS export and import (import skips layers the technology lacks); both apply the technology’s stream layer map
run_skillRun Cadence SKILL code (code) or a .il file (file); returns output, value and the modified cells
gui_statusWhether a desktop app is connected, and its project

run_skill

run_skill takes either code (SKILL source) or file (a .il path, also the base of relative load() paths) and returns the following. The optional cell names the cell that geGetEditCellView() returns.

{ "output": "what the script printed", "value": "value of the last form", "modified": ["work/pads"] }

On a SKILL error the tool fails with SKILL error: <file or line>: <message>, followed by the cells already modified (their edits are kept) and the output printed so far. In live mode the app records undo history for every changed layout and opens the first one when no cell is open.

Live mode

While the desktop app is running, the MCP server (ics mcp) forwards every tool call to it, and the agent works on the project open in the window:

  • edits appear immediately and layout edits can be undone with Ctrl+Z,
  • the window opens the affected cell in the matching workspace; simulate shows the waveforms, and DRC / extraction / LVS results appear in the layout panels with markers,
  • the status bar shows MCP live, and each call is logged in the console as MCP · <tool> <cell> -> <summary>.

The app listens on 127.0.0.1 with a per-session token and writes the discovery file live.json to %LOCALAPPDATA%\ic-studio (Windows) or $XDG_RUNTIME_DIR/ic-studio, falling back to ~/.local/state/ic-studio (Linux, macOS). ics mcp checks for a running app on every call, so you can start or close the app at any time.

Without a running app, or with ICS_MCP_STANDALONE=1, the server works on its own in-memory project; start with open_project or new_project. ICS_LIVE_DIR overrides the folder of the discovery file.