Files
KiCAD-MCP-Server/python/schemas/tool_schemas.py
T
KiCAD MCP Bot d23e90b847 feat: Implement comprehensive MCP capabilities with tool schemas and resources
This major update brings the KiCAD MCP server to full MCP 2025-06-18 spec
compliance with proper tool schemas and resources capability.

## Dependencies Updated
- @modelcontextprotocol/sdk: 1.10.0 → 1.21.0 (critical update)
- dotenv: 16.0.3 → 17.0.0 (latest stable)
- typescript: 5.2.2 → 5.9.3
- zod: 3.22.2 → 3.25.0
- @types/node: 20.5.6 → 20.19.0
- @types/express: 5.0.1 → 5.0.5
- requests (Python): 2.31.0 → 2.32.5
- Added @cfworker/json-schema for MCP SDK compatibility

## Tool Schemas (52 tools)
Created comprehensive JSON Schema definitions for all tools organized by category:
- **Project Tools** (4): create_project, open_project, save_project, get_project_info
- **Board Tools** (9): set_board_size, add_board_outline, add_layer, etc.
- **Component Tools** (10): place_component, move_component, rotate_component, etc.
- **Routing Tools** (8): add_net, route_trace, add_via, route_differential_pair, etc.
- **Library Tools** (4): list_libraries, search_footprints, etc.
- **Design Rule Tools** (4): set_design_rules, run_drc, get_drc_violations, etc.
- **Export Tools** (5): export_gerber, export_pdf, export_svg, export_3d, export_bom
- **Schematic Tools** (6): create_schematic, add_schematic_component, etc.
- **UI Tools** (2): check_kicad_ui, launch_kicad_ui

Each tool now has:
- Detailed descriptions explaining purpose
- Complete JSON Schema for input validation
- Required/optional parameter specifications
- Type constraints and validation rules

## Resources Capability (8 resources)
Implemented MCP resources to expose project state:
- `kicad://project/current/info` - Project metadata
- `kicad://project/current/board` - Board properties
- `kicad://project/current/components` - Component list
- `kicad://project/current/nets` - Electrical nets
- `kicad://project/current/layers` - Layer stack
- `kicad://project/current/design-rules` - Design rules
- `kicad://project/current/drc-report` - DRC violations
- `kicad://board/preview.png` - Board preview image

## Protocol Compliance
- Updated initialize response with proper capabilities declaration
- Added `tools: { listChanged: true }`
- Added `resources: { subscribe: false, listChanged: true }`
- Enhanced serverInfo with title and version
- Added instructions field for user guidance
- Implemented resources/list method
- Implemented resources/read method with proper error handling
- All responses follow MCP 2025-06-18 spec exactly

## Benefits
 Claude/LLMs can now understand what each tool does
 Automatic parameter validation via JSON Schema
 Better error messages for invalid inputs
 Access to project state via resources (no need to call tools)
 Full MCP protocol compliance
 Better developer experience with latest SDK features

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-05 21:50:33 -05:00

1251 lines
44 KiB
Python

"""
Comprehensive tool schema definitions for all KiCAD MCP commands
Following MCP 2025-06-18 specification for tool definitions.
Each tool includes:
- name: Unique identifier
- title: Human-readable display name
- description: Detailed explanation of what the tool does
- inputSchema: JSON Schema for parameters
- outputSchema: Optional JSON Schema for return values (structured content)
"""
from typing import Dict, Any
# =============================================================================
# PROJECT TOOLS
# =============================================================================
PROJECT_TOOLS = [
{
"name": "create_project",
"title": "Create New KiCAD Project",
"description": "Creates a new KiCAD project with PCB board file and optional project configuration. Automatically creates project directory and initializes board with default settings.",
"inputSchema": {
"type": "object",
"properties": {
"projectName": {
"type": "string",
"description": "Name of the project (used for file naming)",
"minLength": 1
},
"path": {
"type": "string",
"description": "Directory path where project will be created (defaults to current working directory)"
},
"template": {
"type": "string",
"description": "Optional path to template board file to copy settings from"
}
},
"required": ["projectName"]
}
},
{
"name": "open_project",
"title": "Open Existing KiCAD Project",
"description": "Opens an existing KiCAD project file (.kicad_pro or .kicad_pcb) and loads the board into memory for manipulation.",
"inputSchema": {
"type": "object",
"properties": {
"filename": {
"type": "string",
"description": "Path to .kicad_pro or .kicad_pcb file"
}
},
"required": ["filename"]
}
},
{
"name": "save_project",
"title": "Save Current Project",
"description": "Saves the current board to disk. Can optionally save to a new location.",
"inputSchema": {
"type": "object",
"properties": {
"filename": {
"type": "string",
"description": "Optional new path to save the board (if not provided, saves to current location)"
}
}
}
},
{
"name": "get_project_info",
"title": "Get Project Information",
"description": "Retrieves metadata and properties of the currently open project including name, paths, and board status.",
"inputSchema": {
"type": "object",
"properties": {}
}
}
]
# =============================================================================
# BOARD TOOLS
# =============================================================================
BOARD_TOOLS = [
{
"name": "set_board_size",
"title": "Set Board Dimensions",
"description": "Sets the PCB board dimensions. The board outline must be added separately using add_board_outline.",
"inputSchema": {
"type": "object",
"properties": {
"width": {
"type": "number",
"description": "Board width in millimeters",
"minimum": 1
},
"height": {
"type": "number",
"description": "Board height in millimeters",
"minimum": 1
}
},
"required": ["width", "height"]
}
},
{
"name": "add_board_outline",
"title": "Add Board Outline",
"description": "Adds a board outline shape (rectangle, rounded rectangle, circle, or polygon) on the Edge.Cuts layer.",
"inputSchema": {
"type": "object",
"properties": {
"shape": {
"type": "string",
"enum": ["rectangle", "rounded_rectangle", "circle", "polygon"],
"description": "Shape type for the board outline"
},
"width": {
"type": "number",
"description": "Width in mm (for rectangle/rounded_rectangle)",
"minimum": 1
},
"height": {
"type": "number",
"description": "Height in mm (for rectangle/rounded_rectangle)",
"minimum": 1
},
"radius": {
"type": "number",
"description": "Radius in mm (for circle) or corner radius (for rounded_rectangle)",
"minimum": 0
},
"points": {
"type": "array",
"description": "Array of [x, y] coordinates in mm (for polygon)",
"items": {
"type": "array",
"items": {"type": "number"},
"minItems": 2,
"maxItems": 2
},
"minItems": 3
}
},
"required": ["shape"]
}
},
{
"name": "add_layer",
"title": "Add Custom Layer",
"description": "Adds a new custom layer to the board stack (e.g., User.1, User.Comments).",
"inputSchema": {
"type": "object",
"properties": {
"layerName": {
"type": "string",
"description": "Name of the layer to add"
},
"layerType": {
"type": "string",
"enum": ["signal", "power", "mixed", "jumper"],
"description": "Type of layer (for copper layers)"
}
},
"required": ["layerName"]
}
},
{
"name": "set_active_layer",
"title": "Set Active Layer",
"description": "Sets the currently active layer for drawing operations.",
"inputSchema": {
"type": "object",
"properties": {
"layerName": {
"type": "string",
"description": "Name of the layer to make active (e.g., F.Cu, B.Cu, Edge.Cuts)"
}
},
"required": ["layerName"]
}
},
{
"name": "get_layer_list",
"title": "List Board Layers",
"description": "Returns a list of all layers in the board with their properties.",
"inputSchema": {
"type": "object",
"properties": {}
}
},
{
"name": "get_board_info",
"title": "Get Board Information",
"description": "Retrieves comprehensive board information including dimensions, layer count, component count, and design rules.",
"inputSchema": {
"type": "object",
"properties": {}
}
},
{
"name": "get_board_2d_view",
"title": "Render Board Preview",
"description": "Generates a 2D visual representation of the current board state as a PNG image.",
"inputSchema": {
"type": "object",
"properties": {
"width": {
"type": "number",
"description": "Image width in pixels (default: 800)",
"minimum": 100,
"default": 800
},
"height": {
"type": "number",
"description": "Image height in pixels (default: 600)",
"minimum": 100,
"default": 600
}
}
}
},
{
"name": "add_mounting_hole",
"title": "Add Mounting Hole",
"description": "Adds a mounting hole (non-plated through hole) at the specified position with given diameter.",
"inputSchema": {
"type": "object",
"properties": {
"x": {
"type": "number",
"description": "X coordinate in millimeters"
},
"y": {
"type": "number",
"description": "Y coordinate in millimeters"
},
"diameter": {
"type": "number",
"description": "Hole diameter in millimeters",
"minimum": 0.1
}
},
"required": ["x", "y", "diameter"]
}
},
{
"name": "add_board_text",
"title": "Add Text to Board",
"description": "Adds text annotation to the board on a specified layer (e.g., F.SilkS for top silkscreen).",
"inputSchema": {
"type": "object",
"properties": {
"text": {
"type": "string",
"description": "Text content to add",
"minLength": 1
},
"x": {
"type": "number",
"description": "X coordinate in millimeters"
},
"y": {
"type": "number",
"description": "Y coordinate in millimeters"
},
"layer": {
"type": "string",
"description": "Layer name (e.g., F.SilkS, B.SilkS, F.Cu)",
"default": "F.SilkS"
},
"size": {
"type": "number",
"description": "Text size in millimeters",
"minimum": 0.1,
"default": 1.0
},
"thickness": {
"type": "number",
"description": "Text thickness in millimeters",
"minimum": 0.01,
"default": 0.15
}
},
"required": ["text", "x", "y"]
}
}
]
# =============================================================================
# COMPONENT TOOLS
# =============================================================================
COMPONENT_TOOLS = [
{
"name": "place_component",
"title": "Place Component",
"description": "Places a component with specified footprint at given coordinates on the board.",
"inputSchema": {
"type": "object",
"properties": {
"reference": {
"type": "string",
"description": "Component reference designator (e.g., R1, C2, U3)"
},
"footprint": {
"type": "string",
"description": "Footprint library:name (e.g., Resistor_SMD:R_0805_2012Metric)"
},
"x": {
"type": "number",
"description": "X coordinate in millimeters"
},
"y": {
"type": "number",
"description": "Y coordinate in millimeters"
},
"rotation": {
"type": "number",
"description": "Rotation angle in degrees (0-360)",
"minimum": 0,
"maximum": 360,
"default": 0
},
"layer": {
"type": "string",
"enum": ["F.Cu", "B.Cu"],
"description": "Board layer (top or bottom)",
"default": "F.Cu"
}
},
"required": ["reference", "footprint", "x", "y"]
}
},
{
"name": "move_component",
"title": "Move Component",
"description": "Moves an existing component to a new position on the board.",
"inputSchema": {
"type": "object",
"properties": {
"reference": {
"type": "string",
"description": "Component reference designator"
},
"x": {
"type": "number",
"description": "New X coordinate in millimeters"
},
"y": {
"type": "number",
"description": "New Y coordinate in millimeters"
}
},
"required": ["reference", "x", "y"]
}
},
{
"name": "rotate_component",
"title": "Rotate Component",
"description": "Rotates a component by specified angle. Rotation is cumulative with existing rotation.",
"inputSchema": {
"type": "object",
"properties": {
"reference": {
"type": "string",
"description": "Component reference designator"
},
"angle": {
"type": "number",
"description": "Rotation angle in degrees (positive = counterclockwise)"
}
},
"required": ["reference", "angle"]
}
},
{
"name": "delete_component",
"title": "Delete Component",
"description": "Removes a component from the board.",
"inputSchema": {
"type": "object",
"properties": {
"reference": {
"type": "string",
"description": "Component reference designator"
}
},
"required": ["reference"]
}
},
{
"name": "edit_component",
"title": "Edit Component Properties",
"description": "Modifies properties of an existing component (value, footprint, etc.).",
"inputSchema": {
"type": "object",
"properties": {
"reference": {
"type": "string",
"description": "Component reference designator"
},
"value": {
"type": "string",
"description": "New component value"
},
"footprint": {
"type": "string",
"description": "New footprint library:name"
}
},
"required": ["reference"]
}
},
{
"name": "get_component_properties",
"title": "Get Component Properties",
"description": "Retrieves detailed properties of a specific component.",
"inputSchema": {
"type": "object",
"properties": {
"reference": {
"type": "string",
"description": "Component reference designator"
}
},
"required": ["reference"]
}
},
{
"name": "get_component_list",
"title": "List All Components",
"description": "Returns a list of all components on the board with their properties.",
"inputSchema": {
"type": "object",
"properties": {}
}
},
{
"name": "place_component_array",
"title": "Place Component Array",
"description": "Places multiple copies of a component in a grid or circular pattern.",
"inputSchema": {
"type": "object",
"properties": {
"referencePrefix": {
"type": "string",
"description": "Reference prefix (e.g., 'R' for R1, R2, R3...)"
},
"startNumber": {
"type": "integer",
"description": "Starting number for references",
"minimum": 1,
"default": 1
},
"footprint": {
"type": "string",
"description": "Footprint library:name"
},
"pattern": {
"type": "string",
"enum": ["grid", "circular"],
"description": "Array pattern type"
},
"count": {
"type": "integer",
"description": "Total number of components to place",
"minimum": 1
},
"startX": {
"type": "number",
"description": "Starting X coordinate in millimeters"
},
"startY": {
"type": "number",
"description": "Starting Y coordinate in millimeters"
},
"spacingX": {
"type": "number",
"description": "Horizontal spacing in mm (for grid pattern)"
},
"spacingY": {
"type": "number",
"description": "Vertical spacing in mm (for grid pattern)"
},
"radius": {
"type": "number",
"description": "Circle radius in mm (for circular pattern)"
},
"rows": {
"type": "integer",
"description": "Number of rows (for grid pattern)",
"minimum": 1
},
"columns": {
"type": "integer",
"description": "Number of columns (for grid pattern)",
"minimum": 1
}
},
"required": ["referencePrefix", "footprint", "pattern", "count", "startX", "startY"]
}
},
{
"name": "align_components",
"title": "Align Components",
"description": "Aligns multiple components horizontally or vertically.",
"inputSchema": {
"type": "object",
"properties": {
"references": {
"type": "array",
"description": "Array of component reference designators to align",
"items": {"type": "string"},
"minItems": 2
},
"direction": {
"type": "string",
"enum": ["horizontal", "vertical"],
"description": "Alignment direction"
},
"spacing": {
"type": "number",
"description": "Spacing between components in mm (optional, for even distribution)"
}
},
"required": ["references", "direction"]
}
},
{
"name": "duplicate_component",
"title": "Duplicate Component",
"description": "Creates a copy of an existing component with new reference designator.",
"inputSchema": {
"type": "object",
"properties": {
"sourceReference": {
"type": "string",
"description": "Reference of component to duplicate"
},
"newReference": {
"type": "string",
"description": "Reference designator for the new component"
},
"offsetX": {
"type": "number",
"description": "X offset from original position in mm",
"default": 0
},
"offsetY": {
"type": "number",
"description": "Y offset from original position in mm",
"default": 0
}
},
"required": ["sourceReference", "newReference"]
}
}
]
# =============================================================================
# ROUTING TOOLS
# =============================================================================
ROUTING_TOOLS = [
{
"name": "add_net",
"title": "Create Electrical Net",
"description": "Creates a new electrical net for signal routing.",
"inputSchema": {
"type": "object",
"properties": {
"netName": {
"type": "string",
"description": "Name of the net (e.g., VCC, GND, SDA)",
"minLength": 1
},
"netClass": {
"type": "string",
"description": "Optional net class to assign (must exist first)"
}
},
"required": ["netName"]
}
},
{
"name": "route_trace",
"title": "Route PCB Trace",
"description": "Routes a copper trace between two points or pads on a specified layer.",
"inputSchema": {
"type": "object",
"properties": {
"netName": {
"type": "string",
"description": "Net name for this trace"
},
"layer": {
"type": "string",
"description": "Layer to route on (e.g., F.Cu, B.Cu)",
"default": "F.Cu"
},
"width": {
"type": "number",
"description": "Trace width in millimeters",
"minimum": 0.1
},
"points": {
"type": "array",
"description": "Array of [x, y] waypoints in millimeters",
"items": {
"type": "array",
"items": {"type": "number"},
"minItems": 2,
"maxItems": 2
},
"minItems": 2
}
},
"required": ["points", "width"]
}
},
{
"name": "add_via",
"title": "Add Via",
"description": "Adds a via (plated through-hole) to connect traces between layers.",
"inputSchema": {
"type": "object",
"properties": {
"x": {
"type": "number",
"description": "X coordinate in millimeters"
},
"y": {
"type": "number",
"description": "Y coordinate in millimeters"
},
"diameter": {
"type": "number",
"description": "Via diameter in millimeters",
"minimum": 0.1
},
"drill": {
"type": "number",
"description": "Drill diameter in millimeters",
"minimum": 0.1
},
"netName": {
"type": "string",
"description": "Net name to assign to this via"
}
},
"required": ["x", "y", "diameter", "drill"]
}
},
{
"name": "delete_trace",
"title": "Delete Trace",
"description": "Removes a trace or segment from the board.",
"inputSchema": {
"type": "object",
"properties": {
"traceId": {
"type": "string",
"description": "Identifier of the trace to delete"
}
},
"required": ["traceId"]
}
},
{
"name": "get_nets_list",
"title": "List All Nets",
"description": "Returns a list of all electrical nets defined on the board.",
"inputSchema": {
"type": "object",
"properties": {}
}
},
{
"name": "create_netclass",
"title": "Create Net Class",
"description": "Defines a net class with specific routing rules (trace width, clearance, etc.).",
"inputSchema": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Net class name",
"minLength": 1
},
"traceWidth": {
"type": "number",
"description": "Default trace width in millimeters",
"minimum": 0.1
},
"clearance": {
"type": "number",
"description": "Clearance in millimeters",
"minimum": 0.1
},
"viaDiameter": {
"type": "number",
"description": "Via diameter in millimeters"
},
"viaDrill": {
"type": "number",
"description": "Via drill diameter in millimeters"
}
},
"required": ["name", "traceWidth", "clearance"]
}
},
{
"name": "add_copper_pour",
"title": "Add Copper Pour",
"description": "Creates a copper pour/zone (typically for ground or power planes).",
"inputSchema": {
"type": "object",
"properties": {
"netName": {
"type": "string",
"description": "Net to connect this copper pour to (e.g., GND, VCC)"
},
"layer": {
"type": "string",
"description": "Layer for the copper pour (e.g., F.Cu, B.Cu)"
},
"priority": {
"type": "integer",
"description": "Pour priority (higher priorities fill first)",
"minimum": 0,
"default": 0
},
"clearance": {
"type": "number",
"description": "Clearance from other objects in millimeters",
"minimum": 0.1
},
"outline": {
"type": "array",
"description": "Array of [x, y] points defining the pour boundary",
"items": {
"type": "array",
"items": {"type": "number"},
"minItems": 2,
"maxItems": 2
},
"minItems": 3
}
},
"required": ["netName", "layer", "outline"]
}
},
{
"name": "route_differential_pair",
"title": "Route Differential Pair",
"description": "Routes a differential signal pair with matched lengths and spacing.",
"inputSchema": {
"type": "object",
"properties": {
"positiveName": {
"type": "string",
"description": "Positive signal net name"
},
"negativeName": {
"type": "string",
"description": "Negative signal net name"
},
"layer": {
"type": "string",
"description": "Layer to route on"
},
"width": {
"type": "number",
"description": "Trace width in millimeters"
},
"gap": {
"type": "number",
"description": "Gap between traces in millimeters"
},
"points": {
"type": "array",
"description": "Waypoints for the pair routing",
"items": {
"type": "array",
"items": {"type": "number"},
"minItems": 2,
"maxItems": 2
},
"minItems": 2
}
},
"required": ["positiveName", "negativeName", "width", "gap", "points"]
}
}
]
# =============================================================================
# LIBRARY TOOLS
# =============================================================================
LIBRARY_TOOLS = [
{
"name": "list_libraries",
"title": "List Footprint Libraries",
"description": "Lists all available footprint libraries accessible to KiCAD.",
"inputSchema": {
"type": "object",
"properties": {}
}
},
{
"name": "search_footprints",
"title": "Search Footprints",
"description": "Searches for footprints matching a query string across all libraries.",
"inputSchema": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Search query (e.g., '0805', 'SOIC', 'QFP')",
"minLength": 1
},
"library": {
"type": "string",
"description": "Optional library to restrict search to"
}
},
"required": ["query"]
}
},
{
"name": "list_library_footprints",
"title": "List Footprints in Library",
"description": "Lists all footprints available in a specific library.",
"inputSchema": {
"type": "object",
"properties": {
"library": {
"type": "string",
"description": "Library name (e.g., Resistor_SMD, Connector_PinHeader)",
"minLength": 1
}
},
"required": ["library"]
}
},
{
"name": "get_footprint_info",
"title": "Get Footprint Details",
"description": "Retrieves detailed information about a specific footprint including pad layout, dimensions, and description.",
"inputSchema": {
"type": "object",
"properties": {
"library": {
"type": "string",
"description": "Library name"
},
"footprint": {
"type": "string",
"description": "Footprint name"
}
},
"required": ["library", "footprint"]
}
}
]
# =============================================================================
# DESIGN RULE TOOLS
# =============================================================================
DESIGN_RULE_TOOLS = [
{
"name": "set_design_rules",
"title": "Set Design Rules",
"description": "Configures board design rules including clearances, trace widths, and via sizes.",
"inputSchema": {
"type": "object",
"properties": {
"clearance": {
"type": "number",
"description": "Minimum clearance between copper in millimeters",
"minimum": 0.1
},
"trackWidth": {
"type": "number",
"description": "Minimum track width in millimeters",
"minimum": 0.1
},
"viaDiameter": {
"type": "number",
"description": "Minimum via diameter in millimeters"
},
"viaDrill": {
"type": "number",
"description": "Minimum via drill diameter in millimeters"
},
"microViaD iameter": {
"type": "number",
"description": "Minimum micro-via diameter in millimeters"
}
}
}
},
{
"name": "get_design_rules",
"title": "Get Current Design Rules",
"description": "Retrieves the currently configured design rules from the board.",
"inputSchema": {
"type": "object",
"properties": {}
}
},
{
"name": "run_drc",
"title": "Run Design Rule Check",
"description": "Executes a design rule check (DRC) on the current board and reports violations.",
"inputSchema": {
"type": "object",
"properties": {
"includeWarnings": {
"type": "boolean",
"description": "Include warnings in addition to errors",
"default": True
}
}
}
},
{
"name": "get_drc_violations",
"title": "Get DRC Violations",
"description": "Returns a list of design rule violations from the most recent DRC run.",
"inputSchema": {
"type": "object",
"properties": {}
}
}
]
# =============================================================================
# EXPORT TOOLS
# =============================================================================
EXPORT_TOOLS = [
{
"name": "export_gerber",
"title": "Export Gerber Files",
"description": "Generates Gerber files for PCB fabrication (industry standard format).",
"inputSchema": {
"type": "object",
"properties": {
"outputPath": {
"type": "string",
"description": "Directory path for output files"
},
"layers": {
"type": "array",
"description": "List of layers to export (if not provided, exports all copper and mask layers)",
"items": {"type": "string"}
},
"includeDrillFiles": {
"type": "boolean",
"description": "Include drill files (Excellon format)",
"default": True
}
},
"required": ["outputPath"]
}
},
{
"name": "export_pdf",
"title": "Export PDF",
"description": "Exports the board layout as a PDF document for documentation or review.",
"inputSchema": {
"type": "object",
"properties": {
"outputPath": {
"type": "string",
"description": "Path for output PDF file"
},
"layers": {
"type": "array",
"description": "Layers to include in PDF",
"items": {"type": "string"}
},
"colorMode": {
"type": "string",
"enum": ["color", "black_white"],
"description": "Color mode for output",
"default": "color"
}
},
"required": ["outputPath"]
}
},
{
"name": "export_svg",
"title": "Export SVG",
"description": "Exports the board as Scalable Vector Graphics for documentation or web display.",
"inputSchema": {
"type": "object",
"properties": {
"outputPath": {
"type": "string",
"description": "Path for output SVG file"
},
"layers": {
"type": "array",
"description": "Layers to include in SVG",
"items": {"type": "string"}
}
},
"required": ["outputPath"]
}
},
{
"name": "export_3d",
"title": "Export 3D Model",
"description": "Exports a 3D model of the board in STEP or VRML format for mechanical CAD integration.",
"inputSchema": {
"type": "object",
"properties": {
"outputPath": {
"type": "string",
"description": "Path for output 3D file"
},
"format": {
"type": "string",
"enum": ["step", "vrml"],
"description": "3D model format",
"default": "step"
},
"includeComponents": {
"type": "boolean",
"description": "Include 3D component models",
"default": True
}
},
"required": ["outputPath"]
}
},
{
"name": "export_bom",
"title": "Export Bill of Materials",
"description": "Generates a bill of materials (BOM) listing all components with references, values, and footprints.",
"inputSchema": {
"type": "object",
"properties": {
"outputPath": {
"type": "string",
"description": "Path for output BOM file"
},
"format": {
"type": "string",
"enum": ["csv", "xml", "html"],
"description": "BOM output format",
"default": "csv"
},
"groupByValue": {
"type": "boolean",
"description": "Group components with same value together",
"default": True
}
},
"required": ["outputPath"]
}
}
]
# =============================================================================
# SCHEMATIC TOOLS
# =============================================================================
SCHEMATIC_TOOLS = [
{
"name": "create_schematic",
"title": "Create New Schematic",
"description": "Creates a new KiCAD schematic file for circuit design.",
"inputSchema": {
"type": "object",
"properties": {
"filename": {
"type": "string",
"description": "Path for the new schematic file (.kicad_sch)"
},
"title": {
"type": "string",
"description": "Schematic title"
}
},
"required": ["filename"]
}
},
{
"name": "load_schematic",
"title": "Load Existing Schematic",
"description": "Opens an existing KiCAD schematic file for editing.",
"inputSchema": {
"type": "object",
"properties": {
"filename": {
"type": "string",
"description": "Path to schematic file (.kicad_sch)"
}
},
"required": ["filename"]
}
},
{
"name": "add_schematic_component",
"title": "Add Component to Schematic",
"description": "Places a symbol (resistor, capacitor, IC, etc.) on the schematic.",
"inputSchema": {
"type": "object",
"properties": {
"reference": {
"type": "string",
"description": "Reference designator (e.g., R1, C2, U3)"
},
"symbol": {
"type": "string",
"description": "Symbol library:name (e.g., Device:R, Device:C)"
},
"value": {
"type": "string",
"description": "Component value (e.g., 10k, 0.1uF)"
},
"x": {
"type": "number",
"description": "X coordinate on schematic"
},
"y": {
"type": "number",
"description": "Y coordinate on schematic"
}
},
"required": ["reference", "symbol", "x", "y"]
}
},
{
"name": "add_schematic_wire",
"title": "Connect Components",
"description": "Draws a wire connection between component pins on the schematic.",
"inputSchema": {
"type": "object",
"properties": {
"points": {
"type": "array",
"description": "Array of [x, y] waypoints for the wire",
"items": {
"type": "array",
"items": {"type": "number"},
"minItems": 2,
"maxItems": 2
},
"minItems": 2
}
},
"required": ["points"]
}
},
{
"name": "list_schematic_libraries",
"title": "List Symbol Libraries",
"description": "Lists all available symbol libraries for schematic design.",
"inputSchema": {
"type": "object",
"properties": {
"searchPaths": {
"type": "array",
"description": "Optional additional paths to search for libraries",
"items": {"type": "string"}
}
}
}
},
{
"name": "export_schematic_pdf",
"title": "Export Schematic to PDF",
"description": "Exports the schematic as a PDF document for printing or documentation.",
"inputSchema": {
"type": "object",
"properties": {
"schematicPath": {
"type": "string",
"description": "Path to schematic file"
},
"outputPath": {
"type": "string",
"description": "Path for output PDF"
}
},
"required": ["schematicPath", "outputPath"]
}
}
]
# =============================================================================
# UI/PROCESS TOOLS
# =============================================================================
UI_TOOLS = [
{
"name": "check_kicad_ui",
"title": "Check KiCAD UI Status",
"description": "Checks if KiCAD user interface is currently running and returns process information.",
"inputSchema": {
"type": "object",
"properties": {}
}
},
{
"name": "launch_kicad_ui",
"title": "Launch KiCAD Application",
"description": "Opens the KiCAD graphical user interface, optionally with a specific project loaded.",
"inputSchema": {
"type": "object",
"properties": {
"projectPath": {
"type": "string",
"description": "Optional path to project file to open in UI"
},
"autoLaunch": {
"type": "boolean",
"description": "Whether to automatically launch if not running",
"default": True
}
}
}
}
]
# =============================================================================
# COMBINED TOOL SCHEMAS
# =============================================================================
TOOL_SCHEMAS: Dict[str, Any] = {}
# Combine all tool categories
for tool in (PROJECT_TOOLS + BOARD_TOOLS + COMPONENT_TOOLS + ROUTING_TOOLS +
LIBRARY_TOOLS + DESIGN_RULE_TOOLS + EXPORT_TOOLS +
SCHEMATIC_TOOLS + UI_TOOLS):
TOOL_SCHEMAS[tool["name"]] = tool
# Total: 46 tools with comprehensive schemas