Skip to main content
Glama

EasyGerber: AI PCB design, layout, and routing

Export board files

export_board

Creates a stable private download of a saved board as a manufacturing ZIP or editable .egb project backup. Read get_board for expectedRevision. Use format egb directly for project backups, including empty or incomplete projects and unapplied geometry or electrical changes; no layout generation or check is required. Manufacturing ZIPs require a current saved layout with applied electrical requirements; generate and wait for completion when needed, then read the new revision. Inherited licensing requires changeNote. New exports require current board access. Issued download links have no automatic expiry and retain this exact export after board edits, deletion, guest claim or cleanup. Only explicit download-link revocation or deletion of the exported file ends access. Keep each complete private URL unchanged, including its fragment; anyone with it can download the file.

Input Schema

NameRequiredDescriptionDefault
formatYesmanufacturing: ZIP with Gerber, drill, BOM and placement files. egb: editable EasyGerber board file.
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.
changeNoteNoDescription of modifications, required when get_board returns inherited licensing. Added to the exported license notices.
expectedRevisionYesRevision from get_board. A mismatch returns revision_conflict; read the board again before exporting.

Output Schema

NameRequiredDescriptionDefault
dataYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changed
    • removedInput schema / properties / boardId
      Removed value: -{
      -  "description": "Accessible saved board ID from get_board, create_board, or list_boards.",
      -  "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",
      -  "format"
      -]New value: +[
      +  "expectedRevision",
      +  "format",
      +  "boardRef"
      +]
    • addedOutput schema / properties / data / properties / boardRef
      Added value: +{
      +  "type": "string"
      +}
    • changedOutput schema / properties / data / required
      Previous value: -[
      -  "name",
      -  "mimeType",
      -  "url",
      -  "expiresAt",
      -  "boardRevision"
      -]New value: +[
      +  "name",
      +  "mimeType",
      +  "url",
      +  "expiresAt",
      +  "boardRevision",
      +  "boardRef"
      +]
  2. 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."
  3. Changed4 schema fields changed
    • addedOutput schema / properties / data / properties / expiresAt / anyOf
      Added value: +[
      +  {
      +    "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"
      +  }
      +]
    • removedOutput schema / properties / data / properties / expiresAt / format
      Removed value: -"date-time"
    • removedOutput schema / properties / data / properties / expiresAt / pattern
      Removed value: -"^(?:(?:\\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))$"
    • removedOutput schema / properties / data / properties / expiresAt / type
      Removed value: -"string"
  4. Changed4 schema fields changed
    • addedInput schema / properties / boardId / description
      Added value: +"Accessible saved board ID from get_board, create_board, or list_boards."
    • addedInput schema / properties / changeNote / description
      Added value: +"Description of modifications, required when get_board returns inherited licensing. Added to the exported license notices."
    • addedInput schema / properties / expectedRevision / description
      Added value: +"Revision from get_board. A mismatch returns revision_conflict; read the board again before exporting."
    • addedInput schema / properties / format / description
      Added value: +"manufacturing: ZIP with Gerber, drill, BOM and placement files. egb: editable EasyGerber board file."
  5. First observed

TDQS

A4.9/5.0
Behavior5/5

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

Annotations only mark it as non-read-only, non-idempotent, non-destructive, and closed-world; the description supplies the critical behavior: downloads are private, non-expiring, survive later board edits, deletion, guest claim, or cleanup, and remain accessible to anyone holding the full URL until explicit revocation or file deletion. That is substantial context beyond the annotations and does not contradict them.

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

Conciseness5/5

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

Purpose is front-loaded, then requirements, persistence, and security guidance follow in a logical order. The paragraph is dense, but its length is justified by the amount of access, licensing, and retention behavior an agent must know.

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?

With an output schema present, the description does not need to explain return values, and it covers the preconditions, format-specific requirements, licensing, retention, and URL handling needed to call this complex export tool correctly.

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 field meanings are already documented. The description still adds workflow meaning for format selection, expectedRevision validation via get_board, and changeNote under inherited licensing, though it adds little for boardRef beyond 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 first sentence names a specific verb and resource—creates a stable private download of a saved board—and immediately distinguishes the two export formats. This lets an agent tell export_board apart from get_board, generate_layout, and other siblings without opening the 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?

It explicitly states when to use egb (project backups, including empty or incomplete projects and unapplied changes, with no layout generation or check) versus manufacturing (requires a current saved layout with applied electrical requirements, generating first if needed). It also names get_board as the prerequisite for expectedRevision and changeNote for inherited licensing.

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.