# EasyGerber: AI PCB design, layout, and routing (remote · www.easygerber.com)

AI PCB design, layout, and routing

- Trust score: 67/100 (medium)
- Change this week: −3
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-04

## Components

- remote · `www.easygerber.com`: 67/100 (this document), [markdown](https://verifymcp.io/servers/easygerber-easygerber/api-mcp.md), [page](https://verifymcp.io/servers/easygerber-easygerber/api-mcp)

## Channel facts

- Endpoint: `https://www.easygerber.com/api/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `0.1.1`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-04.

- **Endpoint Security**: 63/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation check failed: no authorisation is required to call this server, and it exposes a tool marked destructive (get_board).
  - HTTPS is enforced; there's no plaintext access path.
  - The HSTS (Strict-Transport-Security) header is present.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 62/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 5255 tokens (~350/item across 15 items; 15 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 19/100
  - Stability check failed: schema churn in the 18 days we've observed: 2 tool removals, 8 breaking changes, 0 auth/transport breaks, 2 additions.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - All 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.
  - An AI judge read all 16 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a current MCP spec version (2026-07-28).

## Install

### How do I install the EasyGerber: AI PCB design, layout, and routing MCP server?

EasyGerber: AI PCB design, layout, and routing is a hosted endpoint at https://www.easygerber.com/api/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http easygerber-easygerber 'https://www.easygerber.com/api/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "easygerber-easygerber": {
      "url": "https://www.easygerber.com/api/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "easygerber-easygerber": {
      "type": "http",
      "url": "https://www.easygerber.com/api/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.easygerber-easygerber]
url = "https://www.easygerber.com/api/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "easygerber-easygerber": {
      "type": "remote",
      "url": "https://www.easygerber.com/api/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add easygerber-easygerber --url 'https://www.easygerber.com/api/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  easygerber-easygerber:
    url: "https://www.easygerber.com/api/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "easygerber-easygerber": {
      "Transport": "http",
      "Url": "https://www.easygerber.com/api/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add easygerber-easygerber -t streamable-http -u 'https://www.easygerber.com/api/mcp'
```

### Other

```json
{
  "mcpServers": {
    "easygerber-easygerber": {
      "type": "http",
      "url": "https://www.easygerber.com/api/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-03 (score 67, −5)

- [security regression] Stability: 0.53 → fail
- [security regression] A breaking change shipped without a version bump: still 0.1.0
- [security regression] Tool “claim_guest_board” was removed
- [security regression] Tool “start_guest_session” was removed
- [security] The server rewrote its instructions, which are the text every model session reads
- [security] Tool “check_board_layout” rewrote its description, which is the text the model reads
- [security] Tool “create_board” rewrote its description, which is the text the model reads
- [security] Tool “export_board” rewrote its description, which is the text the model reads
- [security] Tool “generate_layout” rewrote its description, which is the text the model reads
- [security] Tool “get_board” rewrote its description, which is the text the model reads
- [security] Tool “get_generation” rewrote its description, which is the text the model reads
- [security] Tool “get_part” rewrote its description, which is the text the model reads
- [security] Tool “get_profile” rewrote its description, which is the text the model reads
- [security] Tool “list_boards” rewrote its description, which is the text the model reads
- [security] Tool “search_parts” rewrote its description, which is the text the model reads
- [security] Tool “stop_generation” rewrote its description, which is the text the model reads
- [security] Tool “update_board” rewrote its description, which is the text the model reads
- [security] Tool “get_board” is now declared destructive
- [functional regression] Schema quality: 290 → 350
- [functional regression] “check_board_layout” added a required parameter “boardRef”, so existing callers break
- [functional regression] “create_board” added a required parameter “boardRef”, so existing callers break
- [functional regression] “delete_board” added a required parameter “boardRef”, so existing callers break
- [functional regression] “export_board” added a required parameter “boardRef”, so existing callers break
- [functional regression] “generate_layout” added a required parameter “boardRef”, so existing callers break
- [functional regression] “get_board” added a required parameter “boardRef”, so existing callers break
- [functional regression] “get_generation” added a required parameter “boardRef”, so existing callers break
- [functional regression] “stop_generation” added a required parameter “boardRef”, so existing callers break
- [functional regression] “update_board” added a required parameter “boardRef”, so existing callers break
- [functional regression] “check_board_layout” dropped the required parameter “boardId”
- [functional regression] “delete_board” dropped the required parameter “boardId”
- [functional regression] “export_board” dropped the required parameter “boardId”
- [functional regression] “generate_layout” dropped the required parameter “boardId”
- [functional regression] “get_board” dropped the required parameter “boardId”
- [functional regression] “get_generation” dropped the required parameter “boardId”
- [functional regression] “stop_generation” dropped the required parameter “boardId”
- [functional regression] “update_board” dropped the required parameter “boardId”
- [cosmetic] “get_part” added an optional parameter “boardRef”
- [cosmetic] “list_boards” added an optional parameter “boardRef”
- [cosmetic] “search_parts” added an optional parameter “boardRef”
- [cosmetic] “check_board_layout” dropped the optional parameter “guestToken”
- [cosmetic] “create_board” dropped the optional parameter “guestToken”
- [cosmetic] “export_board” dropped the optional parameter “guestToken”
- [cosmetic] “generate_layout” dropped the optional parameter “guestToken”
- [cosmetic] “get_board” dropped the optional parameter “guestToken”
- [cosmetic] “get_generation” dropped the optional parameter “guestToken”
- [cosmetic] “get_part” dropped the optional parameter “boardId”
- [cosmetic] “get_part” dropped the optional parameter “guestToken”
- [cosmetic] “list_boards” dropped the optional parameter “guestToken”
- [cosmetic] “search_parts” dropped the optional parameter “boardId”
- [cosmetic] “search_parts” dropped the optional parameter “guestToken”
- [cosmetic] “stop_generation” dropped the optional parameter “guestToken”
- [cosmetic] “update_board” dropped the optional parameter “guestToken”
- [cosmetic] “get_generation” made “generationId” optional

### 2026-11-02 (score 72, 0)

- [security] The server rewrote its instructions, which are the text every model session reads
- [security] Tool “check_board_layout” rewrote its description, which is the text the model reads
- [security] Tool “export_board” rewrote its description, which is the text the model reads
- [security] Tool “start_guest_session” rewrote its description, which is the text the model reads

### 2026-11-01 (score 72, +1)

- [security] Tool “create_board” rewrote its description, which is the text the model reads
- [security] Tool “export_board” rewrote its description, which is the text the model reads
- [security] Tool “update_board” rewrote its description, which is the text the model reads
- [cosmetic] “create_board” reworded the description of “boardEdits”
- [cosmetic] “get_part” reworded the description of “factOffset”
- [cosmetic] “get_part” reworded the description of “factQuery”
- [cosmetic] “get_part” reworded the description of “id”
- [cosmetic] “search_parts” reworded the description of “capacitance”
- [cosmetic] “search_parts” reworded the description of “category”
- [cosmetic] “search_parts” reworded the description of “frequency”
- [cosmetic] “search_parts” reworded the description of “inductance”
- [cosmetic] “search_parts” reworded the description of “jlcpcbBasic”
- [cosmetic] “search_parts” reworded the description of “resistance”
- [cosmetic] “search_parts” reworded the description of “subcategory”
- [cosmetic] “search_parts” reworded the description of “voltageRating”
- [cosmetic] “update_board” reworded the description of “boardEdits”

### 2026-10-30 (score 71, +1)

No change was recorded against any check on this day. Stability & Change Management went from 40 to 43. That category is still filling its 30-day observation window: 12 days of observed history at the previous scan, 13 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-28 (score 70, +1)

No change was recorded against any check on this day. Stability & Change Management went from 33 to 37. That category is still filling its 30-day observation window: 10 days of observed history at the previous scan, 11 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-25 (score 69, +1)

No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-24 (score 68, 0)

- [security] The server rewrote its instructions, which are the text every model session reads
- [security] Tool “create_board” rewrote its description, which is the text the model reads
- [security] Tool “generate_layout” rewrote its description, which is the text the model reads
- [security] Tool “get_part” rewrote its description, which is the text the model reads
- [security] Tool “search_parts” rewrote its description, which is the text the model reads
- [security] Tool “start_guest_session” rewrote its description, which is the text the model reads
- [security] Tool “update_board” rewrote its description, which is the text the model reads
- [functional regression] Schema quality: 249 → 275
- [cosmetic] “check_board_layout” reworded the description of “expectedRevision”
- [cosmetic] “delete_board” reworded the description of “expectedRevision”
- [cosmetic] “generate_layout” reworded the description of “expectedRevision”
- [cosmetic] “update_board” reworded the description of “expectedRevision”

### 2026-10-23 (score 68, +1)

No change was recorded against any check on this day. Stability & Change Management went from 17 to 20. That category is still filling its 30-day observation window: 5 days of observed history at the previous scan, 6 at this one. The score rises as the window fills, whether or not the server changes.

## MCP tools (15)

### `submit_feedback` (~281 tokens)

Submit EasyGerber feedback

Sends a bug report, feature request or general feedback to EasyGerber only when the user asks or agrees to report it. Send only the approved message; never automatically attach private board content, raw diagnostics, transcripts or exports. No account, board or guest session is required. A connected account attributes the report to that account; otherwise an optional existing guestToken attributes it to that guest. Reuse requestId with the identical category and message on retries. Returns a submission receipt, without promising a response. Account feedback is limited to 10/hour and 50/day; guest and anonymous feedback share those limits by network.

Input parameters:

- `category` (string, required): bug reports a problem; feature_request proposes a change; general shares other EasyGerber feedback.
- `guestToken` (string): Optional existing guest-session capability for attribution when no account is connected. Omit for anonymous or account feedback; never start a session solely to submit feedback or print this token. I…
- `message` (string, required): User-approved feedback, 10–2000 Unicode characters after trimming. Include only what the user agreed to send; do not automatically include private board content, credentials, transcripts or diagnosti…
- `requestId` (string, required): Unique UUID for this report. Reuse it with the identical category and message after an uncertain result; use a new UUID for a different report.

Output parameters:

- `data` (object)

### `get_profile` (~40 tokens)

Get EasyGerber profile

Returns the connected account identity. Requires account authorization; unauthenticated calls request OAuth. Public catalog browsing and creating a new board do not require probing account identity.

Output parameters:

- `data` (object)

### `list_organizations` (~46 tokens)

List organizations

Returns the connected account’s organizations and membership roles. Requires account authorization. Use the returned organizationId with list_boards or create_board for organization work; omit organizationId for personal boards.

Output parameters:

- `data` (object)

### `search_parts` (~527 tokens)

Search published parts

Searches published catalog components. The first candidate includes verified pins when available; other candidates may omit them. Reuse returned IDs, pins and facts; call get_part only when the selected candidate lacks needed pins or facts. Supplied filters apply together; query ranks matching candidates, while factQuery only selects cached facts for those candidates. An optional boardRef applies that board’s strict Part List restriction, when enabled. Check candidates against the requested component type and specifications. If results are unrelated, make at most two retries for that part using a simpler component name or a relevant category from the input schema. Preserve required specifications and explicit restrictions, including any boardRef Part List restriction, on every retry. If no suitable part is found, report that you could not find a suitable part rather than claiming the catalog lacks it.

Input parameters:

- `boardRef` (string): 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 re…
- `capacitance` (number): Exact farads (1e-7 = 100 nF).
- `category` (string): Catalog category.
- `factQuery` (string): Cached-fact terms only; requires query. Omit for filter-only searches. It never changes which parts match.
- `frequency` (number): Hertz (8e6 = 8 MHz).
- `inductance` (number): Exact henries.
- `jlcpcbBasic` (boolean): Basic-only when true; otherwise leave unset.
- `limit` (integer): Maximum catalog candidates to return, from 1 to 20; defaults to 3.
- `mountingType` (string): smt: surface mount; tht: through-hole; mixed: both.
- `package` (string): Exact catalog label; use query for package families.
- `query` (string): PCB selection terms: MPN, manufacturer, description or package family. For exact MPNs omit unverified categories unless user-required. Preserve explicit filters and Part Lists; factQuery does not sel…
- `resistance` (number): Exact ohms (10000 = 10 kΩ).
- `subcategory` (string): Subcategory, e.g. chip_resistor, mlcc, ldo.
- `voltageRating` (number): Rated volts.

Output parameters:

- `data` (array)

### `get_part` (~221 tokens)

Get part and pins

Returns a published catalog part and verified pins. Skip this call when search_parts already supplied the needed pins and facts. Use the selected catalog result’s id; returned pins[].number is the padId used in board connections. Use search_parts to find alternatives. factQuery and factOffset select or page cached datasheet facts. An optional boardRef applies that board’s strict Part List restriction, when enabled.

Input parameters:

- `boardRef` (string): 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 re…
- `factOffset` (integer): Continue at nextFactOffset with the same factQuery.
- `factQuery` (string): Terms for relevant facts omitted from the supplied bundle.
- `id` (string, required): Catalog ID returned by search_parts.

Output parameters:

- `data` (object)

### `list_boards` (~242 tokens)

List boards

Lists accessible boards with their private boardRef, most recently updated first. A supplied boardRef selects only that board. Account access returns personal boards unless organizationId is specified. Without access, returns guidance, not a claim that an account has no boards. Continue existing work using its original boardRef or owning account. Continue with nextOffset until null, then use get_board for the selected board.

Input parameters:

- `boardRef` (string): 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 re…
- `limit` (integer): Maximum boards to return; defaults to 20.
- `offset` (integer): Zero-based offset; defaults to 0. Continue with returned nextOffset; null means no further page.
- `organizationId` (string): Organization ID from list_organizations. Omit for personal account boards; guest sessions cannot use organizations.

Output parameters:

- `data` (object)

### `get_board` (~262 tokens)

Read board

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 parameters:

- `boardRef` (string, required): 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 re…
- `includePreview` (boolean): Include an image of the current saved layout; omitted or false skips rendering. Returns preview: null when no current layout is available.

Output parameters:

- `data` (object)

### `create_board` (~824 tokens)

Create board

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 ca…

Input parameters:

- `boardEdits` (object): 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 generat…
- `boardRef` (string, required): 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 re…
- `intent` (object, required): Complete initial schematic using published catalog IDs and verified pins. Parts and connections use the thin intent format described by this tool.
- `name` (string, required): Display name for the board.
- `organizationId` (string): Organization ID from list_organizations. Omit for personal account boards; guest sessions cannot use organizations.
- `requestId` (string, required): New UUID for this operation. Reuse it with identical arguments when retrying an uncertain result; use a new UUID for a different operation.

Output parameters:

- `data` (object)

### `update_board` (~716 tokens)

Edit board

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 parameters:

- `boardEdits` (object): 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 generat…
- `boardRef` (string, required): 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 re…
- `expectedRevision` (integer, required): 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 opera…
- `intent` (object): Complete replacement schematic, including every part and connection to retain. Omit for name-only or physical-only edits.
- `name` (string): Display name for the board.
- `requestId` (string, required): New UUID for this operation. Reuse it with identical arguments when retrying an uncertain result; use a new UUID for a different operation.

Output parameters:

- `data` (object)

### `delete_board` (~240 tokens)

Permanently delete an account board

Permanently deletes the specified saved account board when the user requests its removal. Requires explicit boards:delete authorization and personal ownership or organization owner/admin access; guest boards are unsupported. Read get_board first and pass its current revision. Deletion cancels active generation jobs and cannot be undone. A revision conflict requires reading the board again. Missing, already deleted or inaccessible boards return the same not_found error; this does not confirm that an earlier request succeeded. No requestId or replay receipt is supported.

Input parameters:

- `boardRef` (string, required): 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 re…
- `expectedRevision` (integer, required): 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 opera…

Output parameters:

- `data` (object)

### `generate_layout` (~283 tokens)

Generate PCB layout

Starts one durable layout job for boardRef at expectedRevision and returns generation.id and generation.status without waiting. Use the latest revision from create_board, update_board or get_board. Read status with get_generation using the same boardRef; do not regenerate to inspect progress. Successful completion replaces the saved layout. A requestId supports IDENTICAL retries only; changed arguments need a new requestId. revision_conflict requires get_board; board_busy identifies the existing job to poll. Subject to normal compute capacity and board complexity limits, without AI credits.

Input parameters:

- `boardRef` (string, required): 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 re…
- `expectedRevision` (integer, required): 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 opera…
- `requestId` (string, required): New UUID for this operation. Reuse it with identical arguments when retrying an uncertain result; use a new UUID for a different operation.

Output parameters:

- `data` (object)

### `get_generation` (~214 tokens)

Read generation status

Reads stored layout generation status using the same boardRef. Omit generationId to read the active/latest layout job; supply it only to inspect that exact job. Returns generation:null if no layout job exists. While queued or running, wait pollAfterSeconds; stop polling at completed, failed or cancelled. Read get_board for current saved layout and revision after completion. Never call generate_layout to inspect status. Polling does not save private work to an account.

Input parameters:

- `boardRef` (string, required): 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 re…
- `generationId` (string): Layout generation ID returned by generate_layout for this same board. Use the exact job ID when polling or stopping it.

Output parameters:

- `data` (object)

### `stop_generation` (~192 tokens)

Stop generation

Cancels a queued or running layout generation belonging to the specified board; use get_generation when only checking progress. A completed, failed or already cancelled job retains its terminal status. Cancellation cannot be undone; starting again requires a new job. It can update the saved board revision, so read get_board before further edits. A later job is unaffected.

Input parameters:

- `boardRef` (string, required): 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 re…
- `generationId` (string, required): Layout generation ID returned by generate_layout for this same board. Use the exact job ID when polling or stopping it.

Output parameters:

- `data` (object)

### `check_board_layout` (~242 tokens)

Check PCB layout for blocking issues

Checks a saved PCB layout at expectedRevision for manufacturing or layout review. Its geometry and applied electrical requirements must both be current. A missing or stale layout requires generate_layout and completion first; electrical_requirements_not_applied also requires regeneration before checking or manufacturing export. Reuses a current assessment or computes and saves one, which requires write access and normal compute capacity. If the board changes during the check, read get_board again. Returns hasBlockingIssues and actionable blockingIssues; no numeric score or deductions.

Input parameters:

- `boardRef` (string, required): 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 re…
- `expectedRevision` (integer, required): 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 opera…

Output parameters:

- `data` (object)

### `export_board` (~332 tokens)

Export board files

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 parameters:

- `boardRef` (string, required): 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 re…
- `changeNote` (string): Description of modifications, required when get_board returns inherited licensing. Added to the exported license notices.
- `expectedRevision` (integer, required): Revision from get_board. A mismatch returns revision_conflict; read the board again before exporting.
- `format` (string, required): manufacturing: ZIP with Gerber, drill, BOM and placement files. egb: editable EasyGerber board file.

Output parameters:

- `data` (object)

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/easygerber-easygerber/api-mcp#diagnostics

## Score history

- 2026-11-04: 67
- 2026-11-03: 67
- 2026-11-02: 72
- 2026-11-01: 72
- 2026-10-31: 71
- 2026-10-30: 71
- 2026-10-29: 70
- 2026-10-28: 70
- 2026-10-27: 69
- 2026-10-26: 69
- 2026-10-25: 69
- 2026-10-24: 68
- 2026-10-23: 68
- 2026-10-22: 67
- 2026-10-21: 67
- 2026-10-20: 66
- 2026-10-19: 66
- 2026-10-18: 65
- 2026-10-17: 63

## Common questions

### What is the EasyGerber: AI PCB design, layout, and routing MCP server?

EasyGerber: AI PCB design, layout, and routing is an MCP server listed in the public MCP registry as io.github.EasyGerber/easygerber. AI PCB design, layout, and routing. This page covers its hosted endpoint (https://www.easygerber.com/api/mcp).

### Is the EasyGerber: AI PCB design, layout, and routing MCP server safe to use?

EasyGerber: AI PCB design, layout, and routing scores 67 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the EasyGerber: AI PCB design, layout, and routing MCP server expose?

EasyGerber: AI PCB design, layout, and routing exposes 15 tools: submit_feedback, get_profile, list_organizations, search_parts, get_part, and 10 more. Their descriptions and schemas cost roughly 4,662 tokens of context every time the server is loaded.

### Does the EasyGerber: AI PCB design, layout, and routing MCP server require authentication?

No. We connected to EasyGerber: AI PCB design, layout, and routing without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

### Is the EasyGerber: AI PCB design, layout, and routing MCP server still maintained?

EasyGerber: AI PCB design, layout, and routing is still listed as active in the MCP registry. We last reached this channel on 4 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- Remote endpoint: https://www.easygerber.com/api/mcp
- Repository: https://github.com/EasyGerber/easygerber-agent-plugin
- Website: https://www.easygerber.com/agents
- Changelog RSS feed: https://verifymcp.io/servers/easygerber-easygerber/api-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/easygerber-easygerber/api-mcp.json
- HTML version of this page: https://verifymcp.io/servers/easygerber-easygerber/api-mcp
