Universal Netlist MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
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": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_designsA | List the design projects in a directory, one path each: a .DSN, a .PrjPcb, a .kicad_pro, or a Universal Netlist .netlist.json. That path is what every other tool takes; use this tool instead of searching the filesystem.
Cadence: query the .DSN; it carries properties, connectivity, and CIS stuffing. KiCad: query the .kicad_pro; a committed .net export is read directly, otherwise the schematics are read themselves (no KiCad install needed), with kicad-cli as the last resort; a design none of them can read is reported in A design marked |
| list_componentsA | List components of a specific type in a design. The type is the refdes prefix, matched whole and case-insensitively: "u" gives U1 and U2 but NOT USB1, whose prefix is USB, and "tp" gives the test points. Asking for a partial prefix returns nothing rather than everything starting with it, so if a part you expected is missing, look for it under its own prefix. Identical components are grouped for compact output: parts share a group only when their MPN, description, comment and value all agree, so every field a group reports is true of every part in it. |
| list_netsA | List all net names in a design, sorted alphabetically. The result can be large. Prefer search_nets for targeted queries. |
| search_netsA | Search for nets matching a regex pattern. Matching is case-insensitive by default. Returns sorted results keyed by design name, with a notes field when nothing matches. KiCad nets declared inside a hierarchical sheet are sheet-path-prefixed (e.g. a "D0" data line on the Peripherals sheet is named "/Peripherals/D0", not "/D0"), so prefer unanchored patterns like "D0" over "^/D0$" or you may miss bussed/hierarchical nets. A name with leading or trailing whitespace also matches as trimmed, so "^SIG$" finds "SIG ". Rejects patterns that match all items; use list_nets for full results. |
| search_components_by_refdesA | Search for components by refdes pattern. Matching is case-insensitive. Identical components are grouped for compact output, on MPN, description, comment and value together, so every field a group reports is true of every part in it. |
| search_components_by_mpnA | Search for components by MPN (Manufacturer Part Number) pattern. Not all netlists include MPN data; if unavailable, fall back to search_components_by_refdes or search_components_by_description, or ask the user for a BOM. |
| search_components_by_descriptionA | Search for components by description pattern. Not all netlists include description data; if unavailable, fall back to search_components_by_refdes or search_components_by_mpn, or ask the user for a BOM. |
| query_xnet_by_net_nameA | Get full XNET (Extended Net) connectivity for a net. Traces through series components, so the result is the whole electrical node rather than the one net; |
| query_xnet_by_pin_nameA | Get full XNET connectivity starting from a component pin, named REFDES.PIN (e.g. U1.A5, R10.1). Traces through series components, so the result is the whole electrical node; |
| query_componentA | Get full component details including all pin connections. Refdes lookup is case-insensitive. Returns MPN, description, value, and pin-to-net mappings when available. Each pin maps to its net name, or to {name, net} where the pin has a function name that differs from its number. A pin on no net reads as the net "NC", a marker and not a queryable net. If the refdes is not found, |
| run_ercA | Run electrical rule checks (ERC) on a design's netlist and return findings grouped by severity ( |
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 11 tools
The set is deliberately pairwise: list vs search for nets and components, and query_xnet_by_net_name vs query_xnet_by_pin_name differ only in their input anchor. Each description explicitly steers callers (e.g. 'Rejects patterns that match all items; use list_components for full results', 'if the refdes is not found, search_components_by_refdes finds it'), so the boundaries are unambiguous. The three search_components_by_* variants are cleanly separated by field, with fallback guidance when a field is absent.
All names are snake_case verb_noun with a consistent suffix grammar (_by_refdes, _by_mpn, _by_description, _by_net_name, _by_pin_name). The only wrinkle is three retrieval verbs (list_ for enumeration, search_ for filtered lookup, query_ for detail fetch), which is semantically motivated but not a single rigid pattern, and query_component sits slightly apart from the search_components_* family.
Eleven tools is well within the sweet spot and each one maps to a distinct question an agent would ask of a netlist (discover designs, enumerate/search nets, enumerate/search/detail components, trace XNETs from either end, run ERC). No tool looks redundant padding, and no core operation is split across multiple near-duplicates.
The surface covers the full read-only analysis lifecycle: design discovery and variant handling, net and component enumeration and search, detail lookup, connectivity tracing, and ERC. Gaps are minor: there is no direct net-detail tool (net info must be reached via search_nets or an XNET query) and no BOM/export or differential-pair/bus-level query, though agents can approximate these with existing tools.