Skip to main content
Glama

EasyGerber: AI PCB design, layout, and routing

Create board

create_board
Idempotent

Creates a saved schematic from published catalog parts and verified pins. Supply a fresh private boardRef, name, requestId and intent. To make boardRef, generate 32 random bytes locally, encode as unpadded base64url and prepend egbr1_. The server uses the connected account when available; otherwise it establishes private board access automatically. Keep this SAME boardRef for all later reads, edits, status and export calls. Store it in this conversation or supported private execution state before submitting; do not discard it between isolated calls. Identical retries with the same boardRef, requestId and arguments recover the original creation. Do not use a new reference to recover existing work. Return the complete private board link to this user after creation so later turns can continue it; never log private references or put them in source files. Omit boardEdits unless physical customization is requested; server defaults supply settings, footprints, models and manufacturing limits. Account boards are personal unless organizationId is specified. Use returned revision as expectedRevision when starting layout. Use update_board for existing work. Thin intent format: each parts entry is an array of strings [id, dbId, value], with an optional fourth designator. Choose id as the design-local part ID; copy dbId from the catalog result's id; value is the required value/display label. Omit the fourth designator when it matches id. Each connections entry is {net, class, pins}; class is power, signal, or ground. Each pins entry is [partId, padId]: use the design-local part ID and copy padId from the catalog result's pins[].number, both as strings. Optional pinCurrentRequirements uses those same partId and padId identities with requiredCurrentA in amperes and direction into, out, or bidirectional relative to the net. Omit the list to retain existing values; a supplied list replaces it, and [] clears it. If validation rejects the proposal, preserve the schematic and valid catalog parts, correct the returned detailed issues, and keep the same boardRef. Use a new requestId when input changes; reuse the same requestId and arguments for an unchanged retry. Research again only when an issue needs missing part or pin information.

Input Schema

NameRequiredDescriptionDefault
nameYesDisplay name for the board.
intentYesComplete initial schematic using published catalog IDs and verified pins. Parts and connections use the thin intent format described by this tool.
boardRefYesPrivate board reference. For a new board generate 32 random bytes, encode as unpadded base64url, and prepend egbr1_. Keep this same value for creation retries and every later board operation. Copy returned references unchanged. Keep it in this conversation or supported private execution state; never put it in logs or source files. A private board link may carry it in its fragment.
requestIdYesNew UUID for this operation. Reuse it with identical arguments when retrying an uncertain result; use a new UUID for a different operation.
boardEditsNoPhysical patch; omitted fields retain existing values. settings changes only supplied app-supported settings (dimensions in mm). outline replaces the outline with a library choice or complete generated profile including retained cutouts. fixedPlacements and partClearances use design-local partId; keepouts, mountingHoles, silkscreenTexts, and silkscreenSvgs use item id. Keepout shape coordinates are board-plane mm; part clearance distances are in the part-local frame. Each collection uses upsert to add or merge items and remove to remove only listed IDs, not replace the collection. Removing a fixed placement unpins the part without deleting it. Positions are in board-plane mm; rotationDeg is counterclockwise degrees. Attached DXF and new SVG assets are unavailable through MCP. Existing SVG artwork can be edited or removed by item id; omit assetId.
organizationIdNoOrganization ID from list_organizations. Omit for personal account boards; guest sessions cannot use organizations.

Output Schema

NameRequiredDescriptionDefault
dataYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / properties / data / properties / validation / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "blockingIssues": {
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "id": {
      -              "type": "string"
      -            },
      -            "location": {
      -              "additionalProperties": false,
      -              "properties": {
      -                "x": {
      -                  "type": "number"
      -                },
      -                "y": {
      -                  "type": "number"
      -                }
      -              },
      -              "required": [
      -                "x",
      -                "y"
      -              ],
      -              "type": "object"
      -            },
      -            "message": {
      -              "type": "string"
      -            },
      -            "refs": {
      -              "additionalProperties": false,
      -              "properties": {
      -                "layers": {
      -                  "items": {
      -                    "type": "string"
      -                  },
      -                  "type": "array"
      -                },
      -                "nets": {
      -                  "items": {
      -                    "type": "string"
      -                  },
      -                  "type": "array"
      -                },
      -                "parts": {
      -                  "items": {
      -                    "type": "string"
      -                  },
      -                  "type": "array"
      -                },
      -                "pins": {
      -                  "items": {
      -                    "type": "string"
      -                  },
      -                  "type": "array"
      -                },
      -                "traces": {
      -                  "items": {
      -                    "type": "string"
      -                  },
      -                  "type": "array"
      -                },
      -                "vias": {
      -                  "items": {
      -                    "type": "string"
      -                  },
      -                  "type": "array"
      -                }
      -              },
      -              "type": "object"
      -            }
      -          },
      -          "required": [
      -            "id"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "hasBlockingIssues": {
      -        "type": "boolean"
      -      }
      -    },
      -    "required": [
      -      "hasBlockingIssues",
      -      "blockingIssues"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "blockingIssues": {
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "id": {
      +              "type": "string"
      +            },
      +            "location": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "x": {
      +                  "type": "number"
      +                },
      +                "y": {
      +                  "type": "number"
      +                }
      +              },
      +              "required": [
      +                "x",
      +                "y"
      +              ],
      +              "type": "object"
      +            },
      +            "message": {
      +              "type": "string"
      +            },
      +            "refs": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "keepouts": {
      +                  "items": {
      +                    "type": "string"
      +                  },
      +                  "type": "array"
      +                },
      +                "layers": {
      +                  "items": {
      +                    "type": "string"
      +                  },
      +                  "type": "array"
      +                },
      +                "nets": {
      +                  "items": {
      +                    "type": "string"
      +                  },
      +                  "type": "array"
      +                },
      +                "parts": {
      +                  "items": {
      +                    "type": "string"
      +                  },
      +                  "type": "array"
      +                },
      +                "pins": {
      +                  "items": {
      +                    "type": "string"
      +                  },
      +                  "type": "array"
      +                },
      +                "traces": {
      +                  "items": {
      +                    "type": "string"
      +                  },
      +                  "type": "array"
      +                },
      +                "vias": {
      +                  "items": {
      +                    "type": "string"
      +                  },
      +                  "type": "array"
      +                },
      +                "zones": {
      +                  "items": {
      +                    "type": "string"
      +                  },
      +                  "type": "array"
      +                }
      +              },
      +              "type": "object"
      +            }
      +          },
      +          "required": [
      +            "id"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "hasBlockingIssues": {
      +        "type": "boolean"
      +      }
      +    },
      +    "required": [
      +      "hasBlockingIssues",
      +      "blockingIssues"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  2. Changed9 schema fields changed
    • addedInput schema / properties / boardRef
      Added value: +{
      +  "description": "Private board reference. For a new board generate 32 random bytes, encode as unpadded base64url, and prepend egbr1_. Keep this same value for creation retries and every later board operation. Copy returned references unchanged. Keep it in this conversation or supported private execution state; never put it in logs or source files. A private board link may carry it in its fragment.",
      +  "pattern": "^(?:egbr1_[A-Za-z0-9_-]{42}[AEIMQUYcgkosw048]|egba1_[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\\.[A-Za-z0-9_-]{42}[AEIMQUYcgkosw048])$",
      +  "type": "string"
      +}
    • removedInput schema / properties / guestCreationKey
      Removed value: -{
      -  "description": "Required only for a NEW board without an account or guestToken. Generate 32 random bytes locally and encode as unpadded base64url (43 characters). Retain this private recovery key with requestId and the exact arguments until the result is known; identical retries recover the same board and guest access. Never print, log or save it in a repository. Omit for account or existing guest work.",
      -  "pattern": "^[A-Za-z0-9_-]{42}[AEIMQUYcgkosw048]$",
      -  "type": "string"
      -}
    • removedInput schema / properties / guestToken
      Removed value: -{
      -  "description": "Private continuation capability from create_board.guestAccess.guestToken or start_guest_session. Reuse it for this guest board. Never print it or save it in a repository.",
      -  "maxLength": 200,
      -  "minLength": 32,
      -  "type": "string"
      -}
    • changedInput schema / required
      Previous value: -[
      -  "requestId",
      -  "name",
      -  "intent"
      -]New value: +[
      +  "requestId",
      +  "name",
      +  "intent",
      +  "boardRef"
      +]
    • addedOutput schema / properties / data / properties / boardRef
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / data / properties / generation
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": {
      +        "$ref": "#/$defs/__schema0"
      +      },
      +      "properties": {
      +        "boardId": {
      +          "type": "string"
      +        },
      +        "id": {
      +          "type": "string"
      +        },
      +        "status": {
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "id",
      +        "boardId",
      +        "status"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • removedOutput schema / properties / data / properties / guestAccess
      Removed value: -{
      -  "additionalProperties": false,
      -  "properties": {
      -    "expiresAt": {
      -      "anyOf": [
      -        {
      -          "format": "date-time",
      -          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
      -          "type": "string"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ]
      -    },
      -    "guestToken": {
      -      "type": "string"
      -    },
      -    "limits": {
      -      "additionalProperties": false,
      -      "properties": {
      -        "boards": {
      -          "const": 1,
      -          "type": "number"
      -        }
      -      },
      -      "required": [
      -        "boards"
      -      ],
      -      "type": "object"
      -    }
      -  },
      -  "required": [
      -    "guestToken",
      -    "expiresAt",
      -    "limits"
      -  ],
      -  "type": "object"
      -}
    • addedOutput schema / properties / data / properties / pollAfterSeconds
      Added value: +{
      +  "exclusiveMinimum": 0,
      +  "type": "number"
      +}
    • changedOutput schema / properties / data / required
      Previous value: -[
      -  "id",
      -  "organizationId",
      -  "ownerUserId",
      -  "createdByUserId",
      -  "name",
      -  "revision",
      -  "url",
      -  "intent",
      -  "settings",
      -  "physicalContext",
      -  "layout",
      -  "validation"
      -]New value: +[
      +  "id",
      +  "organizationId",
      +  "ownerUserId",
      +  "createdByUserId",
      +  "name",
      +  "revision",
      +  "url",
      +  "intent",
      +  "settings",
      +  "physicalContext",
      +  "layout",
      +  "validation",
      +  "boardRef"
      +]
  3. Changed3 schema fields changed
    • addedInput schema / properties / guestCreationKey
      Added value: +{
      +  "description": "Required only for a NEW board without an account or guestToken. Generate 32 random bytes locally and encode as unpadded base64url (43 characters). Retain this private recovery key with requestId and the exact arguments until the result is known; identical retries recover the same board and guest access. Never print, log or save it in a repository. Omit for account or existing guest work.",
      +  "pattern": "^[A-Za-z0-9_-]{42}[AEIMQUYcgkosw048]$",
      +  "type": "string"
      +}
    • changedInput schema / properties / guestToken / description
      Previous value: -"Private guest-session capability returned by start_guest_session. Never print it or save it in a repository."New value: +"Private continuation capability from create_board.guestAccess.guestToken or start_guest_session. Reuse it for this guest board. Never print it or save it in a repository."
    • addedOutput schema / properties / data / properties / guestAccess
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "expiresAt": {
      +      "anyOf": [
      +        {
      +          "format": "date-time",
      +          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "guestToken": {
      +      "type": "string"
      +    },
      +    "limits": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "boards": {
      +          "const": 1,
      +          "type": "number"
      +        }
      +      },
      +      "required": [
      +        "boards"
      +      ],
      +      "type": "object"
      +    }
      +  },
      +  "required": [
      +    "guestToken",
      +    "expiresAt",
      +    "limits"
      +  ],
      +  "type": "object"
      +}
  4. Changed5 schema fields changed
    • changedInput schema / properties / boardEdits / description
      Previous value: -"Physical patch; omitted fields retain existing values. settings changes only supplied app-supported settings (dimensions in mm). outline replaces the outline with a library choice or complete generated profile including retained cutouts. fixedPlacements uses design-local partId; mountingHoles, silkscreenTexts, and silkscreenSvgs use item id. Each collection uses upsert to add or merge items and remove to remove only listed IDs, not replace the collection. Removing a fixed placement unpins the part without deleting it. Positions are in board-plane mm; rotationDeg is counterclockwise degrees. Attached DXF and new SVG assets are unavailable through MCP. Existing SVG artwork can be edited or removed by item id; omit assetId."New value: +"Physical patch; omitted fields retain existing values. settings changes only supplied app-supported settings (dimensions in mm). outline replaces the outline with a library choice or complete generated profile including retained cutouts. fixedPlacements and partClearances use design-local partId; keepouts, mountingHoles, silkscreenTexts, and silkscreenSvgs use item id. Keepout shape coordinates are board-plane mm; part clearance distances are in the part-local frame. Each collection uses upsert to add or merge items and remove to remove only listed IDs, not replace the collection. Removing a fixed placement unpins the part without deleting it. Positions are in board-plane mm; rotationDeg is counterclockwise degrees. Attached DXF and new SVG assets are unavailable through MCP. Existing SVG artwork can be edited or removed by item id; omit assetId."
    • addedInput schema / properties / boardEdits / properties / keepouts
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "remove": {
      +      "description": "Remove listed id only.",
      +      "items": {
      +        "$ref": "#/$defs/boardIdentifier"
      +      },
      +      "type": "array"
      +    },
      +    "upsert": {
      +      "description": "Upsert by id; retain omitted fields.",
      +      "items": {
      +        "additionalProperties": false,
      +        "description": "Board-fixed exclusion region. New items require name, x, y, rotationDeg, shape, restrictions, partSide and copperLayers. Nested objects replace complete fields; omission retains existing values.",
      +        "properties": {
      +          "addedAt": {
      +            "maximum": 9007199254740991,
      +            "minimum": 0,
      +            "type": "integer"
      +          },
      +          "copperLayers": {
      +            "description": "Selected physical copper layers; must exist on the board when restricting copper.",
      +            "items": {
      +              "enum": [
      +                "F.Cu",
      +                "In1.Cu",
      +                "In2.Cu",
      +                "B.Cu"
      +              ],
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "id": {
      +            "$ref": "#/$defs/boardIdentifier"
      +          },
      +          "name": {
      +            "minLength": 1,
      +            "pattern": "^[^\\u0000\\ud800-\\udfff]*$",
      +            "type": "string"
      +          },
      +          "partSide": {
      +            "enum": [
      +              "top",
      +              "bottom",
      +              "both"
      +            ],
      +            "type": "string"
      +          },
      +          "restrictions": {
      +            "additionalProperties": false,
      +            "description": "Complete restriction set; at least one must be true.",
      +            "properties": {
      +              "copperFills": {
      +                "type": "boolean"
      +              },
      +              "parts": {
      +                "type": "boolean"
      +              },
      +              "tracks": {
      +                "type": "boolean"
      +              },
      +              "vias": {
      +                "type": "boolean"
      +              }
      +            },
      +            "required": [
      +              "parts",
      +              "tracks",
      +              "vias",
      +              "copperFills"
      +            ],
      +            "type": "object"
      +          },
      +          "rotationDeg": {
      +            "description": "CCW board-plane degrees.",
      +            "type": "number"
      +          },
      +          "shape": {
      +            "description": "Complete replacement shape; omitted retains the current shape.",
      +            "oneOf": [
      +              {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "heightMm": {
      +                    "maximum": 1000,
      +                    "minimum": 0.1,
      +                    "type": "number"
      +                  },
      +                  "kind": {
      +                    "const": "rectangle",
      +                    "type": "string"
      +                  },
      +                  "widthMm": {
      +                    "maximum": 1000,
      +                    "minimum": 0.1,
      +                    "type": "number"
      +                  }
      +                },
      +                "required": [
      +                  "kind",
      +                  "widthMm",
      +                  "heightMm"
      +                ],
      +                "type": "object"
      +              },
      +              {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "diameterMm": {
      +                    "maximum": 1000,
      +                    "minimum": 0.1,
      +                    "type": "number"
      +                  },
      +                  "kind": {
      +                    "const": "circle",
      +                    "type": "string"
      +                  }
      +                },
      +                "required": [
      +                  "kind",
      +                  "diameterMm"
      +                ],
      +                "type": "object"
      +              },
      +              {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "fileName": {
      +                    "minLength": 1,
      +                    "pattern": "^[^\\u0000\\ud800-\\udfff]*$",
      +                    "type": "string"
      +                  },
      +                  "kind": {
      +                    "const": "custom",
      +                    "type": "string"
      +                  },
      +                  "profile": {
      +                    "additionalProperties": false,
      +                    "description": "Complete custom keepout profile in mm; scaled width and height 0.1–1000, ≤2000 total segments.",
      +                    "properties": {
      +                      "cutouts": {
      +                        "description": "Closed voids ([]=none); prefer clockwise. Strictly inside; no touching, overlap or nesting.",
      +                        "items": {
      +                          "$ref": "#/$defs/outlineContour"
      +                        },
      +                        "maxItems": 1999,
      +                        "type": "array"
      +                      },
      +                      "outer": {
      +                        "$ref": "#/$defs/outlineContour",
      +                        "description": "Closed boundary; normalized CCW, lower-left (0,0)."
      +                      }
      +                    },
      +                    "required": [
      +                      "outer",
      +                      "cutouts"
      +                    ],
      +                    "type": "object"
      +                  },
      +                  "scalePercent": {
      +                    "description": "Uniform scale of the original profile; omitted is 100.",
      +                    "exclusiveMinimum": 0,
      +                    "type": "number"
      +                  },
      +                  "sourceBase64": {
      +                    "description": "Existing retained DXF source only; never invent source bytes.",
      +                    "maxLength": 2796204,
      +                    "type": "string"
      +                  }
      +                },
      +                "required": [
      +                  "kind",
      +                  "profile",
      +                  "fileName"
      +                ],
      +                "type": "object"
      +              }
      +            ]
      +          },
      +          "x": {
      +            "type": "number"
      +          },
      +          "y": {
      +            "type": "number"
      +          }
      +        },
      +        "required": [
      +          "id"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / boardEdits / properties / partClearances
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "remove": {
      +      "description": "Remove listed partId only.",
      +      "items": {
      +        "$ref": "#/$defs/boardIdentifier"
      +      },
      +      "type": "array"
      +    },
      +    "upsert": {
      +      "description": "Upsert by partId; retain omitted fields.",
      +      "items": {
      +        "additionalProperties": false,
      +        "description": "Part-attached clearance without pinning the part. New items require clearanceMm, linked, restrictions and copperLayers. Nested objects replace complete fields; omission retains existing values.",
      +        "properties": {
      +          "addedAt": {
      +            "maximum": 9007199254740991,
      +            "minimum": 0,
      +            "type": "integer"
      +          },
      +          "clearanceMm": {
      +            "additionalProperties": false,
      +            "description": "Distances from the catalog body in its local frame; front is +Y before placement rotation or bottom-side reflection.",
      +            "properties": {
      +              "back": {
      +                "maximum": 1000,
      +                "minimum": 0,
      +                "type": "number"
      +              },
      +              "front": {
      +                "maximum": 1000,
      +                "minimum": 0,
      +                "type": "number"
      +              },
      +              "left": {
      +                "maximum": 1000,
      +                "minimum": 0,
      +                "type": "number"
      +              },
      +              "right": {
      +                "maximum": 1000,
      +                "minimum": 0,
      +                "type": "number"
      +              }
      +            },
      +            "required": [
      +              "front",
      +              "back",
      +              "left",
      +              "right"
      +            ],
      +            "type": "object"
      +          },
      +          "copperLayers": {
      +            "description": "Selected physical copper layers; must exist on the board when restricting copper.",
      +            "items": {
      +              "enum": [
      +                "F.Cu",
      +                "In1.Cu",
      +                "In2.Cu",
      +                "B.Cu"
      +              ],
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "enabled": {
      +            "type": "boolean"
      +          },
      +          "linked": {
      +            "description": "Linked sides must have equal clearance distances.",
      +            "type": "boolean"
      +          },
      +          "partId": {
      +            "$ref": "#/$defs/boardIdentifier"
      +          },
      +          "restrictions": {
      +            "additionalProperties": false,
      +            "description": "Complete restriction set; at least one must be true.",
      +            "properties": {
      +              "copperFills": {
      +                "type": "boolean"
      +              },
      +              "parts": {
      +                "type": "boolean"
      +              },
      +              "tracks": {
      +                "type": "boolean"
      +              },
      +              "vias": {
      +                "type": "boolean"
      +              }
      +            },
      +            "required": [
      +              "parts",
      +              "tracks",
      +              "vias",
      +              "copperFills"
      +            ],
      +            "type": "object"
      +          }
      +        },
      +        "required": [
      +          "partId"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "type": "object"
      +}
    • changedInput schema / properties / intent / properties / connections / items / properties / requiredCurrentA / description
      Previous value: -"Continuous A, all pins (mA/1000); omit for class widths."New value: +"Legacy net-wide current; preserve existing values only. Author new current requirements with pinCurrentRequirements."
    • addedInput schema / properties / intent / properties / pinCurrentRequirements
      Added value: +{
      +  "description": "Complete per-pin requirement list. Omit to preserve existing valid requirements; [] clears all. A supplied list replaces all prior entries. Use catalog pad numbers, one entry per partId/padId.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "direction": {
      +        "description": "Conventional current relative to the net copper: into supplies it, out draws from it, bidirectional requires either direction.",
      +        "enum": [
      +          "into",
      +          "out",
      +          "bidirectional"
      +        ],
      +        "type": "string"
      +      },
      +      "padId": {
      +        "$ref": "#/$defs/boardIdentifier"
      +      },
      +      "partId": {
      +        "$ref": "#/$defs/boardIdentifier"
      +      },
      +      "requiredCurrentA": {
      +        "description": "Required continuous current in amperes (mA/1000); zero is allowed.",
      +        "minimum": 0,
      +        "type": "number"
      +      }
      +    },
      +    "required": [
      +      "partId",
      +      "padId"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  5. Changed2 schema fields changed
    • addedInput schema / properties / boardEdits / properties / settings / properties / copperPourClearanceMm
      Added value: +{
      +  "anyOf": [
      +    {
      +      "exclusiveMinimum": 0,
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Copper pour clearance in mm to foreign copper: 0.10–1.00 for 1oz, 0.20–1.00 for 2oz; default 0.20. Null selects Automatic. Existing values outside this range remain valid when unchanged. Changes require regenerating the board."
      +}
    • removedInput schema / properties / intent / properties / suggestedName
      Removed value: -{
      -  "type": "string"
      -}
  6. Changed5 schema fields changed
    • addedInput schema / properties / boardEdits / description
      Added value: +"Physical patch; omitted fields retain existing values. settings changes only supplied app-supported settings (dimensions in mm). outline replaces the outline with a library choice or complete generated profile including retained cutouts. fixedPlacements uses design-local partId; mountingHoles, silkscreenTexts, and silkscreenSvgs use item id. Each collection uses upsert to add or merge items and remove to remove only listed IDs, not replace the collection. Removing a fixed placement unpins the part without deleting it. Positions are in board-plane mm; rotationDeg is counterclockwise degrees. Attached DXF and new SVG assets are unavailable through MCP. Existing SVG artwork can be edited or removed by item id; omit assetId."
    • addedInput schema / properties / intent / description
      Added value: +"Complete initial schematic using published catalog IDs and verified pins. Parts and connections use the thin intent format described by this tool."
    • addedInput schema / properties / name / description
      Added value: +"Display name for the board."
    • addedInput schema / properties / organizationId / description
      Added value: +"Organization ID from list_organizations. Omit for personal account boards; guest sessions cannot use organizations."
    • addedInput schema / properties / requestId / description
      Added value: +"New UUID for this operation. Reuse it with identical arguments when retrying an uncertain result; use a new UUID for a different operation."
  7. First observed

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=true and destructiveHint=false, but the description adds real context beyond them: the server uses the connected account or auto-establishes private board access, identical retries with the same boardRef/requestId recover the original creation, and rejected proposals must preserve the schematic while issues are corrected. It never contradicts idempotentHint. It stops short of describing the returned payload's shape, relying on the output schema for that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and the critical boardRef constraint before any detail, and nearly every sentence carries actionable instruction. It is a dense unbroken block, though, and boardRef handling is restated in both the description and the schema, so a small amount of redundancy could be trimmed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a six-parameter tool with deeply nested objects, the description covers creation, reference lifecycle, idempotent retry, validation-failure recovery, and hand-off to later calls (using the returned revision as expectedRevision). Return values are delegated to the output schema, which is appropriate, so nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description contributes meaning the schema cannot: how to mint boardRef (32 random bytes, unpadded base64url, egbr1_ prefix) and the thin intent tuple semantics ([id, dbId, value], dbId copied from catalog result id, padId from pins[].number). It also explains replace-vs-omit behavior for pinCurrentRequirements, which is workflow knowledge rather than schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb plus resource: "Creates a saved schematic from published catalog parts and verified pins." It immediately distinguishes itself from the sibling update_board ("Use update_board for existing work"), so an agent can route between creation and modification without inspecting either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use (new schematic from catalog parts), when-not (existing work → update_board), and when to omit boardEdits (unless physical customization is requested). It also defines retry policy: reuse the same requestId and arguments for an unchanged retry, new requestId when input changes, and never a new boardRef to recover existing work.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.