kicad-mcp-layer
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| KICAD_CLI | No | Explicit path to kicad-cli; if set and wrong, that is an error. Default: auto-detected. | |
| KICAD_LAYER_LOG | No | stderr log level. Default: INFO. | |
| KICAD_API_SOCKET | No | IPC address, honoured by kicad-python. Default: ipc://%TEMP%\kicad\api.sock | |
| KICAD_LAYER_MODE | No | readonly (default) or write allows design edits. | |
| KICAD_LAYER_TOOLS | No | core (default) registers checks, exports, renders, reviews, libraries, documents and board reads; full adds the design-edit tools and the routers. | |
| KICAD_LAYER_CACHE_DIR | No | Netlist and report cache. Default: %LOCALAPPDATA%\kicad-mcp-layer\cache | |
| KICAD_LAYER_WORKSPACE | No | Every path must resolve under it. Default: current directory. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| kicad_doctorA | Diagnose this server and its environment: which process is answering, which kicad-cli was found, whether KiCad's API is reachable and which documents are open, and what to do about any problem. Call this first whenever another tool fails unexpectedly. |
| capabilitiesA | What this server can do, through which channel (cli, ipc, file), and what KiCad 10 makes impossible. Consult it before promising the user something. |
| project_openA | Locate a KiCad project and describe it: root schematic, board, all sheets, text variables, netclasses, file format versions, and any editor lock files that mean KiCad has a file open. |
| run_ercA | Run KiCad's Electrical Rules Check on the whole schematic hierarchy with kicad-cli and return a verdict (PASS, WARN, FAIL, or UNVERIFIED when no report was produced) with every finding, keyed by stable ids and item UUIDs. Works whether or not KiCad is open. |
| run_drcA | Run KiCad's Design Rules Check on a board with kicad-cli. The verdict counts clearance and other violations, unconnected items (unrouted nets), and schematic parity problems; a board with unrouted nets is never PASS. Works whether or not KiCad is open. |
| sch_netlistA | The resolved connectivity of the whole schematic hierarchy: every net with its nodes (ref, pin, pin function, pin type), every component, every sheet. Exported by kicad-cli from the root sheet and cached until any schematic file changes. This is the source of truth for 'what connects to what'. |
| sch_traceA | For one component, list each pin's net and everything else on that net. Unconnected pins have net null. Uses the cached netlist. |
| export_bomB | Export a bill of materials as CSV with kicad-cli and return the parsed rows. |
| export_fabA | Produce fabrication files with kicad-cli and list exactly what was written, with sizes and hashes. Reads the board file on disk: save in KiCad first if it has unsaved changes. |
| render_boardA | Render the board in 3D to a PNG with kicad-cli and return the image so you can look at it. Reads the board file on disk. |
| sch_renderA | Draw every sheet of the schematic to SVG (one file per sheet) or one multi-page PDF with kicad-cli, and return the file paths so the client can read and display them. |
| pcb_summaryA | Describe the board open in KiCad's PCB Editor through the live API: title block, copper layer count, enabled layers, outline size, item counts, stackup and netclass rules. Needs KiCad running with the API enabled and the board open; kicad_doctor explains if it is not. |
| pcb_list_itemsA | List items of one kind from the board open in KiCad, in millimetres and degrees with KiCad layer names and item ids. Page with limit and offset on large boards. |
| pcb_net_statsA | Per-net routing statistics from the open board: track count and total length, widths, layers, vias, pads, a hint when a net has pads but no tracks, and differential-pair candidates with their length mismatch. |
| lib_fetchA | Symbol, footprint and 3D model (STEP and WRL) for one LCSC code, converted from EasyEDA's component data (EasyEDA is JLCPCB's own design tool; nearly every part in the assembly catalogue has a model there) by easyeda2kicad into a library next to the project. A part swap becomes: parts_search for the code and stock, lib_fetch for the files, then fp_info and the datasheet drawing (doc_page) for the pad-for-pad check. The models are drawn by users and JLCPCB staff: treat them as drafts, never as verified. |
| lib_searchA | Search every symbol and footprint library KiCad can see (about 22,000 symbols and 15,000 footprints in the stock libraries) by name, description and keywords. Exact and prefix name matches come first. The index is built on first use, which takes about half a minute, then refreshes only for libraries whose files changed. |
| sym_infoA | Everything about one library symbol: description, datasheet, default footprint, footprint filters and the footprints that satisfy them, units, and every pin with its number, name and electrical type. Derived symbols are shown flattened, the way KiCad places them. |
| fp_infoA | Everything about one library footprint: description, tags, mount type, courtyard size, 3D model, and every pad with number, kind, shape, position, size, drill and layers, exactly as KiCad will place it. |
| lib_indexA | Build or refresh the library index and report its size and age. Normally unnecessary: lib_search builds it on first use and refreshes changed libraries automatically. |
| sch_list_componentsA | Every placed symbol on one sheet, read from the file: reference, library id, value, footprint, position, rotation, unit, properties and optionally pin coordinates. Works with KiCad closed. |
| sch_get_symbolA | One placed symbol in full, with every pin's number, name, electrical type and sheet position, which is what you need to wire to it. |
| review_boardA | Review a board the way a fab and a layout reviewer would: DRC and unrouted connections, zone fill state, footprints outside the outline, manufacturability against the fab's published limits (tracks, vias, annular rings, hole spacing, edge clearance, silkscreen), track widths on power nets, zone stitching, and decoupling capacitor distance. Every check reports PASS, WARN, FAIL or UNVERIFIED with its evidence and the source of its limits. |
| review_schematicA | Review a schematic: ERC, footprints assigned, values set, annotation, power nets driven, decoupling present, bill-of-materials summary, and the honest state of SPICE simulation. Every check reports PASS, WARN, FAIL, INFO or UNVERIFIED with its evidence. |
| review_projectA | The full review of a project: every schematic check followed by every board check, in one report with one verdict and the list of checks that could not run. |
| route_checkA | Measure every differential pair on a board: the routed length of each half, the skew between them against the interface's limit (Ethernet and MIPI 0.15 mm, PCIe and USB 3.0 0.1 mm, USB 2.0 0.15 mm by default, from the Compute Module 5 datasheet), the share of the pair that runs coupled at the net class's gap, width and gap deviations, and layer changes. Pairs are found by name (X_P/X_N, X_DP/X_DN, X+/X-); unrouted pairs are listed as such. |
| impedance_calcA | Estimate the impedance of an outer-layer trace or pair on a stack-up preset with closed-form microstrip formulas, and report the fab's own published number when the geometry matches one of its table entries. Closed forms are about ten percent optimistic for tightly coupled pairs; the table entry is the one to design to. |
| stackup_infoB | A stack-up preset: layers with thickness and permittivity, and the fab's published trace geometries per target impedance, with the source they were read from. |
| parts_searchA | Search JLCPCB's assembly parts catalogue: LCSC code, manufacturer part number, package, stock, whether it is a basic part, and unit price. Uses the same undocumented endpoint as jlcpcb.com/parts, so a failure means the endpoint changed, not that the part is missing. |
| doc_fetchA | Download a technical document into the project's documentation library (research/references by default) and index it with its source URL, date, size and hash. A plain fetch with browser-grade headers comes first; it follows redirects and a single PDF link on a viewer page. When a site answers with a scripted download portal or refuses the plain client, headless Chromium loads the page and takes the download it offers. If that fails too (login walls, bot checks), the error says so: open the URL in a browser, save the file, and use doc_import. Find URLs with web search first; manufacturer sites and distributor mirrors usually both work. |
| doc_importB | Bring a document that is already on disk into the documentation library and index it. |
| doc_listA | List or search the documentation library. Text hits include the page number, so a following doc_text or doc_page call can go straight to the right place. |
| doc_textA | Extract the text of a PDF (or read a text document), per page, or search it. With find, the answer is the matches alone: a page number and a short window per hit, so a lookup costs a few hundred tokens; add pages to read a page around a hit. Pages that are drawings or scanned images come back empty; use doc_page to look at those. |
| doc_pageA | Render one page of a PDF to an image and return it, for pinout drawings, package dimensions, tables and anything else text extraction cannot carry. |
| doc_sectionsA | The document's index: its bookmarks, its contents page, the headings found in the text and every table and figure caption, each with its page. Ask this first, then doc_text with those pages or doc_page for the table: a datasheet lookup then costs the rows you need, not the pages around them. |
| doc_factsA | A part's fact sheet: pins, limits, the values a design is built on, the recommended circuit and the package, every row with its datasheet page, written once from the datasheet and checked against the rendered pages. The cheapest answer to a datasheet question. Without a sheet the answer says how to write one (a subagent with doc_sections, doc_text and doc_page, into research/parts/). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 35 tools
Most tools target distinct resources or workflows with clear prefixes, but the review tools overlap with specific checks such as run_erc, run_drc, and pcb_net_stats. An agent can usually distinguish them, though choosing between a focused check and a broader review may require care.
Names are consistently snake_case and use recognizable domain prefixes such as pcb_, sch_, doc_, lib_, run_, and review_. The verb/noun pattern is not perfectly uniform, with noun phrases like pcb_summary and capabilities mixed with verb-first names, but the set remains readable.
35 tools is heavy for an MCP server tool set and exceeds the rubric's 25+ threshold for likely excess. Although KiCad is a broad domain, several tools could be consolidated or exposed as subcommands to reduce selection and context burden.
The server covers a wide read/analyze surface: project inspection, schematic and PCB checks, libraries, fabrication outputs, documentation, parts lookup, and design reviews. If editing or modifying boards and schematics is in scope, those operations are a notable gap, but for an analysis/review layer the surface is fairly complete.