Skip to main content
Glama

EasyGerber: AI PCB design, layout, and routing

Edit board

update_board
DestructiveIdempotent

Edits a saved board at expectedRevision; supply at least one of name, intent or boardEdits. Read get_board first. Omitted fields are preserved; schematic edits require the complete replacement thin intent, while boardEdits is a physical patch. Schematic changes can discard an old layout; physical changes can make it stale. Use generate_layout if a current layout is needed afterward. A stale expectedRevision requires a fresh get_board. 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
nameNoDisplay name for the board.
intentNoComplete replacement schematic, including every part and connection to retain. Omit for name-only or physical-only edits.
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.
expectedRevisionYesLatest saved revision from create_board, update_board or get_board. Reuse it if no intervening change is known. A mismatch returns revision_conflict; read the board again before preparing a new operation.

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. Changed8 schema fields changed
    • removedInput schema / properties / boardId
      Removed value: -{
      -  "description": "Saved board ID from list_boards, create_board, claim_guest_board, or an account board URL. Must be accessible to the current account or guest session.",
      -  "format": "uuid",
      -  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      -  "type": "string"
      -}
    • 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 / 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: -[
      -  "boardId",
      -  "expectedRevision",
      -  "requestId"
      -]New value: +[
      +  "expectedRevision",
      +  "requestId",
      +  "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"
      +    }
      +  ]
      +}
    • 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. Changed1 schema field changed
    • 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."
  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. Changed3 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."
      +}
    • changedInput schema / properties / expectedRevision / description
      Previous value: -"Saved revision returned by get_board. A mismatch returns revision_conflict; read the board again before preparing a new operation."New value: +"Latest saved revision from create_board, update_board or get_board. Reuse it if no intervening change is known. A mismatch returns revision_conflict; read the board again before preparing a new operation."
    • removedInput schema / properties / intent / properties / suggestedName
      Removed value: -{
      -  "type": "string"
      -}
  6. Changed6 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 / boardId / description
      Added value: +"Saved board ID from list_boards, create_board, claim_guest_board, or an account board URL. Must be accessible to the current account or guest session."
    • addedInput schema / properties / expectedRevision / description
      Added value: +"Saved revision returned by get_board. A mismatch returns revision_conflict; read the board again before preparing a new operation."
    • addedInput schema / properties / intent / description
      Added value: +"Complete replacement schematic, including every part and connection to retain. Omit for name-only or physical-only edits."
    • addedInput schema / properties / name / description
      Added value: +"Display name for the board."
    • 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?

Goes well past destructiveHint=true by naming what is actually lost: schematic edits can discard an old layout, physical edits can make it stale. It also states that omitted fields are preserved and that a supplied pinCurrentRequirements list replaces prior entries while [] clears them. It stops short of describing the returned result, but an output schema exists, so that is acceptable.

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?

The operative instruction and the sibling routing are front-loaded in the first three sentences, and there is no filler. It loses a point because the long mid-section re-explaining the thin intent tuple layout, connections shape and pins pairs largely restates schema descriptions, pushing it toward a dense wall of text.

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 mutation tool with deep nesting, revision locking and destructive semantics, the description covers ordering against get_board and generate_layout, conflict recovery, validation-failure recovery with the same boardRef, and requestId idempotency. With an output schema present it need not describe return values, so nothing an agent needs 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; the description earns an upgrade by supplying cross-tool provenance the schema cannot express, e.g. 'copy dbId from the catalog result's id' and 'copy padId from the catalog result's pins[].number'. It also clarifies omit-vs-replace semantics for pinCurrentRequirements and that the fourth parts designator may be omitted when it matches id.

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 and resource plus the concurrency contract: 'Edits a saved board at expectedRevision; supply at least one of name, intent or boardEdits.' It also distinguishes the two mutation modes (thin intent = complete replacement schematic, boardEdits = physical patch), which an agent cannot infer from the name alone.

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 prerequisites ('Read get_board first'), explicit routing to a sibling ('Use generate_layout if a current layout is needed afterward'), explicit conflict recovery ('A stale expectedRevision requires a fresh get_board'), and explicit retry protocol (new requestId when input changes, reuse on unchanged retry). This is the when/when-not/alternative pattern in full.

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.