mcltspice/README.md
Ryan Malloy 37caaf0310 Add native macOS support (no Wine) per Kevin's spec
Platform-branches the Wine-specific execution so Linux behaves identically
while macOS drives LTspice.app natively. Implemented from muel9560's measured
spec + validated where possible against a Wine -netlist oracle on Linux.

- config.py: get_launch() abstraction (argv prefix + env + path translator);
  IS_DARWIN, LTSPICE_BIN (env-overridable), LTSPICE_LIB_ROOT under
  ~/Library/Application Support/LTspice on macOS. Linux resolves to the
  historical Wine paths unchanged.
- runner.py: darwin branch uses the native binary, POSIX paths (no Z: map),
  plain -b (never -Run), and completion by polling for a stable .raw (the Mac
  GUI app's exit code is unreliable). Linux keeps communicate()+wait_for.
- netlister.py (new): asc_to_netlist() converts a schematic to a netlist on
  macOS, since the Mac CLI can't netlist a .asc. Union-find net extraction;
  all 15 templates netlist, topology matches the Wine -netlist oracle.
- library_tools.py: check_installation reports platform/binary/lib-root/
  version/gui-session on macOS.
- packaging/docs: drop 'Linux only'; document LTSPICE_BIN + GUI-session need.

Adversarial review fixes: restore kill+reap of the Wine subprocess on Linux
timeout (was orphaning the process -- a real regression); alias duplicate net
labels instead of aborting (sallen-key); synthesize NC_xx nodes for floating
pins (op-amps) to match the oracle; use asyncio.get_running_loop().

Linux unaffected: 476 unit + 10 integration (real Wine) still pass; +48 unit
+8 integration for the platform/netlister paths. macOS runtime (LTspice.app
invocation, GUI session, poll timing) needs validation on Kevin's hardware.
2026-07-03 12:35:18 -06:00

6.1 KiB

mcltspice

MCP server for LTspice circuit simulation automation on Linux (via Wine) and native macOS. Drives LTspice in batch mode, parses binary .raw results, and exposes 37 tools for end-to-end circuit design workflows.

Note: macOS (native, no Wine) support is new and under active validation. The Linux/Wine path is the mature, battle-tested one.

Quick Start

# Install and run
uvx mcltspice

# Add to Claude Code
claude mcp add mcltspice -- uvx mcltspice

# Local development
claude mcp add mcltspice -- uv run --directory /path/to/mcltspice mcltspice

Requirements

  • Linux with Wine installed, OR macOS (Apple Silicon or Intel) with LTspice.app
  • LTspice — on Linux, extracted from the Windows installer; on macOS, the native app (see Setup)
  • Python 3.11+

Tools

Simulation

Tool Description
simulate Run simulation on a .asc schematic
simulate_netlist Run simulation on a .cir / .net netlist
parameter_sweep Sweep a parameter across a range of values
temperature_sweep Run simulations at different temperatures
monte_carlo Monte Carlo analysis with component tolerances
optimize_circuit Automatically optimize component values to hit target specs
tune_circuit Measure performance and suggest parameter adjustments

Waveform Extraction & Visualization

Tool Description
get_waveform Extract signal data from a .raw file
list_simulation_runs List runs in a stepped/Monte Carlo simulation
evaluate_waveform_expression Evaluate math expressions on waveforms (V*I, dB, etc.)
export_csv Export waveform data to CSV
plot_waveform Generate SVG plots from simulation results

Signal Analysis

Tool Description
analyze_waveform FFT, THD, RMS, settling time, and more
measure_bandwidth Measure -3dB bandwidth from AC analysis
get_operating_point Extract DC operating point (.op) results
get_transfer_function Extract .tf (transfer function) results

Noise Analysis

Tool Description
analyze_noise Comprehensive noise analysis from .noise simulation
get_spot_noise Noise spectral density at a specific frequency
get_total_noise Integrated RMS noise over a frequency band

Stability & Power

Tool Description
analyze_stability Gain margin and phase margin from AC loop gain
analyze_power Power metrics from voltage and current waveforms
compute_efficiency_tool Power conversion efficiency

Schematic & Netlist

Tool Description
read_schematic Parse schematic components and nets
edit_component Modify component values in a schematic
diff_schematics Compare two schematics and show changes
run_drc Design rule checks on a schematic
create_netlist Build a SPICE netlist programmatically
create_from_template Create a circuit from a pre-built template
generate_schematic Generate a graphical .asc schematic from a template
read_touchstone Parse Touchstone S-parameter files (.s1p, .s2p)

Library & Templates

Tool Description
list_templates Available circuit templates with parameters and defaults
list_symbols Browse LTspice's 6500+ component symbols
list_examples Browse 4000+ example circuits
get_symbol_info Pin details and attributes for a component symbol
search_spice_models Search .model definitions in the library
search_spice_subcircuits Search .subckt definitions (op-amps, ICs, etc.)
check_installation Verify LTspice installation (Wine on Linux, native on macOS)

Resources

URI Description
ltspice://symbols All component symbols by category
ltspice://examples All example circuits
ltspice://status Installation status
ltspice://templates All circuit templates with parameters
ltspice://template/{name} Detail for a specific template

Prompts

Prompt Description
design_filter Walk through filter design (type, topology, specs)
analyze_power_supply Guide through power supply analysis
debug_circuit Systematic circuit debugging workflow
optimize_design Iterative design optimization
monte_carlo_analysis Statistical yield analysis
circuit_from_scratch Build a circuit from a description
troubleshoot_simulation Diagnose simulation errors

LTspice Setup

Linux (Wine)

Extract LTspice from the Windows MSI installer:

# Download LTspice64.msi from analog.com
cd /path/to/downloads
7z x LTspice64.msi -oltspice
cd ltspice
7z x disk1.cab

# Set up Wine prefix
export WINEPREFIX=$PWD/.wine
export WINEARCH=win64
wineboot --init

Set LTSPICE_DIR to point at your extracted directory, or use the default ~/claude/ltspice/extracted/ltspice.

macOS (native)

macOS has a native universal LTspice build, so no Wine is involved. Install LTspice.app from the Mac App Store or analog.com. The binary lives at:

/Applications/LTspice.app/Contents/MacOS/LTspice

The component library lives outside the app bundle, at ~/Library/Application Support/LTspice/, with lib/{sym,sub,cmp} underneath. This is unpacked from lib.zip the first time you launch LTspice.app from the GUI, so launch the app once interactively before running batch simulations.

Set LTSPICE_BIN to override the binary path (it defaults to the path above). This mirrors how LTSPICE_DIR works on Linux.

GUI-session requirement: Mac LTspice is an Aqua GUI application. It runs batch simulations, but it needs an active login/GUI session to do so — it will not run over a bare SSH connection with no logged-in desktop. This differs from the Linux/Wine path, which runs fully headless.

Repository

git.supported.systems/MCP/mcltspice

License

MIT