Skip to main content
Glama
gambhirsharma

circuitsnap

circuitsnap

Snap it, sim it. Mach aus einer Schaltkreiszeichnung – einem Foto, einer Skizze oder einfach einer Beschreibung – eine Live-Simulation in Falstad's CircuitJS1.

Erhältlich als MCP-Server (damit Claude und andere Assistenten Schaltkreise bauen können), als CLI und als Bibliothek.

$ circuitsnap build rc.json
https://www.falstad.com/circuit/circuitjs.html?ctz=CQAgjCAMB0l3BWcMBMcUHYMGZIA4UA2ATmIxAUgo...

$ 1 0.000005 10.20027730826997 50 5 50
v 128 64 192 64 0 0 40 5 0 0 0.5
r 384 64 448 64 0 10000
c 128 176 192 176 0 0.000001 0 0
...

Öffne die URL und der Schaltkreis läuft.

Warum

Ein Sprachmodell direkt dazu aufzufordern, CircuitJS1s Dateiformat zu erzeugen, funktioniert nicht. Das Format ist positional und unnachgiebig – v 128 64 192 64 0 0 40 5 0 0 0.5 hat sechs nachgestellte Parameter, deren Reihenfolge, Einheiten und Flag-Bits nur durch Lesen des Java-Quellcodes des Simulators herauszufinden sind. Eine falsche Vermutung erzeugt einen Schaltkreis, der ohne Probleme lädt und trotzdem falsch simuliert, was der schlimmstmögliche Fehlschlag ist: Der Benutzer kann es nicht erkennen.

circuitsnap verlagert diese Aufgabe in getesteten Code. Das Modell beschreibt was mit was verbunden ist; diese Bibliothek übernimmt Format, Geometrie, Escaping und Enkodierung.

Related MCP server: circuit-sim-mcp

Installation

npm install -g circuitsnap

Als MCP-Server

{
  "mcpServers": {
    "circuitsnap": { "command": "npx", "args": ["-y", "circuitsnap-mcp"] }
  }
}

(circuitsnap ist die CLI; circuitsnap-mcp ist der stdio-Server. circuitsnap mcp startet den Server ebenfalls, falls du eine einzelne Binärdatei bevorzugst.)

Kopiere für Claude Code außerdem skills/circuitsnap/ in .claude/skills/, um den /circuitsnap-Workflow zu erhalten, der das Lesen einer Zeichnung und die Verifizierung des Ergebnisses abdeckt.

Verwendung

Beschreibe den Schaltkreis als Netlist – Bauteile und Netznamen, keine Koordinaten:

{
  "title": "RC lowpass",
  "components": [
    { "id": "V1", "kind": "voltage",   "nodes": ["gnd", "in"],  "value": 5 },
    { "id": "R1", "kind": "resistor",  "nodes": ["in", "out"],  "value": "10k" },
    { "id": "C1", "kind": "capacitor", "nodes": ["out", "gnd"], "value": "1uF" }
  ]
}

Terminals, die denselben Netznamen teilen, sind verbunden. Das ist das ganze Modell.

circuitsnap build rc.json          # URL + circuit text
circuitsnap build rc.json --url    # just the URL
circuitsnap elements               # pin order and parameters for every kind
circuitsnap decode "<share-url>"   # read someone else's circuit

Als als Bibliothek:

import { snap } from 'circuitsnap';

const { url, text, diagnostics } = snap({
  components: [
    { id: 'V1', kind: 'voltage',  nodes: ['gnd', 'in'], value: 5 },
    { id: 'R1', kind: 'resistor', nodes: ['in', 'gnd'], value: '1k' },
  ],
});
console.log(url.url);

Werte sind

Technische Schreibweise, wie man sie auf einem Schaltplan notiert:

Eingabe

Wert

"10k"

10 000

"2.2uF"

2.2e-6

"4k7"

4700

"1M"

1e6 (Mega, nicht Milli)

"1R2"

1.2

M ist Mega und m ist Milli – die Schaltplan-Konvention. SPICs M-bedeutet-Milli würde einen handbeschrifteten "10M"-Widerstand in 10 Milliohm verwandeln.

Elemente #### wire, resistor, capacitor, inductor, voltage, rail, ground, switch,

diode, led, current, labeledNode, transistor, opamp, output, probe, text.

Führe circuitsnap elements aus, um Pinstelligkeit, Parameter, Einheiten und Standardwerte zu erhalten. Die Pin Pin-Reihenfolge macht einen Unterschied: Ein Transistor ist [base, collector, emitter], ein Op-Amperer ist [minus, plus, out].

Masse

Verwende den Netnamen gnd (oder ground, 0, vss). Diese Terminalserhalten ein echtes Massesymbol, kein Label – ein beschrifteter Knoten namens "gnd" trägt nicht den 0-Volt-Bezugspunkt-Referenz und würde den Solver ohne Datum lassen. circuitsnap warnt, wenn ein Schaltkreis überhaupt keine Masse hat.

So funktioniert's

Die Pipeline ist: Netlist → validieren → Layout → ausgeben → URL, wobei nur der Schritt ein Zeichnung lesen ein Modell erfordert. Zwei Entscheidungen sind wichtig zu wissen:

  • Nets runkommen über benannte Labels, nicht geroutete Drähte. Ein Auto-Router mit 95% Zuverlässigkeit erzeugt Schaltkreise, die richtig aussehen und falsch simulieren. Ein Label neben einem Pin ist verifizierbar. Die Ausgabe ist wie ein hierarchischer Schaltplan.

  • Wir erzeugen das Legacy-Textformat, nicht XML. Der aktuelle Upstream schreibt XML, liest aber Text – Text ist also die einzige Kodierung, die in alten und neuen Builds lädt.

Siehe docs/ARCHITECTURE.md für die Begründung und docs/FORMAT.md für die Dateiformat-Referenz, abgeleitet aus dem Upstream-Quellcode mit

Zeilenangaben.

Korrektheit

Das Format ist Reverse-Engineered, daher ist die Korrektheit tragend:

  • 372 Upstream-Schaltkreise werden über den Parser byte-identisch zurückgespielt.

  • Erzeugte Ausgabe wird auf Terminals-Zusammenfall, Escaping und die Flag-Bits geprüft, die vom Upstream aufgezwungen werden.

  • Live-Verifizierung: Erzeugte Schaltkreise werden in den echten Simulator geladen und berücksichtigt dieaddesbackgelesenen. So wurde die Geometrie der mehrpinigen Bauteile validiert – ein OpAmp-Followerz muss tatsächlich folgen, und ein als Transistor muss werden.

npm run reference:fetch   # clone upstream (not vendored; see docs/LICENSING.md)
npm test

Die Testsuite benötigt keine Netzwerke.

Lizenz

circuitsnap ist MIT. CircuitJS1 ist GPL-2.0-or-later von Paul Falstad and Iain Sharp und wird hier weder gebündelt noch modifiziert – circuitsnap erzeugt Dateien in seinem Format und öffnet seine URL. Die volle Begründung inklusive der Handhabung von falstad.coms AI-Crawler-Signaturen findest du in docs/LICENSING.md (kurz: kein Crawling, kein Scraping, Tests völlig, @base-url Standard)

Nicht verbunden mit dem CircuitJS1-Team, noch durch es unterstützt.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Generates, simulates, and inspects LTspice circuits via MCP tools and resources, providing structured JSON interfaces for AI agents.
    MIT
  • F
    license
    Not graded
    quality
    F
    maintenance
    Provides circuit simulation capabilities via MCP, enabling creation, simulation (DC, AC, transient), and analysis of electronic circuits using PySpice.
    1
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables MCP-compatible agents to generate Qucs circuit schematics, run simulations, and parse results programmatically.
    1
    MIT