Skip to main content
Glama

EasyGerber: AI PCB design, layout, and routing

Read board

get_board
DestructiveIdempotent

Reads the current revision, thin schematic, supported settings, physical context, layout freshness and latest layout job from one saved-state snapshot. Use the same boardRef before editing, checking or exporting. A completed older job does not imply a current layout. Use get_generation with boardRef for status, never generate_layout as a status probe. After account connection this read saves private work to the account when permitted; keep the same reference and use the returned revision. includePreview optionally adds a saved-layout image. Account cache misses render and store a private image; guest previews render per request without an image cache. Previewing does not change the board design or revision. Normal compute capacity limits apply.

Input Schema

NameRequiredDescriptionDefault
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.
includePreviewNoInclude an image of the current saved layout; omitted or false skips rendering. Returns preview: null when no current layout is available.

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"
      -]New value: +[
      +  "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. Changed2 schema fields changed
    • 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 / includePreview / description
      Added value: +"Include an image of the current saved layout; omitted or false skips rendering. Returns preview: null when no current layout is available."
  5. First observed

TDQS

A4.6/5.0
Behavior4/5

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

The description adds substantial context beyond the annotations: account-connected reads can save private work, preview images may be cached or rendered per request, previewing does not alter board design or revision, and compute capacity limits apply. However, it does not reconcile the destructiveHint=true annotation with the read/preview framing or explain what destructive effect an agent should anticipate.

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 description is front-loaded with the core read operation and remains dense with operational guidance rather than filler. It is somewhat long and repeats the same-reference instruction, but nearly every sentence contributes useful behavioral or routing information.

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?

Given that an output schema exists and annotations already carry the basic safety profile, the description is complete enough for correct invocation: it covers freshness caveats, sibling-tool routing, preview behavior, caching side effects, and capacity limits. No critical invocation context appears 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 adds useful meaning for includePreview: it adds a saved-layout image, returns preview: null when no current layout exists, and distinguishes account-cache versus guest rendering. It also reinforces boardRef continuity, though most boardRef semantics are already documented in the schema.

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?

The description states a specific verb, 'Reads,' and enumerates the exact resources returned: current revision, thin schematic, supported settings, physical context, layout freshness, and latest layout job from a saved-state snapshot. It also distinguishes this tool from get_generation and generate_layout by naming their proper roles.

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?

It explicitly instructs using the same boardRef before editing, checking, or exporting, and it names the correct alternative for status checks: use get_generation with boardRef, never generate_layout as a status probe. This gives clear when-to-use and when-not-to-use guidance.

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.