Model Context Protocol
The MCP server
agentee mcp serves one project over stdio with 30 tools. The agent still writes TOML with its own file tools; the server checks, renders, routes, simulates and writes the fab package, and hands rendered PNGs straight back into the conversation.
Add it to your client
Claude Code
a shell in the project
claude mcp add agentee -- agentee mcp "$PWD"Codex
~/.codex/config.toml
[mcp_servers.agentee] command = "agentee" args = ["mcp", "/path/to/project"]Cursor, Claude Desktop and most other clients
.cursor/mcp.json, claude_desktop_config.json or the client’s own file
{ "mcpServers": { "agentee": { "command": "agentee", "args": ["mcp", "/path/to/project"] } } }
The path is the project directory, the one holding the TOML files. Pair the server with the skill, which tells the agent when to call each tool and in what order.
Tools
Read the project
format_referenceThe file format reference for boards, symbols and footprints, with examples. Read this before writing files.
list_itemsEvery board, symbol and footprint in the project with its file and error counts.
show_itemThe resolved model of one item as JSON: pins with positions, expanded pad arrays, stackup with computed trace geometry, impedance and current analysis.
namecheckLoad the project and report errors and warnings for every item, or one item.
include_infoitemdrcDesign rule checks of a layout. With list = true: every DRC rule with its id, category, severity, and whether it applies to this board and why. Without: the layout's diagnostics that carry a rule id. Rule ids go in the board's [drc] disable list or severity table.
listnamerender_itemRender an item to PNG exactly as the viewer shows it and return the image.
canvas_onlyheighthidden_pinshidenameregionsave_toshowunitwidthstackupsStackup presets for a board's `stackup.preset`: JLCPCB and PCBWay builds and generic HDI builds with layer thicknesses and er. Filter the list, or give name to get one preset's layers.
fablayersnamesearchthickness
Parts
kicad_searchSearch the installed KiCad libraries by name. Every word must match Library:Name.
kindlimitqueryimport_kicad_symbolConvert a KiCad symbol (Library:Name) into a .sym.toml in the project. with_footprint also imports its default footprint, or give footprint to pick one.
dirfootprintforcespecwith_footprintimport_kicad_footprintConvert a KiCad footprint (Library:Name) into a .fp.toml in the project.
dirforcespecnew_itemWrite a starter file for a board, symbol, footprint, schematic, layout or sim, to edit from. A sim starts as an FDTD run of a layout, or with sim_kind logic as a logic sim of a schematic (clock, reset, a clocked assertion) whose nets you rename.
dirkindnamesim_kindmodelsFind the 3D models (STEP or VRML) the project's footprints name, downloading missing KiCad library models into the cache. Reports each model's path and triangle count, or why it is missing.
Traces
impedanceTrace impedance on a board layer for a width (and pair gap), or the width that hits a target.
boardcoplanar_gapgaplayertargetwidthfield_solveSolve a trace cross-section with the GPU field solver: impedance, effective permittivity, C and L per metre, delay. Includes solder mask, thickness, coplanar grounds and differential pairs. Within 0.5% of exact references with fine = true.
boardcoplanar_gapfinegaplayernetclassno_masksweepwidthtrace_widthMinimum track width for a current (IPC-2221).
coppercurrentinternaltemp_riseserpentinePoints for a track that replaces a straight segment and adds a given length as trombone bumps to one side. Paste them into the track's points.
addamplitudefrompitchto
Layout
placePlace the layout's parts automatically as a quick start: connectors and edge-mount parts on the board edges (never an RF and a USB connector on one edge unless it must), mounting holes and fiducials in the corners, the largest chips near the centre, each IC's decoupling caps, crystal and pull-ups clustered at the pins they serve, placed by weighted wirelength, then legalised on a 0.05 mm grid with no courtyard overlaps and refined by simulated annealing. Writes at, rotation and side into [[footprints]] and refreshes the stored fills. Parts with locked = true stay put.
dry_runkeep_placednamepartsseedsiderouteAutoroute the ratsnest of the named nets of a layout on a grid, keeping each class's width, clearance, layers and via, and append the tracks and vias to the layout file. Existing copper is never moved unless reroute is set.
bend_costdry_rungridlayersnamenetspairsrerouteviavia_costvia_in_padtieTie every SMD pad of a plane net (a net with a [[zones]] entry) to the nearest plane layer with a short stub and a via beside the pad, away from the part body, and append them to the layout file. Use this for ground and supply pads instead of routing tracks between them; `route` with a glob skips plane nets.
dry_runnamenetstuneLength-match a layout: meander the short net of every pair over its skew limit and every match group member short of its target, on the longest segments where the bumps clear every other net, and write the points back into the tracks.
amplitudedry_runnamenetspitchneckNeck down track ends that enter a pad narrower than the track or break clearance near the pad: the end becomes a separate [[tracks]] entry with an explicit width, the smallest of the class width, the pad's smaller side and the widest that keeps clearance, rounded down to 0.01 mm, never under min_track_width and never longer than the class neckdown. taper steps the width down over a short chain of segments. Stored zone fills are refreshed.
dry_runnamenetstaperfillFill the zones of a layout and store the copper at the end of its file, so loads and the viewer skip the fill until the zone's copper, clearances or neighbours change.
namesilkMove every silk reference that check flags to the clear spot it suggests, repeating until the labels settle, and optionally hide the ones that have nowhere to go. Writes label = { at, rotation } or hide = true into the footprints.
dry_runhidenametestpointsAdd a test pad to each net that needs probe access and has none: a TestPoint part (TestPoint_Pad_D1.0mm footprint, both written into the project if missing) joined to the net in the schematic sheet that lists it, a footprint on the probe side in free space near the net's copper, and an autorouted track and via from the net's copper. Nets default to the layout's [test] nets; impedance and pair nets are skipped.
dry_runnamenetspitchsidelayoutRun the layout engine on a layout: the configured [engine] phases in order, then the score per term with the worst offenders of each. Phases not implemented yet are listed as skipped.
dry_runfromnameonlyto
Simulation
run_simRun a simulation (*.sim.toml): an FDTD run of a layout on the GPU (ports on pads, lumped models for passives, S-parameters saved as JSON and Touchstone next to the spec), any other kind (dc, thermal, cascade, channel, pdn), or a logic sim of the schematic netlist (stimulus, assertions, setup and hold, a VCD next to the spec). Render the sim afterwards to see the plot or the waveforms.
namesparamAnalyse a finished sim or cascade: passivity and reciprocity, a TDR of one port (impedance against time with a Gaussian edge), mixed-mode Sdd/Scc/Scd for a pair given as IN+,IN-,OUT+,OUT-, and crosstalk FROM,TO in frequency and as a step.
namepairrisetdrxtalk
Output
fabWrite the fab package for a layout into a folder: RS-274X Gerbers (X2) per copper, mask, paste, silk and edge layer, Excellon drills, a zip of those for upload, BOM (generic and JLCPCB), pick-and-place, fab notes and assembly drawings. Refuses while the layout has errors.
nameoutexportWrite a layout as one STEP assembly for enclosure CAD: the board as a solid with its drilled holes and cutouts, each part's STEP model embedded and placed, and VRML, generated and missing models as surfaces or boxes. Board bottom at z = 0, X and Y as the layout with Y up.
nameoutpartsPrice a layout's or schematic's BOM at Mouser and Farnell and find cheaper equivalents: the same part at the other distributor, resistors and ceramic capacitors with the same value, package, tolerance, voltage and dielectric (never a downgrade), generic discretes (2N7002, S1D, SS14, SMAJ..) by name and package, indicator LEDs by colour and package, and the distributor's suggested replacement for parts going obsolete. Costs are at the needed quantity, buying up to a price break when that is cheaper. Keys come from ~/.config/agentee/distributors.toml ([mouser] api_key, [farnell] api_key and store).
alternativesboardsdistributorsfarnell_storenamerefs