Skip to main content
Glama

fritzing-mcp

MCP stdio server for building and editing Fritzing circuit designs (.fzz sketches) and custom parts (.fzp/SVGs), wrapping the fz CLI — a stdlib-only Fritzing design toolkit for AI agents.

Tools

Parts

tool

purpose

fritzing_search_parts

search the 2663-part library + local custom parts

fritzing_part_connectors

list a part's connector ids/names/types (needed before wiring)

Sketch build

tool

purpose

fritzing_new_sketch

create an empty .fzz bundle

fritzing_place_part

place a part (coordinates in px at 90 DPI)

fritzing_wire

wire two connectors (r1.connector1 → led1.connector1)

fritzing_move_part / fritzing_set_properties / fritzing_remove_part

adjust instances

fritzing_show_sketch

dump instances/wires as JSON

Validation

tool

purpose

fritzing_check

validate sketch (must pass before hand-off)

fritzing_render

headless-render SVG/PNG for visual inspection

Custom parts

tool

purpose

fritzing_create_part

generate fzp + 4 view SVGs from a JSON spec, optionally install

fritzing_validate_part

validate a .fzp file

Hand-off

tool

purpose

fritzing_open_gui

open sketches in the Fritzing GUI for human review

Related MCP server: schematic-mcp-bridge

Requirements

  • Python ≥ 3.10, uv

  • The fz toolkit is bundled (fzkit/ + bin/fz + templates/) — no second repo needed. FZ_BIN optionally points at a different launcher.

  • Runtime data from a local Fritzing app checkout, located via FRITZING_APP_ROOT (default ~/code/fritzing/fritzing; render vars FRITZING_APP/FRITZING_LIBS/FRITZING_PLUGINS still win): part search needs <root>/parts/parts.db, custom-part authoring needs parts/fzp_checker.py, and headless rendering needs the Fritzing binary with Qt 6 libs plus ImageMagick for PNG. Sketch create/show/check work without any of it.

Install

uv sync   # or: uv venv && uv pip install -e .

Run

Add to your MCP client config:

{
  "mcpServers": {
    "fritzing": {
      "command": "uv",
      "args": ["run", "--project", "/path/to/fritzing-mcp", "fritzing-mcp"]
    }
  }
}

Smoke test

bun smoke.mjs    # or: node smoke.mjs

Drives the server over raw stdio MCP: searches parts, reads connectors, builds a LED+resistor sketch (place/wire/move/props), validates it, and renders the breadboard view. Prints SMOKE: N/N passed.

License

MIT

Available Tools

14 tools
fritzing_checkFritzing CheckA

Validate a sketch: unique modelIndexes, resolvable moduleIds, every instance has >= 1 view, every wire endpoint connector exists on its target. MUST pass before handing a design off or opening it in the GUI.

Inputs: file (required). Returns: result

fritzing_create_partFritzing Create PartA

Generate a custom part (fzp + 4 view SVGs) from a JSON spec.

Custom parts must have all 4 views; restart Fritzing after --install (parts are scanned at startup).

Inputs: spec_path (required), out, install. Returns: result

fritzing_move_partFritzing Move PartB

Move a placed instance (omit x/y to read its current position).

Inputs: ref (required), file (required), x, y. Returns: result

fritzing_new_sketchFritzing New SketchC

Create an empty Fritzing sketch bundle.

Inputs: path (required), force. Returns: result

fritzing_open_guiFritzing Open GuiA

Open sketch(es) in the Fritzing GUI for human review.

Inputs: files (required). Returns: result

fritzing_part_connectorsFritzing Part ConnectorsA

List a part's connector ids, names, and types (male/female/pad) as JSON.

Connector ids are what wire endpoints reference (e.g. "r1.connector1" -> "led1.connector1").

Inputs: module_id (required). Returns: result

fritzing_place_partFritzing Place PartA

Add a part instance to a sketch.

Coordinates are sketch pixels at 90 DPI (1 inch = 90 px; mm -> px = 90*mm/25.4). The placed instance's assigned ref is in the output — use it for wire/move/props.

Inputs: file (required), module_id (required), x, y, +3 more. Returns: result

fritzing_remove_partFritzing Remove PartC

Remove an instance from the sketch.

Inputs: ref (required), file (required). Returns: result

fritzing_renderFritzing RenderA

Headless-render sketch(es) to SVG (and optionally PNG via ImageMagick).

Writes _.svg/.png next to the target. The first render per session takes ~10 s (parts DB load). Read the PNG to visually inspect the design, then adjust positions/wires and re-render.

Inputs: target (required), png, view, density. Returns: result

fritzing_search_partsFritzing Search PartsA

Search the Fritzing parts library (2663 core parts + local custom parts).

Returns rows of moduleId title [family] (source). Call fritzing_part_connectors with a result's moduleId before wiring it.

Inputs: query (required), limit, verbose. Returns: result

fritzing_set_propertiesFritzing Set PropertiesC

Set instance properties (name=value pairs).

Inputs: ref (required), file (required), props (required). Returns: result

fritzing_show_sketchFritzing Show SketchC

Dump the sketch's instances (refs, moduleIds, positions, wires) as JSON.

Inputs: file (required). Returns: result

fritzing_validate_partFritzing Validate PartC

Validate a .fzp part definition file.

Inputs: fzp_path (required). Returns: result

fritzing_wireFritzing WireB

Wire two part connectors together (creates the electrical ).

Inputs: file (required), ref_a (required), ref_b (required), view, +1 more. Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.4/5.0

    Scored across 14 tools

    Disambiguation4/5

    Most tools target distinct actions (move, remove, place, wire, render, etc.), but fritzing_check (validate a whole sketch) and fritzing_validate_part (validate a single .fzp part definition) share the 'validate' verb and could be briefly confused despite the descriptions distinguishing their scope.

    Naming Consistency5/5

    Every tool uses the same snake_case verb/noun pattern with a uniform fritzing_ prefix (e.g. fritzing_place_part, fritzing_remove_part, fritzing_validate_part), making the set highly predictable.

    Tool Count5/5

    14 tools is well-scoped for an EDA/sketch-editing server, covering distinct lifecycle stages (part discovery, sketch creation, placement, wiring, validation, rendering) without redundancy.

    Completeness4/5

    The surface covers sketch creation, part placement/movement/removal, wiring, property setting, rendering, and custom part creation, but lacks wire removal/editing and sketch deletion, leaving minor gaps agents must work around.

    Related MCP Connectors

    Related MCP Servers

    • -
      license
      Not graded
      quality
      Not graded
      maintenance
      Enables AI agents to perform electronics design automation through the ZapTrace EDA kernel, including parsing designs, running ERC, placing components, routing nets, and generating manufacturing outputs (Gerber, BOM, etc.).
      -
    • F
      license
      D
      quality
      B
      maintenance
      Enables AI agents to design electrical schematics through a high-level semantic API, handling components, pins, nets, validation/ERC, auto-layout, and SVG/KiCad rendering without requiring coordinate or file internals.
      22
      -
    • F
      license
      B
      quality
      C
      maintenance
      Enables AI agents to create and edit real KiCad schematics and projects, run ERC/DRC validation, generate BOMs, and produce schematic/PCB/3D renders via kicad-cli, with SKiDL support and automatic backups.
      28
      -
    • A
      license
      Not graded
      quality
      C
      maintenance
      Enables AI agents to perform narrow, validated Fritzing engineering operations — searching parts, inspecting connectors, placing and moving components, wiring, validating, rendering, and saving projects — through a strictly sandboxed server that exposes no shell, arbitrary filesystem access, or direct Fritzing control, with lifecycle gating and a part trust model enforcing validation before render and save.
      GPL 2.0