Files
kicad-mcp-server/src/prompts/footprint.ts
Tom 914c4fa1e3 feat: add footprint + symbol creator tools
Footprint tools:
- create_footprint: generates .kicad_mod via f-string (SMD/THT, courtyard, silkscreen, fab)
- edit_footprint_pad: updates size/position/drill/shape in-place
- list_footprint_libraries: scans .pretty directories
- register_footprint_library: adds entry to fp-lib-table

Symbol tools:
- create_symbol: generates .kicad_sym with pins, rectangles, polylines
- delete_symbol: removes symbol from library
- list_symbols_in_library: lists all symbols in a .kicad_sym file
- register_symbol_library: adds entry to sym-lib-table

Also:
- Fix footprint format version: 20250114 (schematic) -> 20241229 (footprint)
- Two MCP prompts: create_footprint_guide + footprint_ipc_checklist

Live tested: TMC2209 footprint (19 pads), R_0603_Test, edit_footprint_pad,
TMC2209_Custom symbol with pins all confirmed in KiCAD 9
2026-02-28 22:42:27 +01:00

138 lines
4.4 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* Footprint prompts for KiCAD MCP server
*
* Guides Claude in creating and editing KiCAD footprints (.kicad_mod)
* using the create_footprint, edit_footprint_pad, and list_footprint_libraries tools.
*/
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { z } from "zod";
import { logger } from "../logger.js";
export function registerFootprintPrompts(server: McpServer): void {
logger.info("Registering footprint prompts");
// ------------------------------------------------------
// Create Footprint Prompt
// ------------------------------------------------------
server.prompt(
"create_footprint_guide",
{
component: z
.string()
.describe(
"Component description, e.g. 'SOT-23 NPN transistor' or '2-pin JST XH 2.5mm connector'",
),
libraryPath: z
.string()
.optional()
.describe("Target .pretty library path (optional)"),
},
() => ({
messages: [
{
role: "user",
content: {
type: "text",
text: `You are a KiCAD footprint expert. Create a correct KiCAD 9 footprint using the create_footprint tool.
## Component to footprint
{{component}}
## Library path
{{libraryPath}}
## Rules for correct footprints
### Coordinate system
- Origin (0,0) is the footprint anchor, typically the centre of the pad pattern.
- X increases to the right, Y increases downward (same as KiCAD screen).
- All values in millimetres.
### SMD pads
- type: "smd"
- Default layers: ["F.Cu", "F.Paste", "F.Mask"]
- No drill needed.
- Common shapes: "rect" for square/rectangular, "roundrect" for ICs.
### THT pads
- type: "thru_hole"
- Default layers: ["*.Cu", "*.Mask"]
- drill required (round = scalar, oval = {w, h}).
- Pad 1 is typically square (rect), remaining pads are circle.
### Courtyard (F.CrtYd)
- Add 0.25 mm clearance around the outermost extent of pads.
- Line width: 0.05 mm.
### Silkscreen (F.SilkS)
- Shows the component body outline, typically slightly inside the courtyard.
- Line width: 0.12 mm.
- Must not overlap pads.
### Fab layer (F.Fab)
- Shows the realistic component outline with pin-1 marker.
- Line width: 0.10 mm.
### Reference text
- Place "REF**" above the courtyard (negative Y = above).
- Value text below the courtyard (positive Y = below).
## Workflow
1. Calculate pad positions from datasheet pitch and land pattern.
2. Call create_footprint with pads[], courtyard, silkscreen, fabLayer.
3. Verify with edit_footprint_pad if any correction is needed.
## Common packages quick reference
| Package | Pitch | Pad size (SMD) | Notes |
|-----------|--------|------------------|------------------------------|
| 0402 | 1.0 mm | 0.6 × 0.7 mm | Very small, min 0.5 mm drill |
| 0603 | 1.6 mm | 1.0 × 1.0 mm | Standard small passive |
| 0805 | 2.0 mm | 1.4 × 1.2 mm | Easy to hand-solder |
| SOT-23 | 0.95 mm| 1.0 × 1.3 mm | 3-pin, 2 on one side |
| SOT-23-5 | 0.95 mm| 0.6 × 1.0 mm | 5-pin |
| SOIC-8 | 1.27 mm| 1.6 × 0.6 mm | 4 pins each side |
| DIP-8 | 2.54 mm| dia 1.6, drill 0.8| THT, 100 mil grid |
Now create the footprint for: {{component}}`,
},
},
],
}),
);
// ------------------------------------------------------
// Footprint IPC Checklist Prompt
// ------------------------------------------------------
server.prompt(
"footprint_ipc_checklist",
{
footprintPath: z
.string()
.describe("Path to the .kicad_mod file to review"),
},
() => ({
messages: [
{
role: "user",
content: {
type: "text",
text: `Review the footprint at {{footprintPath}} against IPC-7351 land pattern guidelines.
Check:
1. **Pad size** is the copper area sufficient for soldering (not undersized)?
2. **Courtyard** at least 0.25 mm clearance around all pads?
3. **Silkscreen** does it overlap pads? (it should NOT)
4. **Pad 1 marker** is pin 1 identifiable (square pad or triangle on silkscreen)?
5. **Drill size** for THT: drill ≥ lead diameter + 0.3 mm?
6. **Layer assignments** SMD pads: F.Cu/F.Paste/F.Mask; THT: *.Cu/*.Mask?
7. **Anchor** is the origin centred on the pad pattern?
Use edit_footprint_pad to fix any issues found.`,
},
},
],
}),
);
}