AI PCB design, layout, and routing
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Checks a current saved PCB layout at expectedRevision before export or review. A missing or stale layout requires generate_layout first. 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. Guest access uses guestToken and excludes organization access.
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.
Saved revision returned by get_board. A mismatch returns revision_conflict; read the board again before preparing a new operation.
Private guest-session capability returned by start_guest_session. Never print it or save it in a repository.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Checks a current saved PCB layout at expectedRevision before export or review. A missing or stale layout requires generate_layout first. 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. Guest access uses guestToken and excludes organization access.
| Argument | Type | Description |
|---|---|---|
| boardId* | string | 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. |
| guestToken | string | Private guest-session capability returned by start_guest_session. Never print it or save it in a repository. |
| expectedRevision* | integer | Saved revision returned by get_board. A mismatch returns revision_conflict; read the board again before preparing a new operation. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"boardId",
"expectedRevision"
],
"properties": {
"boardId": {
"type": "string",
"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)$",
"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."
},
"guestToken": {
"type": "string",
"maxLength": 200,
"minLength": 32,
"description": "Private guest-session capability returned by start_guest_session. Never print it or save it in a repository."
},
"expectedRevision": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Saved revision returned by get_board. A mismatch returns revision_conflict; read the board again before preparing a new operation.",
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}Transfers an existing guest board to the connected account using its original guestToken. An empty guest session has nothing to transfer; continue with the connected account without guestToken. Requires account authorization and an idle board. The transfer preserves the design, returns a new account board ID and retires guest access. Within 24 hours, repeating a successful claim with the same token and account returns the existing account board ID while that board remains owned by the account and available.
| Argument | Type | Description |
|---|---|---|
| guestToken* | string | Private guest-session capability returned by start_guest_session. Never print it or save it in a repository. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"guestToken"
],
"properties": {
"guestToken": {
"type": "string",
"maxLength": 200,
"minLength": 32,
"description": "Private guest-session capability returned by start_guest_session. Never print it or save it in a repository."
}
},
"additionalProperties": false
}Creates a new saved schematic from published catalog parts, verified pins and supported physical settings. Account boards are personal unless organizationId is specified; a guest session supports one board. Use update_board for an existing board and generate_layout after creation to produce its PCB layout. A unique requestId identifies the operation and supports identical retries. Server hydration supplies footprints, models and manufacturing limits. Thin intent format: each parts entry is an array of strings [id, dbId, value], with an optional fourth designator. id is the design-local part ID; dbId is the published catalog ID; value is the required value/display label. The optional designator overrides the printed id label. Each connections entry is an object {net, class, pins}; class is power, signal, or ground, and each pins entry is [partId, padId], using the design-local part ID and verified catalog pad ID as strings. Guest access uses guestToken and excludes organization access.
| Argument | Type | Description |
|---|---|---|
| name* | string | Display name for the board. |
| intent* | object | Complete initial schematic using published catalog IDs and verified pins. Parts and connections use the thin intent format described by this tool. |
| requestId* | string | New UUID for this operation. Reuse it with identical arguments when retrying an uncertain result; use a new UUID for a different operation. |
| 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 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. |
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.
| Argument | Type | Description |
|---|---|---|
| boardId* | string | Saved account board ID from list_boards or get_board. Deletion requires personal ownership or organization owner/admin access. |
| expectedRevision* | integer | Saved revision returned by get_board. A mismatch returns revision_conflict; read the board again before preparing a new operation. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"boardId",
"expectedRevision"
],
"properties": {
"boardId": {
"type": "string",
"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)$",
"description": "Saved account board ID from list_boards or get_board. Deletion requires personal ownership or organization owner/admin access."
},
"expectedRevision": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Saved revision returned by get_board. A mismatch returns revision_conflict; read the board again before preparing a new operation.",
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}Creates a private download of a fresh saved layout as a manufacturing ZIP or editable .egb file. Read get_board for expectedRevision; a missing or stale layout requires generate_layout and completion first. Inherited licensing requires changeNote. Each call creates a download artifact; links expire in 15 minutes. Guest access uses guestToken and excludes organization access.
| Argument | Type | Description |
|---|---|---|
| format* | string | manufacturing: ZIP with Gerber, drill, BOM and placement files. egb: editable EasyGerber board file. |
| boardId* | string | Accessible saved board ID from get_board, create_board, or list_boards. |
| changeNote | string | Description of modifications, required when get_board returns inherited licensing. Added to the exported license notices. |
| guestToken | string | Private guest-session capability returned by start_guest_session. Never print it or save it in a repository. |
| expectedRevision* | integer | Revision from get_board. A mismatch returns revision_conflict; read the board again before exporting. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"boardId",
"expectedRevision",
"format"
],
"properties": {
"format": {
"enum": [
"manufacturing",
"egb"
],
"type": "string",
"description": "manufacturing: ZIP with Gerber, drill, BOM and placement files. egb: editable EasyGerber board file."
},
"boardId": {
"type": "string",
"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)$",
"description": "Accessible saved board ID from get_board, create_board, or list_boards."
},
"changeNote": {
"type": "string",
"maxLength": 1000,
"minLength": 1,
"description": "Description of modifications, required when get_board returns inherited licensing. Added to the exported license notices."
},
"guestToken": {
"type": "string",
"maxLength": 200,
"minLength": 32,
"description": "Private guest-session capability returned by start_guest_session. Never print it or save it in a repository."
},
"expectedRevision": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Revision from get_board. A mismatch returns revision_conflict; read the board again before exporting.",
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}Starts a durable layout job for a saved board at expectedRevision and returns without waiting for completion. Use after creating or editing a schematic; poll its exact generation ID with get_generation. Successful completion replaces the saved layout. A unique requestId supports identical retries. revision_conflict requires a fresh get_board; board_busy identifies an already active job to poll. Subject to normal compute capacity and board complexity limits, without AI credits. Guest access uses guestToken and excludes organization access.
| Argument | Type | Description |
|---|---|---|
| boardId* | string | 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. |
| requestId* | string | New UUID for this operation. Reuse it with identical arguments when retrying an uncertain result; use a new UUID for a different operation. |
| guestToken | string | Private guest-session capability returned by start_guest_session. Never print it or save it in a repository. |
| expectedRevision* | integer | Saved revision returned by get_board. A mismatch returns revision_conflict; read the board again before preparing a new operation. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"boardId",
"expectedRevision",
"requestId"
],
"properties": {
"boardId": {
"type": "string",
"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)$",
"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."
},
"requestId": {
"type": "string",
"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)$",
"description": "New UUID for this operation. Reuse it with identical arguments when retrying an uncertain result; use a new UUID for a different operation."
},
"guestToken": {
"type": "string",
"maxLength": 200,
"minLength": 32,
"description": "Private guest-session capability returned by start_guest_session. Never print it or save it in a repository."
},
"expectedRevision": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Saved revision returned by get_board. A mismatch returns revision_conflict; read the board again before preparing a new operation.",
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}Reads the current revision, thin schematic, supported settings, physical context and layout freshness before editing, checking or exporting. Use get_generation to poll an active job and check_board_layout to refresh validation. 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. Guest access uses guestToken and excludes organization access.
| Argument | Type | Description |
|---|---|---|
| boardId* | string | 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. |
| guestToken | string | Private guest-session capability returned by start_guest_session. Never print it or save it in a repository. |
| includePreview | boolean | Include an image of the current saved layout; omitted or false skips rendering. Returns preview: null when no current layout is available. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"boardId"
],
"properties": {
"boardId": {
"type": "string",
"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)$",
"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."
},
"guestToken": {
"type": "string",
"maxLength": 200,
"minLength": 32,
"description": "Private guest-session capability returned by start_guest_session. Never print it or save it in a repository."
},
"includePreview": {
"type": "boolean",
"description": "Include an image of the current saved layout; omitted or false skips rendering. Returns preview: null when no current layout is available."
}
},
"additionalProperties": false
}Polls the exact layout generation ID returned by generate_layout for the same board. While queued or running, wait pollAfterSeconds before polling again. Stop polling at completed, failed or cancelled; read get_board after completion before editing, checking or exporting. Use stop_generation to cancel rather than starting a replacement job. Guest access uses guestToken and excludes organization access.
| Argument | Type | Description |
|---|---|---|
| boardId* | string | 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. |
| guestToken | string | Private guest-session capability returned by start_guest_session. Never print it or save it in a repository. |
| generationId* | string | Layout generation ID returned by generate_layout for this same board. Use the exact job ID when polling or stopping it. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"boardId",
"generationId"
],
"properties": {
"boardId": {
"type": "string",
"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)$",
"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."
},
"guestToken": {
"type": "string",
"maxLength": 200,
"minLength": 32,
"description": "Private guest-session capability returned by start_guest_session. Never print it or save it in a repository."
},
"generationId": {
"type": "string",
"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)$",
"description": "Layout generation ID returned by generate_layout for this same board. Use the exact job ID when polling or stopping it."
}
},
"additionalProperties": false
}Returns a published catalog part, its catalog ID and verified pad IDs. Use a catalog ID from search_parts when needed pins or facts are missing; use search_parts to find alternatives. factQuery and factOffset select or page cached datasheet facts. An optional boardId applies that board’s strict Part List restriction, when enabled. Guest access uses guestToken and excludes organization access.
| Argument | Type | Description |
|---|---|---|
| id* | string | Exact published catalog ID returned by search_parts. |
| boardId | string | Optional saved board ID. Enforces that board’s strict Part List when enabled; omit to use the full published catalog. |
| factQuery | string | Terms selecting relevant cached datasheet facts for this part; omit for the default fact bundle. |
| factOffset | integer | Zero-based fact offset; defaults to 0. Continue with datasheetFacts.nextFactOffset and the same factQuery. |
| guestToken | string | Private guest-session capability returned by start_guest_session. Never print it or save it in a repository. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Exact published catalog ID returned by search_parts."
},
"boardId": {
"type": "string",
"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)$",
"description": "Optional saved board ID. Enforces that board’s strict Part List when enabled; omit to use the full published catalog."
},
"factQuery": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Terms selecting relevant cached datasheet facts for this part; omit for the default fact bundle."
},
"factOffset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Zero-based fact offset; defaults to 0. Continue with datasheetFacts.nextFactOffset and the same factQuery."
},
"guestToken": {
"type": "string",
"maxLength": 200,
"minLength": 32,
"description": "Private guest-session capability returned by start_guest_session. Never print it or save it in a repository."
}
},
"additionalProperties": false
}Returns the connected account identity. Requires account authorization; unauthenticated calls request OAuth. For a new guest board, use start_guest_session instead of probing account identity.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {},
"additionalProperties": false
}Lists accessible boards, most recently updated first. Account access returns personal boards unless organizationId is specified; guest access returns that session’s board. Continue with nextOffset until null, then use get_board for a selected board’s editable state. Guest access uses guestToken and excludes organization access.
| Argument | Type | Description |
|---|---|---|
| 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. |
| guestToken | string | Private guest-session capability returned by start_guest_session. Never print it or save it in a repository. |
| organizationId | string | Organization ID from list_organizations. Omit for personal account boards; guest sessions cannot use organizations. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Maximum boards to return; defaults to 20."
},
"offset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Zero-based offset; defaults to 0. Continue with returned nextOffset; null means no further page."
},
"guestToken": {
"type": "string",
"maxLength": 200,
"minLength": 32,
"description": "Private guest-session capability returned by start_guest_session. Never print it or save it in a repository."
},
"organizationId": {
"type": "string",
"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)$",
"description": "Organization ID from list_organizations. Omit for personal account boards; guest sessions cannot use organizations."
}
},
"additionalProperties": false
}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.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {},
"additionalProperties": false
}Searches published catalog components to find IDs for board authoring or get_part. Supplied filters apply together; query ranks matching candidates, while factQuery only selects cached facts for those candidates. An optional boardId 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 boardId 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. Guest access uses guestToken and excludes organization access.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum catalog candidates to return, from 1 to 20; defaults to 3. |
| 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 select parts. Required when factQuery is supplied. |
| boardId | string | Optional saved board ID. Enforces that board’s strict Part List when enabled; omit to use the full published catalog. |
| package | string | Exact catalog label; use query for package families. |
| category | string | Exact catalog category; omit when unknown. |
Creates a private session for one board without an account; use its guestToken with create_board to create the board. Reuse this task’s existing guest session or authorized account when available. Use claim_guest_board to save an existing guest board after sign-in. Returns guestToken, viewerUrl, limits and expiresAt; a null expiresAt means no scheduled expiration. Edits, layouts, checks, previews and both export formats have no lifetime count limits. Normal request-rate, compute-capacity and board-complexity limits apply. Starting a new session does not recover an earlier session.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {},
"additionalProperties": false
}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. Guest access uses guestToken and excludes organization access.
| Argument | Type | Description |
|---|---|---|
| boardId* | string | 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. |
| guestToken | string | Private guest-session capability returned by start_guest_session. Never print it or save it in a repository. |
| generationId* | string | Layout generation ID returned by generate_layout for this same board. Use the exact job ID when polling or stopping it. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"boardId",
"generationId"
],
"properties": {
"boardId": {
"type": "string",
"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)$",
"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."
},
"guestToken": {
"type": "string",
"maxLength": 200,
"minLength": 32,
"description": "Private guest-session capability returned by start_guest_session. Never print it or save it in a repository."
},
"generationId": {
"type": "string",
"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)$",
"description": "Layout generation ID returned by generate_layout for this same board. Use the exact job ID when polling or stopping it."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| message* | string | 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 diagnostics. |
| category* | string | bug reports a problem; feature_request proposes a change; general shares other EasyGerber feedback. |
| requestId* | string | 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. |
| 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. Invalid tokens are rejected. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"category",
"message",
"requestId"
],
"properties": {
"message": {
"type": "string",
"maxLength": 2000,
"minLength": 10,
"description": "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 diagnostics."
},
"category": {
"enum": [
"bug",
"feature_request",
"general"
],
"type": "string",
"description": "bug reports a problem; feature_request proposes a change; general shares other EasyGerber feedback."
},
"requestId": {
"type": "string",
"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)$",
"description": "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."
},
"guestToken": {
"type": "string",
"maxLength": 200,
"minLength": 32,
"description": "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. Invalid tokens are rejected."
}
},
"additionalProperties": false
}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 unique requestId supports identical retries. A stale expectedRevision causes a revision conflict. Thin intent format: each parts entry is an array of strings [id, dbId, value], with an optional fourth designator. id is the design-local part ID; dbId is the published catalog ID; value is the required value/display label. The optional designator overrides the printed id label. Each connections entry is an object {net, class, pins}; class is power, signal, or ground, and each pins entry is [partId, padId], using the design-local part ID and verified catalog pad ID as strings. Guest access uses guestToken and excludes organization access.
| Argument | Type | Description |
|---|---|---|
| name | string | Display name for the board. |
| intent | object | Complete replacement schematic, including every part and connection to retain. Omit for name-only or physical-only edits. |
| boardId* | string | 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. |
| requestId* | string | New UUID for this operation. Reuse it with identical arguments when retrying an uncertain result; use a new UUID for a different operation. |
| guestToken | string | Private guest-session capability returned by start_guest_session. Never print it or save it in a repository. |
| organizationId | string | Organization ID from list_organizations. Omit for personal account boards; guest sessions cannot use organizations. |
{
"type": "object",
"$defs": {
"outlinePoint": {
"type": "object",
"required": [
"x",
"y"
],
"properties": {
"x": {
"type": "number",
"description": "mm; right positive."
},
"y": {
"type": "number",
"description": "mm; up positive."
}
},
"additionalProperties": false
},
"outlineContour": {
"type": "object",
"required": [
"start",
"segments"
],
"properties": {
"start": {
"$ref": "#/$defs/outlinePoint",
"description": "Close final segment here."
},
"segments": {
"type": "array",
"items": {
"oneOf": [
{
"type": "object",
"required": [
"kind",
"end"
],
"properties": {
"end": {
"$ref": "#/$defs/outlinePoint",
"description": "End from prior endpoint/start."
},
"kind": {
"type": "string",
"const": "line"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"end",
"center",
"clockwise"
],
"properties": {
"end": {
"$ref": "#/$defs/outlinePoint",
"description": "Arc end; unequal to prior end/start."
},
"kind": {
"type": "string",
"const": "arc"
},
"center": {
"$ref": "#/$defs/outlinePoint",
"description": "Board-frame center, equidistant from arc endpoints."
},
"clockwise": {
"type": "boolean",
"description": "True=clockwise, false=CCW; full circles need ≥2 arcs."
}
},
"additionalProperties": false
}
]
},
"maxItems": 2000,
"minItems": 1,
"description": "Connected lines/arcs; close explicitly; no zero lengths or crossings."
}
},
"additionalProperties": false
},
"boardIdentifier": {
"type": "string",
"pattern": "^[^\\u0000-\\u001f\\u007f\\ud800-\\udfff]*$",
"maxLength": 200,
"minLength": 1
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"requestId",
"name",
"intent"
],
"properties": {
"name": {
"type": "string",
"pattern": "^[^\\u0000\\ud800-\\udfff]*$",
"maxLength": 60,
"minLength": 1,
"description": "Display name for the board."
},
"intent": {
"type": "object",
"required": [
"parts",
"connections"
],
"properties": {
"parts": {
"type": "array",
"items": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[^\\u0000\\ud800-\\udfff]*$"
},
"maxItems": 4,
"minItems": 3,
"description": "[id,dbId,value] strings; fourth designator if unlike id."
}
},
"connections": {
"type": "array",
"items": {
"type": "object",
"required": [
"net",
"class",
"pins"
],
"properties": {
"net": {
"$ref": "#/$defs/boardIdentifier"
},
"pins": {
"type": "array",
"items": {
"type": "array",
"items": {
"$ref": "#/$defs/boardIdentifier"
},
"maxItems": 2,
"minItems": 2,
"description": "[partId,padId] strings: local part ID, catalog pad number."
}
},
"class": {
"enum": [
"power",
"signal",
"ground"
],
"type": "string"
},
"requiredCurrentA": {
"type": "number",
"description": "Continuous A, all pins (mA/1000); omit for class widths.",
"exclusiveMinimum": 0
},
"maxTemperatureRiseC": {
"type": "number",
"description": "Legacy: unchanged current requirements only; else omit. Regenerated layouts use 10°C above ambient.",
"exclusiveMinimum": 0
},
"targetImpedanceOhms": {
"type": "number",
"description": "Single-ended ohms; no default. Honor device requirements. Pair targets go on differentialPairs.",
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}
},
"suggestedName": {
"type": "string"
},
"differentialPairs": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"positiveNet",
"negativeNet",
"profile"
],
"properties": {
"id": {
"$ref": "#/$defs/boardIdentifier"
},
"profile": {
"enum": [
"generic",
"usb2-full-speed",
"usb2-high-speed",
"lvds",
"custom"
],
"type": "string"
},
"negativeNet": {
"$ref": "#/$defs/boardIdentifier"
},
"positiveNet": {
"$ref": "#/$defs/boardIdentifier"
},
"minCoupledRatio": {
"type": "number",
"maximum": 1,
"minimum": 0
},
"targetSpacingMm": {
"type": "number",
"minimum": 0
},
"maxViaCountDelta": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
},
"spacingToleranceMm": {
"type": "number",
"minimum": 0
},
"maxLengthMismatchMm": {
"type": "number",
"minimum": 0
},
"targetImpedanceOhms": {
"type": "number",
"description": "Differential ohms; honor device requirements. Defaults: USB full/high-speed 90, LVDS 100, generic/custom none.",
"exclusiveMinimum": 0
},
"maxLayerLengthMismatchMm": {
"type": "number",
"minimum": 0
}
},
"additionalProperties": false
}
}
},
"description": "Complete initial schematic using published catalog IDs and verified pins. Parts and connections use the thin intent format described by this tool.",
"additionalProperties": false
},
"requestId": {
"type": "string",
"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)$",
"description": "New UUID for this operation. Reuse it with identical arguments when retrying an uncertain result; use a new UUID for a different operation."
},
"boardEdits": {
"type": "object",
"properties": {
"outline": {
"oneOf": [
{
"type": "object",
"required": [
"kind",
"id"
],
"properties": {
"id": {
"$ref": "#/$defs/boardIdentifier"
},
"kind": {
"type": "string",
"const": "library"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"assetId"
],
"properties": {
"kind": {
"type": "string",
"const": "dxf"
},
"unit": {
"enum": [
"mm",
"in",
"mil"
],
"type": "string"
},
"layer": {
"$ref": "#/$defs/boardIdentifier"
},
"assetId": {
"$ref": "#/$defs/boardIdentifier"
},
"repairSmallGaps": {
"type": "boolean"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"profile"
],
"properties": {
"kind": {
"type": "string",
"const": "generated"
},
"profile": {
"type": "object",
"required": [
"outer",
"cutouts"
],
"properties": {
"outer": {
"$ref": "#/$defs/outlineContour",
"description": "Closed boundary; normalized CCW, lower-left (0,0)."
},
"cutouts": {
"type": "array",
"items": {
"$ref": "#/$defs/outlineContour"
},
"maxItems": 1999,
"description": "Closed voids ([]=none); prefer clockwise. Strictly inside; no touching, overlap or nesting."
}
},
"description": "Complete mm profile, retained cutouts; width 5–400, height 5–500; ≤2000 total segments. Omit width/height/diameter. Normalized origin/winding, 0.000001 mm precision.",
"additionalProperties": false
}
},
"additionalProperties": false
}
]
},
"settings": {
"type": "object",
"properties": {
"width": {
"anyOf": [
{
"type": "number",
"exclusiveMinimum": 0
},
{
"type": "string",
"const": "auto"
}
]
},
"height": {
"anyOf": [
{
"type": "number",
"exclusiveMinimum": 0
},
{
"type": "string",
"const": "auto"
}
]
},
"layers": {
"anyOf": [
{
"type": "number",
"const": 1
},
{
"type": "number",
"const": 2
},
{
"type": "number",
"const": 4
},
{
"type": "string",
"const": "auto"
}
]
},
"diameter": {
"anyOf": [
{
"type": "number",
"exclusiveMinimum": 0
},
{
"type": "string",
"const": "auto"
}
]
},
"outlineKind": {
"enum": [
"rectangle",
"circle",
"custom"
],
"type": "string"
},
"thicknessMm": {
"anyOf": [
{
"type": "number",
"const": 0.4
},
{
"type": "number",
"const": 0.6
},
{
"type": "number",
"const": 0.8
},
{
"type": "number",
"const": 1
},
{
"type": "number",
"const": 1.2
},
{
"type": "number",
"const": 1.6
},
{
"type": "number",
"const": 2
}
]
},
"jlcpcbStackup": {
"anyOf": [
{
"enum": [
"JLC04161H-7628",
"JLC04081H-7628",
"JLC041011-7628",
"JLC041211-7628",
"JLC041611-7628",
"JLC04162H-7628"
],
"type": "string"
},
{
"type": "null"
}
]
},
"thermalRelief": {
"type": "boolean",
"description": "Zone-connected solderable pads; default false."
},
"roundedCorners": {
"type": "boolean",
"description": "Round rectangle corners."
},
"edgeClearanceMm": {
"type": "number",
"minimum": 0.2
},
"solderMaskColor": {
"enum": [
"green",
"red",
"yellow",
"blue",
"white",
"black"
],
"type": "string"
},
"allowedPartSides": {
"enum": [
"top",
"bottom",
"both"
],
"type": "string",
"description": "Global policy; omission preserves supplied settings. Fixed placements must use a permitted side. Include any authorized policy change in the same patch; preserve explicit user side restrictions unless the user changes them."
},
"innerCopperWeight": {
"enum": [
"0.5oz",
"1oz",
"2oz"
],
"type": "string"
},
"outerCopperWeight": {
"enum": [
"1oz",
"2oz"
],
"type": "string"
},
"referenceDesignators": {
"type": "boolean"
}
},
"additionalProperties": false
},
"mountingHoles": {
"type": "object",
"properties": {
"remove": {
"type": "array",
"items": {
"$ref": "#/$defs/boardIdentifier"
},
"description": "Remove listed id only."
},
"upsert": {
"type": "array",
"items": {
"type": "object",
"required": [
"id"
],
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
},
"id": {
"$ref": "#/$defs/boardIdentifier"
},
"kind": {
"enum": [
"isolated_npth",
"grounded_pth"
],
"type": "string"
},
"addedAt": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
},
"netName": {
"$ref": "#/$defs/boardIdentifier"
},
"padDiameterMm": {
"type": "number",
"exclusiveMinimum": 0
},
"drillDiameterMm": {
"type": "number",
"maximum": 6.3,
"minimum": 0.15
},
"solderMaskKeepoutMm": {
"type": "number",
"minimum": 0,
"description": "Radial solder-mask expansion in mm."
},
"placementKeepoutDiameterMm": {
"type": "number",
"exclusiveMinimum": 0
}
},
"additionalProperties": false
},
"description": "Upsert by id; retain omitted fields."
}
},
"additionalProperties": false
},
"silkscreenSvgs": {
"type": "object",
"properties": {
"remove": {
"type": "array",
"items": {
"$ref": "#/$defs/boardIdentifier"
},
"description": "Remove listed id only."
},
"upsert": {
"type": "array",
"items": {
"type": "object",
"required": [
"id"
],
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
},
"id": {
"$ref": "#/$defs/boardIdentifier"
},
"layer": {
"enum": [
"top",
"bottom"
],
"type": "string"
},
"assetId": {
"$ref": "#/$defs/boardIdentifier",
"description": "Attached SVG ID; required for new artwork."
},
"widthMm": {
"type": "number",
"minimum": 0.5
},
"heightMm": {
"type": "number",
"minimum": 0.5
},
"rotationDeg": {
"type": "number",
"description": "CCW board-plane degrees."
}
},
"additionalProperties": false
},
"description": "Upsert by id; retain omitted fields."
}
},
"additionalProperties": false
},
"fixedPlacements": {
"type": "object",
"properties": {
"remove": {
"type": "array",
"items": {
"$ref": "#/$defs/boardIdentifier"
},
"description": "Remove listed partId only."
},
"upsert": {
"type": "array",
"items": {
"type": "object",
"required": [
"partId"
],
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
},
"side": {
"enum": [
"top",
"bottom"
],
"type": "string"
},
"partId": {
"$ref": "#/$defs/boardIdentifier"
},
"addedAt": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
},
"position": {
"oneOf": [
{
"type": "object",
"required": [
"kind",
"edge"
],
"properties": {
"edge": {
"enum": [
"left",
"right",
"top",
"bottom"
],
"type": "string"
},
"kind": {
"type": "string",
"const": "edge"
},
"insetMm": {
"type": "number",
"minimum": 0
},
"fraction": {
"type": "number",
"maximum": 1,
"minimum": 0,
"description": "Default 0.5; left/right: bottom→top; top/bottom: left→right."
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"fraction"
],
"properties": {
"kind": {
"type": "string",
"const": "perimeter"
},
"insetMm": {
"type": "number",
"minimum": 0
},
"fraction": {
"type": "number",
"maximum": 1,
"minimum": 0,
"description": "Outer-contour CCW arclength; 1=0. Start: rectangle (cornerRadius,0), circle bottom, custom profile.outer.start."
},
"alignment": {
"enum": [
"tangent",
"inward"
],
"type": "string",
"description": "X-axis: CCW tangent/inward normal; vertex bisector. Board-frame on both sides; no polarity/direction inference. Omit to retain rotation; excludes rotationDeg."
},
"rotationOffsetDeg": {
"type": "number",
"description": "CCW degrees added to required alignment; default 0."
}
},
"additionalProperties": false
}
]
},
"rotationDeg": {
"type": "number",
"description": "CCW board-plane degrees."
}
},
"description": "New unplaced parts require x and y or a relative position. Omitted coordinates inherit a saved fixed or realized pose; side/rotation alone require that pose.",
"additionalProperties": false
},
"description": "Upsert by partId; retain omitted fields."
}
},
"additionalProperties": false
},
"silkscreenTexts": {
"type": "object",
"properties": {
"remove": {
"type": "array",
"items": {
"$ref": "#/$defs/boardIdentifier"
},
"description": "Remove listed id only."
},
"upsert": {
"type": "array",
"items": {
"type": "object",
"required": [
"id"
],
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
},
"id": {
"$ref": "#/$defs/boardIdentifier"
},
"font": {
"type": "string",
"const": "RobotoMono-Medium"
},
"text": {
"type": "string",
"pattern": "^[^\\u0000\\ud800-\\udfff]*$"
},
"layer": {
"enum": [
"top",
"bottom"
],
"type": "string"
},
"addedAt": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
},
"heightMm": {
"type": "number",
"maximum": 20,
"minimum": 0.5
},
"rotationDeg": {
"type": "number",
"description": "CCW board-plane degrees."
}
},
"additionalProperties": false
},
"description": "Upsert by id; retain omitted fields."
}
},
"additionalProperties": false
}
},
"description": "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.",
"additionalProperties": false
},
"guestToken": {
"type": "string",
"maxLength": 200,
"minLength": 32,
"description": "Private guest-session capability returned by start_guest_session. Never print it or save it in a repository."
},
"organizationId": {
"type": "string",
"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)$",
"description": "Organization ID from list_organizations. Omit for personal account boards; guest sessions cannot use organizations."
}
},
"additionalProperties": false
}| factQuery | string | Cached-fact terms only; requires query. Omit for filter-only searches. It never changes which parts match. |
| frequency | number | Exact frequency in hertz (8e6 = 8 MHz). |
| guestToken | string | Private guest-session capability returned by start_guest_session. Never print it or save it in a repository. |
| inductance | number | Exact inductance in henries (1e-6 = 1 µH). |
| resistance | number | Exact resistance in ohms (10000 = 10 kΩ). |
| capacitance | number | Exact capacitance in farads (1e-7 = 100 nF). |
| jlcpcbBasic | boolean | Restrict to JLCPCB Basic parts when true; false or omission leaves this filter unset. |
| subcategory | string | Exact catalog subcategory, such as chip_resistor, mlcc, or ldo. |
| mountingType | string | smt: surface mount; tht: through-hole; mixed: both. |
| voltageRating | number | Exact voltage rating in volts. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"default": 3,
"maximum": 20,
"minimum": 1,
"description": "Maximum catalog candidates to return, from 1 to 20; defaults to 3."
},
"query": {
"type": "string",
"maxLength": 2000,
"minLength": 1,
"description": "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 select parts. Required when factQuery is supplied."
},
"boardId": {
"type": "string",
"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)$",
"description": "Optional saved board ID. Enforces that board’s strict Part List when enabled; omit to use the full published catalog."
},
"package": {
"type": "string",
"maxLength": 2000,
"minLength": 1,
"description": "Exact catalog label; use query for package families."
},
"category": {
"enum": [
"resistor",
"capacitor",
"inductor",
"led",
"diode",
"transistor",
"ic",
"microcontroller",
"connector",
"crystal",
"switch",
"fuse",
"regulator",
"sensor",
"relay",
"transformer",
"display",
"module",
"test_point",
"mounting_hole",
"other"
],
"type": "string",
"description": "Exact catalog category; omit when unknown."
},
"factQuery": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Cached-fact terms only; requires query. Omit for filter-only searches. It never changes which parts match."
},
"frequency": {
"type": "number",
"minimum": 0,
"description": "Exact frequency in hertz (8e6 = 8 MHz)."
},
"guestToken": {
"type": "string",
"maxLength": 200,
"minLength": 32,
"description": "Private guest-session capability returned by start_guest_session. Never print it or save it in a repository."
},
"inductance": {
"type": "number",
"minimum": 0,
"description": "Exact inductance in henries (1e-6 = 1 µH)."
},
"resistance": {
"type": "number",
"minimum": 0,
"description": "Exact resistance in ohms (10000 = 10 kΩ)."
},
"capacitance": {
"type": "number",
"minimum": 0,
"description": "Exact capacitance in farads (1e-7 = 100 nF)."
},
"jlcpcbBasic": {
"type": "boolean",
"description": "Restrict to JLCPCB Basic parts when true; false or omission leaves this filter unset."
},
"subcategory": {
"type": "string",
"maxLength": 2000,
"minLength": 1,
"description": "Exact catalog subcategory, such as chip_resistor, mlcc, or ldo."
},
"mountingType": {
"enum": [
"smt",
"tht",
"mixed"
],
"type": "string",
"description": "smt: surface mount; tht: through-hole; mixed: both."
},
"voltageRating": {
"type": "number",
"minimum": 0,
"description": "Exact voltage rating in volts."
}
},
"additionalProperties": false
}| 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 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. |
| guestToken | string | Private guest-session capability returned by start_guest_session. Never print it or save it in a repository. |
| expectedRevision* | integer | Saved revision returned by get_board. A mismatch returns revision_conflict; read the board again before preparing a new operation. |
{
"type": "object",
"$defs": {
"outlinePoint": {
"type": "object",
"required": [
"x",
"y"
],
"properties": {
"x": {
"type": "number",
"description": "mm; right positive."
},
"y": {
"type": "number",
"description": "mm; up positive."
}
},
"additionalProperties": false
},
"outlineContour": {
"type": "object",
"required": [
"start",
"segments"
],
"properties": {
"start": {
"$ref": "#/$defs/outlinePoint",
"description": "Close final segment here."
},
"segments": {
"type": "array",
"items": {
"oneOf": [
{
"type": "object",
"required": [
"kind",
"end"
],
"properties": {
"end": {
"$ref": "#/$defs/outlinePoint",
"description": "End from prior endpoint/start."
},
"kind": {
"type": "string",
"const": "line"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"end",
"center",
"clockwise"
],
"properties": {
"end": {
"$ref": "#/$defs/outlinePoint",
"description": "Arc end; unequal to prior end/start."
},
"kind": {
"type": "string",
"const": "arc"
},
"center": {
"$ref": "#/$defs/outlinePoint",
"description": "Board-frame center, equidistant from arc endpoints."
},
"clockwise": {
"type": "boolean",
"description": "True=clockwise, false=CCW; full circles need ≥2 arcs."
}
},
"additionalProperties": false
}
]
},
"maxItems": 2000,
"minItems": 1,
"description": "Connected lines/arcs; close explicitly; no zero lengths or crossings."
}
},
"additionalProperties": false
},
"boardIdentifier": {
"type": "string",
"pattern": "^[^\\u0000-\\u001f\\u007f\\ud800-\\udfff]*$",
"maxLength": 200,
"minLength": 1
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"boardId",
"expectedRevision",
"requestId"
],
"properties": {
"name": {
"type": "string",
"pattern": "^[^\\u0000\\ud800-\\udfff]*$",
"maxLength": 60,
"minLength": 1,
"description": "Display name for the board."
},
"intent": {
"type": "object",
"required": [
"parts",
"connections"
],
"properties": {
"parts": {
"type": "array",
"items": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[^\\u0000\\ud800-\\udfff]*$"
},
"maxItems": 4,
"minItems": 3,
"description": "[id,dbId,value] strings; fourth designator if unlike id."
}
},
"connections": {
"type": "array",
"items": {
"type": "object",
"required": [
"net",
"class",
"pins"
],
"properties": {
"net": {
"$ref": "#/$defs/boardIdentifier"
},
"pins": {
"type": "array",
"items": {
"type": "array",
"items": {
"$ref": "#/$defs/boardIdentifier"
},
"maxItems": 2,
"minItems": 2,
"description": "[partId,padId] strings: local part ID, catalog pad number."
}
},
"class": {
"enum": [
"power",
"signal",
"ground"
],
"type": "string"
},
"requiredCurrentA": {
"type": "number",
"description": "Continuous A, all pins (mA/1000); omit for class widths.",
"exclusiveMinimum": 0
},
"maxTemperatureRiseC": {
"type": "number",
"description": "Legacy: unchanged current requirements only; else omit. Regenerated layouts use 10°C above ambient.",
"exclusiveMinimum": 0
},
"targetImpedanceOhms": {
"type": "number",
"description": "Single-ended ohms; no default. Honor device requirements. Pair targets go on differentialPairs.",
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}
},
"suggestedName": {
"type": "string"
},
"differentialPairs": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"positiveNet",
"negativeNet",
"profile"
],
"properties": {
"id": {
"$ref": "#/$defs/boardIdentifier"
},
"profile": {
"enum": [
"generic",
"usb2-full-speed",
"usb2-high-speed",
"lvds",
"custom"
],
"type": "string"
},
"negativeNet": {
"$ref": "#/$defs/boardIdentifier"
},
"positiveNet": {
"$ref": "#/$defs/boardIdentifier"
},
"minCoupledRatio": {
"type": "number",
"maximum": 1,
"minimum": 0
},
"targetSpacingMm": {
"type": "number",
"minimum": 0
},
"maxViaCountDelta": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
},
"spacingToleranceMm": {
"type": "number",
"minimum": 0
},
"maxLengthMismatchMm": {
"type": "number",
"minimum": 0
},
"targetImpedanceOhms": {
"type": "number",
"description": "Differential ohms; honor device requirements. Defaults: USB full/high-speed 90, LVDS 100, generic/custom none.",
"exclusiveMinimum": 0
},
"maxLayerLengthMismatchMm": {
"type": "number",
"minimum": 0
}
},
"additionalProperties": false
}
}
},
"description": "Complete replacement schematic, including every part and connection to retain. Omit for name-only or physical-only edits.",
"additionalProperties": false
},
"boardId": {
"type": "string",
"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)$",
"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."
},
"requestId": {
"type": "string",
"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)$",
"description": "New UUID for this operation. Reuse it with identical arguments when retrying an uncertain result; use a new UUID for a different operation."
},
"boardEdits": {
"type": "object",
"properties": {
"outline": {
"oneOf": [
{
"type": "object",
"required": [
"kind",
"id"
],
"properties": {
"id": {
"$ref": "#/$defs/boardIdentifier"
},
"kind": {
"type": "string",
"const": "library"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"assetId"
],
"properties": {
"kind": {
"type": "string",
"const": "dxf"
},
"unit": {
"enum": [
"mm",
"in",
"mil"
],
"type": "string"
},
"layer": {
"$ref": "#/$defs/boardIdentifier"
},
"assetId": {
"$ref": "#/$defs/boardIdentifier"
},
"repairSmallGaps": {
"type": "boolean"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"profile"
],
"properties": {
"kind": {
"type": "string",
"const": "generated"
},
"profile": {
"type": "object",
"required": [
"outer",
"cutouts"
],
"properties": {
"outer": {
"$ref": "#/$defs/outlineContour",
"description": "Closed boundary; normalized CCW, lower-left (0,0)."
},
"cutouts": {
"type": "array",
"items": {
"$ref": "#/$defs/outlineContour"
},
"maxItems": 1999,
"description": "Closed voids ([]=none); prefer clockwise. Strictly inside; no touching, overlap or nesting."
}
},
"description": "Complete mm profile, retained cutouts; width 5–400, height 5–500; ≤2000 total segments. Omit width/height/diameter. Normalized origin/winding, 0.000001 mm precision.",
"additionalProperties": false
}
},
"additionalProperties": false
}
]
},
"settings": {
"type": "object",
"properties": {
"width": {
"anyOf": [
{
"type": "number",
"exclusiveMinimum": 0
},
{
"type": "string",
"const": "auto"
}
]
},
"height": {
"anyOf": [
{
"type": "number",
"exclusiveMinimum": 0
},
{
"type": "string",
"const": "auto"
}
]
},
"layers": {
"anyOf": [
{
"type": "number",
"const": 1
},
{
"type": "number",
"const": 2
},
{
"type": "number",
"const": 4
},
{
"type": "string",
"const": "auto"
}
]
},
"diameter": {
"anyOf": [
{
"type": "number",
"exclusiveMinimum": 0
},
{
"type": "string",
"const": "auto"
}
]
},
"outlineKind": {
"enum": [
"rectangle",
"circle",
"custom"
],
"type": "string"
},
"thicknessMm": {
"anyOf": [
{
"type": "number",
"const": 0.4
},
{
"type": "number",
"const": 0.6
},
{
"type": "number",
"const": 0.8
},
{
"type": "number",
"const": 1
},
{
"type": "number",
"const": 1.2
},
{
"type": "number",
"const": 1.6
},
{
"type": "number",
"const": 2
}
]
},
"jlcpcbStackup": {
"anyOf": [
{
"enum": [
"JLC04161H-7628",
"JLC04081H-7628",
"JLC041011-7628",
"JLC041211-7628",
"JLC041611-7628",
"JLC04162H-7628"
],
"type": "string"
},
{
"type": "null"
}
]
},
"thermalRelief": {
"type": "boolean",
"description": "Zone-connected solderable pads; default false."
},
"roundedCorners": {
"type": "boolean",
"description": "Round rectangle corners."
},
"edgeClearanceMm": {
"type": "number",
"minimum": 0.2
},
"solderMaskColor": {
"enum": [
"green",
"red",
"yellow",
"blue",
"white",
"black"
],
"type": "string"
},
"allowedPartSides": {
"enum": [
"top",
"bottom",
"both"
],
"type": "string",
"description": "Global policy; omission preserves supplied settings. Fixed placements must use a permitted side. Include any authorized policy change in the same patch; preserve explicit user side restrictions unless the user changes them."
},
"innerCopperWeight": {
"enum": [
"0.5oz",
"1oz",
"2oz"
],
"type": "string"
},
"outerCopperWeight": {
"enum": [
"1oz",
"2oz"
],
"type": "string"
},
"referenceDesignators": {
"type": "boolean"
}
},
"additionalProperties": false
},
"mountingHoles": {
"type": "object",
"properties": {
"remove": {
"type": "array",
"items": {
"$ref": "#/$defs/boardIdentifier"
},
"description": "Remove listed id only."
},
"upsert": {
"type": "array",
"items": {
"type": "object",
"required": [
"id"
],
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
},
"id": {
"$ref": "#/$defs/boardIdentifier"
},
"kind": {
"enum": [
"isolated_npth",
"grounded_pth"
],
"type": "string"
},
"addedAt": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
},
"netName": {
"$ref": "#/$defs/boardIdentifier"
},
"padDiameterMm": {
"type": "number",
"exclusiveMinimum": 0
},
"drillDiameterMm": {
"type": "number",
"maximum": 6.3,
"minimum": 0.15
},
"solderMaskKeepoutMm": {
"type": "number",
"minimum": 0,
"description": "Radial solder-mask expansion in mm."
},
"placementKeepoutDiameterMm": {
"type": "number",
"exclusiveMinimum": 0
}
},
"additionalProperties": false
},
"description": "Upsert by id; retain omitted fields."
}
},
"additionalProperties": false
},
"silkscreenSvgs": {
"type": "object",
"properties": {
"remove": {
"type": "array",
"items": {
"$ref": "#/$defs/boardIdentifier"
},
"description": "Remove listed id only."
},
"upsert": {
"type": "array",
"items": {
"type": "object",
"required": [
"id"
],
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
},
"id": {
"$ref": "#/$defs/boardIdentifier"
},
"layer": {
"enum": [
"top",
"bottom"
],
"type": "string"
},
"assetId": {
"$ref": "#/$defs/boardIdentifier",
"description": "Attached SVG ID; required for new artwork."
},
"widthMm": {
"type": "number",
"minimum": 0.5
},
"heightMm": {
"type": "number",
"minimum": 0.5
},
"rotationDeg": {
"type": "number",
"description": "CCW board-plane degrees."
}
},
"additionalProperties": false
},
"description": "Upsert by id; retain omitted fields."
}
},
"additionalProperties": false
},
"fixedPlacements": {
"type": "object",
"properties": {
"remove": {
"type": "array",
"items": {
"$ref": "#/$defs/boardIdentifier"
},
"description": "Remove listed partId only."
},
"upsert": {
"type": "array",
"items": {
"type": "object",
"required": [
"partId"
],
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
},
"side": {
"enum": [
"top",
"bottom"
],
"type": "string"
},
"partId": {
"$ref": "#/$defs/boardIdentifier"
},
"addedAt": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
},
"position": {
"oneOf": [
{
"type": "object",
"required": [
"kind",
"edge"
],
"properties": {
"edge": {
"enum": [
"left",
"right",
"top",
"bottom"
],
"type": "string"
},
"kind": {
"type": "string",
"const": "edge"
},
"insetMm": {
"type": "number",
"minimum": 0
},
"fraction": {
"type": "number",
"maximum": 1,
"minimum": 0,
"description": "Default 0.5; left/right: bottom→top; top/bottom: left→right."
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"fraction"
],
"properties": {
"kind": {
"type": "string",
"const": "perimeter"
},
"insetMm": {
"type": "number",
"minimum": 0
},
"fraction": {
"type": "number",
"maximum": 1,
"minimum": 0,
"description": "Outer-contour CCW arclength; 1=0. Start: rectangle (cornerRadius,0), circle bottom, custom profile.outer.start."
},
"alignment": {
"enum": [
"tangent",
"inward"
],
"type": "string",
"description": "X-axis: CCW tangent/inward normal; vertex bisector. Board-frame on both sides; no polarity/direction inference. Omit to retain rotation; excludes rotationDeg."
},
"rotationOffsetDeg": {
"type": "number",
"description": "CCW degrees added to required alignment; default 0."
}
},
"additionalProperties": false
}
]
},
"rotationDeg": {
"type": "number",
"description": "CCW board-plane degrees."
}
},
"description": "New unplaced parts require x and y or a relative position. Omitted coordinates inherit a saved fixed or realized pose; side/rotation alone require that pose.",
"additionalProperties": false
},
"description": "Upsert by partId; retain omitted fields."
}
},
"additionalProperties": false
},
"silkscreenTexts": {
"type": "object",
"properties": {
"remove": {
"type": "array",
"items": {
"$ref": "#/$defs/boardIdentifier"
},
"description": "Remove listed id only."
},
"upsert": {
"type": "array",
"items": {
"type": "object",
"required": [
"id"
],
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
},
"id": {
"$ref": "#/$defs/boardIdentifier"
},
"font": {
"type": "string",
"const": "RobotoMono-Medium"
},
"text": {
"type": "string",
"pattern": "^[^\\u0000\\ud800-\\udfff]*$"
},
"layer": {
"enum": [
"top",
"bottom"
],
"type": "string"
},
"addedAt": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
},
"heightMm": {
"type": "number",
"maximum": 20,
"minimum": 0.5
},
"rotationDeg": {
"type": "number",
"description": "CCW board-plane degrees."
}
},
"additionalProperties": false
},
"description": "Upsert by id; retain omitted fields."
}
},
"additionalProperties": false
}
},
"description": "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.",
"additionalProperties": false
},
"guestToken": {
"type": "string",
"maxLength": 200,
"minLength": 32,
"description": "Private guest-session capability returned by start_guest_session. Never print it or save it in a repository."
},
"expectedRevision": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Saved revision returned by get_board. A mismatch returns revision_conflict; read the board again before preparing a new operation.",
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}