{"data":{"name":"io.github.EasyGerber/easygerber","title":"EasyGerber: AI PCB design, layout, and routing","description":"AI PCB design, layout, and routing","version":"0.1.1","websiteUrl":"https://www.easygerber.com/agents","repositoryUrl":"https://github.com/EasyGerber/easygerber-agent-plugin","remotes":[{"url":"https://www.easygerber.com/api/mcp","type":"streamable-http"}],"packages":[],"status":"active","isLatest":true,"publishedAt":"2026-10-17T20:56:51.787Z","updatedAt":"2026-10-17T20:56:51.787Z","source":"official-registry","verification":"official","confidence":100,"stars":null,"sources":[{"stars":null,"title":"EasyGerber: AI PCB design, layout, and routing","source":"official-registry","sourceId":"io.github.EasyGerber/easygerber","updatedAt":"2026-10-17T20:56:51.787Z","confidence":100,"websiteUrl":"https://www.easygerber.com/agents","description":"AI PCB design, layout, and routing","verification":"official","repositoryUrl":"https://github.com/EasyGerber/easygerber-agent-plugin"}],"toolIndex":{"tools":[{"serverName":"io.github.EasyGerber/easygerber","endpointFingerprint":"ca4abe91f21ec03b52384b17e3ee91fff85b572632b2b2ede207609d991bd59e","name":"check_board_layout","title":"Check PCB layout for blocking issues","description":"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.","inputSchema":{"type":"object","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."},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Latest saved revision from create_board, update_board or get_board. Reuse it if no intervening change is known. A mismatch returns revision_conflict; read the board again before preparing a new operation."},"guestToken":{"type":"string","minLength":32,"maxLength":200,"description":"Private guest-session capability returned by start_guest_session. Never print it or save it in a repository."}},"required":["boardId","expectedRevision"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false},"annotations":{"title":"Check PCB layout for blocking issues","readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"definitionHash":"e22d4b94937c4252d44a70e96734b98c1d514bdcf434f963e7b44b0431c24252","schemaStatus":"valid","origin":"official-registry","observedAt":"2026-11-01T08:46:27.395Z","metadataTrust":"untrusted"},{"serverName":"io.github.EasyGerber/easygerber","endpointFingerprint":"ca4abe91f21ec03b52384b17e3ee91fff85b572632b2b2ede207609d991bd59e","name":"claim_guest_board","title":"Save the guest board after account sign-in","description":"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.","inputSchema":{"type":"object","properties":{"guestToken":{"type":"string","minLength":32,"maxLength":200,"description":"Private guest-session capability returned by start_guest_session. Never print it or save it in a repository."}},"required":["guestToken"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false},"annotations":{"title":"Save the guest board after account sign-in","readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":false},"definitionHash":"c1031b807f4e9311766d38eba753375feda0bc3df0caabb5d3025533c7f737f6","schemaStatus":"valid","origin":"official-registry","observedAt":"2026-11-01T08:46:27.395Z","metadataTrust":"untrusted"},{"serverName":"io.github.EasyGerber/easygerber","endpointFingerprint":"ca4abe91f21ec03b52384b17e3ee91fff85b572632b2b2ede207609d991bd59e","name":"create_board","title":"Create board","description":"Creates a saved schematic from published catalog parts and verified pins. Supply name, requestId, intent and the existing guestToken for guest work. Omit boardEdits unless physical customization is requested; server defaults supply board settings, footprints, models and manufacturing limits. Account boards are personal unless organizationId is specified; a guest session supports one board. Use the returned id and revision directly as boardId and expectedRevision for generate_layout; no get_board call is needed just to obtain them. Use update_board for an existing 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 account or guest session. 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; do not restart the guest session. Guest access uses guestToken and excludes organization access.","inputSchema":null,"annotations":{"title":"Create board","readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"definitionHash":"d87470b8e68d54f39d576736aac31c265e4a202715a7213f0d423430fd135c1b","schemaStatus":"too-large","origin":"official-registry","observedAt":"2026-11-01T08:46:27.395Z","metadataTrust":"untrusted"},{"serverName":"io.github.EasyGerber/easygerber","endpointFingerprint":"ca4abe91f21ec03b52384b17e3ee91fff85b572632b2b2ede207609d991bd59e","name":"delete_board","title":"Permanently delete an account board","description":"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.","inputSchema":{"type":"object","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","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Latest saved revision from create_board, update_board or get_board. Reuse it if no intervening change is known. A mismatch returns revision_conflict; read the board again before preparing a new operation."}},"required":["boardId","expectedRevision"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false},"annotations":{"title":"Permanently delete an account board","readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":false},"definitionHash":"1f9858cd0f5be8ef984d2e5f8f8f2f170b6b17cf50868c91d91b668f61a4c5a4","schemaStatus":"valid","origin":"official-registry","observedAt":"2026-11-01T08:46:27.395Z","metadataTrust":"untrusted"},{"serverName":"io.github.EasyGerber/easygerber","endpointFingerprint":"ca4abe91f21ec03b52384b17e3ee91fff85b572632b2b2ede207609d991bd59e","name":"export_board","title":"Export board files","description":"Creates a stable 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. 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. Guest access uses guestToken and excludes organization access.","inputSchema":{"type":"object","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":"Accessible saved board ID from get_board, create_board, or list_boards."},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Revision from get_board. A mismatch returns revision_conflict; read the board again before exporting."},"format":{"type":"string","enum":["manufacturing","egb"],"description":"manufacturing: ZIP with Gerber, drill, BOM and placement files. egb: editable EasyGerber board file."},"changeNote":{"type":"string","minLength":1,"maxLength":1000,"description":"Description of modifications, required when get_board returns inherited licensing. Added to the exported license notices."},"guestToken":{"type":"string","minLength":32,"maxLength":200,"description":"Private guest-session capability returned by start_guest_session. Never print it or save it in a repository."}},"required":["boardId","expectedRevision","format"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false},"annotations":{"title":"Export board files","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"definitionHash":"ac9bb697f076c54df5a911d53314f5e02a26a79f255073c7084014f4355a03c5","schemaStatus":"valid","origin":"official-registry","observedAt":"2026-11-01T08:46:27.395Z","metadataTrust":"untrusted"},{"serverName":"io.github.EasyGerber/easygerber","endpointFingerprint":"ca4abe91f21ec03b52384b17e3ee91fff85b572632b2b2ede207609d991bd59e","name":"generate_layout","title":"Generate PCB layout","description":"Starts a durable layout job for a saved board at expectedRevision and returns without waiting for completion. Use the id and revision from the latest create_board, update_board or get_board response; poll the returned 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.","inputSchema":{"type":"object","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."},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Latest saved revision from create_board, update_board or get_board. Reuse it if no intervening change is known. A mismatch returns revision_conflict; read the board again before preparing a new operation."},"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","minLength":32,"maxLength":200,"description":"Private guest-session capability returned by start_guest_session. Never print it or save it in a repository."}},"required":["boardId","expectedRevision","requestId"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false},"annotations":{"title":"Generate PCB layout","readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":false},"definitionHash":"8ac71e0c9b0eafe2def3c153878b0279a48feb4d361c0546fe171cf3259cb491","schemaStatus":"valid","origin":"official-registry","observedAt":"2026-11-01T08:46:27.395Z","metadataTrust":"untrusted"},{"serverName":"io.github.EasyGerber/easygerber","endpointFingerprint":"ca4abe91f21ec03b52384b17e3ee91fff85b572632b2b2ede207609d991bd59e","name":"get_board","title":"Read board","description":"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.","inputSchema":{"type":"object","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."},"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."},"guestToken":{"type":"string","minLength":32,"maxLength":200,"description":"Private guest-session capability returned by start_guest_session. Never print it or save it in a repository."}},"required":["boardId"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false},"annotations":{"title":"Read board","readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"definitionHash":"d28be0220a9b1a08778a6fbab968e9580e380716dd16fb43d985d338d2f79210","schemaStatus":"valid","origin":"official-registry","observedAt":"2026-11-01T08:46:27.395Z","metadataTrust":"untrusted"},{"serverName":"io.github.EasyGerber/easygerber","endpointFingerprint":"ca4abe91f21ec03b52384b17e3ee91fff85b572632b2b2ede207609d991bd59e","name":"get_generation","title":"Read generation status","description":"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.","inputSchema":{"type":"object","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."},"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."},"guestToken":{"type":"string","minLength":32,"maxLength":200,"description":"Private guest-session capability returned by start_guest_session. Never print it or save it in a repository."}},"required":["boardId","generationId"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false},"annotations":{"title":"Read generation status","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"definitionHash":"ec343a4fd10dbb9b88cca1f77cb8e58b2b148f92d9964f79a319e703e14f4555","schemaStatus":"valid","origin":"official-registry","observedAt":"2026-11-01T08:46:27.395Z","metadataTrust":"untrusted"},{"serverName":"io.github.EasyGerber/easygerber","endpointFingerprint":"ca4abe91f21ec03b52384b17e3ee91fff85b572632b2b2ede207609d991bd59e","name":"get_part","title":"Get part and pins","description":"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 boardId applies that board’s strict Part List restriction, when enabled. Guest access uses guestToken and excludes organization access.","inputSchema":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":200,"description":"Catalog ID returned by search_parts."},"factQuery":{"type":"string","minLength":1,"maxLength":200,"description":"Terms for relevant facts omitted from the supplied bundle."},"factOffset":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Continue at nextFactOffset with the same factQuery."},"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."},"guestToken":{"type":"string","minLength":32,"maxLength":200,"description":"Private guest-session capability returned by start_guest_session. Never print it or save it in a repository."}},"required":["id"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false},"annotations":{"title":"Get part and pins","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"definitionHash":"83c5a4f98f46d9985c08eb72adffc59d125559cac2b56763d1cbadcad4d24fa4","schemaStatus":"valid","origin":"official-registry","observedAt":"2026-11-01T08:46:27.395Z","metadataTrust":"untrusted"},{"serverName":"io.github.EasyGerber/easygerber","endpointFingerprint":"ca4abe91f21ec03b52384b17e3ee91fff85b572632b2b2ede207609d991bd59e","name":"get_profile","title":"Get EasyGerber profile","description":"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.","inputSchema":{"type":"object","properties":{},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false},"annotations":{"title":"Get EasyGerber profile","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"definitionHash":"bebf1a36b8f399212b5a24c647bc4ac5bbb4a5e5a255f7ef9e595e18bbab796e","schemaStatus":"valid","origin":"official-registry","observedAt":"2026-11-01T08:46:27.395Z","metadataTrust":"untrusted"},{"serverName":"io.github.EasyGerber/easygerber","endpointFingerprint":"ca4abe91f21ec03b52384b17e3ee91fff85b572632b2b2ede207609d991bd59e","name":"list_boards","title":"List boards","description":"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.","inputSchema":{"type":"object","properties":{"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."},"limit":{"type":"integer","minimum":1,"maximum":50,"description":"Maximum boards to return; defaults to 20."},"offset":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Zero-based offset; defaults to 0. Continue with returned nextOffset; null means no further page."},"guestToken":{"type":"string","minLength":32,"maxLength":200,"description":"Private guest-session capability returned by start_guest_session. Never print it or save it in a repository."}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false},"annotations":{"title":"List boards","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"definitionHash":"13240194baea5805e70f87a751996820d9170c6705d66654e34e525f9172a6be","schemaStatus":"valid","origin":"official-registry","observedAt":"2026-11-01T08:46:27.395Z","metadataTrust":"untrusted"},{"serverName":"io.github.EasyGerber/easygerber","endpointFingerprint":"ca4abe91f21ec03b52384b17e3ee91fff85b572632b2b2ede207609d991bd59e","name":"list_organizations","title":"List organizations","description":"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.","inputSchema":{"type":"object","properties":{},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false},"annotations":{"title":"List organizations","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"definitionHash":"55be08cb17a1e812d40d3ba97c4948ffd101c5ed29c76bc33ef2b13d72a5ad90","schemaStatus":"valid","origin":"official-registry","observedAt":"2026-11-01T08:46:27.395Z","metadataTrust":"untrusted"},{"serverName":"io.github.EasyGerber/easygerber","endpointFingerprint":"ca4abe91f21ec03b52384b17e3ee91fff85b572632b2b2ede207609d991bd59e","name":"search_parts","title":"Search published parts","description":"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 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.","inputSchema":{"type":"object","properties":{"category":{"type":"string","enum":["resistor","capacitor","inductor","led","diode","transistor","ic","microcontroller","connector","crystal","switch","fuse","regulator","sensor","relay","transformer","display","module","test_point","mounting_hole","other"],"description":"Catalog category."},"subcategory":{"type":"string","minLength":1,"maxLength":2000,"description":"Subcategory, e.g. chip_resistor, mlcc, ldo."},"package":{"type":"string","minLength":1,"maxLength":2000,"description":"Exact catalog label; use query for package families."},"mountingType":{"type":"string","enum":["smt","tht","mixed"],"description":"smt: surface mount; tht: through-hole; mixed: both."},"query":{"type":"string","minLength":1,"maxLength":2000,"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."},"factQuery":{"type":"string","minLength":1,"maxLength":200,"description":"Cached-fact terms only; requires query. Omit for filter-only searches. It never changes which parts match."},"limit":{"default":3,"description":"Maximum catalog candidates to return, from 1 to 20; defaults to 3.","type":"integer","minimum":1,"maximum":20},"jlcpcbBasic":{"type":"boolean","description":"Basic-only when true; otherwise leave unset."},"resistance":{"type":"number","minimum":0,"description":"Exact ohms (10000 = 10 kΩ)."},"capacitance":{"type":"number","minimum":0,"description":"Exact farads (1e-7 = 100 nF)."},"inductance":{"type":"number","minimum":0,"description":"Exact henries."},"voltageRating":{"type":"number","minimum":0,"description":"Rated volts."},"frequency":{"type":"number","minimum":0,"description":"Hertz (8e6 = 8 MHz)."},"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."},"guestToken":{"type":"string","minLength":32,"maxLength":200,"description":"Private guest-session capability returned by start_guest_session. Never print it or save it in a repository."}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false},"annotations":{"title":"Search published parts","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"definitionHash":"bc18d23fde1d7a5f5462fc5f0c207fc52beee68148349cd41c74f31f5211ba84","schemaStatus":"valid","origin":"official-registry","observedAt":"2026-11-01T08:46:27.395Z","metadataTrust":"untrusted"},{"serverName":"io.github.EasyGerber/easygerber","endpointFingerprint":"ca4abe91f21ec03b52384b17e3ee91fff85b572632b2b2ede207609d991bd59e","name":"start_guest_session","title":"Start a guest board session","description":"For board work without an account, reuse this task’s guest session; start one only when none exists. Use the returned guestToken to search parts, create_board, then generate_layout. Reuse an 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.","inputSchema":{"type":"object","properties":{},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false},"annotations":{"title":"Start a guest board session","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"definitionHash":"5a75029850e698e06a2984ec4052aa32077053e212db6600c05670a3f1e7bbe9","schemaStatus":"valid","origin":"official-registry","observedAt":"2026-11-01T08:46:27.395Z","metadataTrust":"untrusted"},{"serverName":"io.github.EasyGerber/easygerber","endpointFingerprint":"ca4abe91f21ec03b52384b17e3ee91fff85b572632b2b2ede207609d991bd59e","name":"stop_generation","title":"Stop generation","description":"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.","inputSchema":{"type":"object","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."},"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."},"guestToken":{"type":"string","minLength":32,"maxLength":200,"description":"Private guest-session capability returned by start_guest_session. Never print it or save it in a repository."}},"required":["boardId","generationId"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false},"annotations":{"title":"Stop generation","readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":false},"definitionHash":"6020e42051f1ddd1b8f910b8e94b67cafefa4dbbda2f80a7e3360805f5711944","schemaStatus":"valid","origin":"official-registry","observedAt":"2026-11-01T08:46:27.395Z","metadataTrust":"untrusted"},{"serverName":"io.github.EasyGerber/easygerber","endpointFingerprint":"ca4abe91f21ec03b52384b17e3ee91fff85b572632b2b2ede207609d991bd59e","name":"submit_feedback","title":"Submit EasyGerber feedback","description":"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.","inputSchema":{"type":"object","properties":{"category":{"type":"string","enum":["bug","feature_request","general"],"description":"bug reports a problem; feature_request proposes a change; general shares other EasyGerber feedback."},"message":{"type":"string","minLength":10,"maxLength":2000,"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."},"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","minLength":32,"maxLength":200,"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."}},"required":["category","message","requestId"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false},"annotations":{"title":"Submit EasyGerber feedback","readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"definitionHash":"dd304b94d006006ac72222364e06fb2b9651d0e5f58da31666a597c753db2ca7","schemaStatus":"valid","origin":"official-registry","observedAt":"2026-11-01T08:46:27.395Z","metadataTrust":"untrusted"},{"serverName":"io.github.EasyGerber/easygerber","endpointFingerprint":"ca4abe91f21ec03b52384b17e3ee91fff85b572632b2b2ede207609d991bd59e","name":"update_board","title":"Edit board","description":"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 account or guest session. 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; do not restart the guest session. Guest access uses guestToken and excludes organization access.","inputSchema":null,"annotations":{"title":"Edit board","readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":false},"definitionHash":"b24e93221a987a52cfedcf18df9c38311b5701d666979e42e375885b08f29dc2","schemaStatus":"too-large","origin":"official-registry","observedAt":"2026-11-01T08:46:27.395Z","metadataTrust":"untrusted"}],"endpoints":[{"endpointFingerprint":"ca4abe91f21ec03b52384b17e3ee91fff85b572632b2b2ede207609d991bd59e","protocol":"streamable-http","status":"indexed","toolCount":17,"observedAt":"2026-11-01T08:46:27.395Z"}],"authentication":"unknown"},"connectionConfigurations":{"status":"ready","authentication":"not embedded","clients":{"Claude Desktop":{"mcpServers":{"io.github.EasyGerber/easygerber":{"url":"https://www.easygerber.com/api/mcp"}}},"Cursor":{"mcpServers":{"io.github.EasyGerber/easygerber":{"url":"https://www.easygerber.com/api/mcp"}}},"VS Code":{"servers":{"io.github.EasyGerber/easygerber":{"type":"http","url":"https://www.easygerber.com/api/mcp"}}}}},"resourceType":"mcp-server","callable":true,"runtime":{"callable":true,"protocols":["mcp"]},"interfaces":[{"protocol":"mcp","transport":"streamable-http","url":"https://www.easygerber.com/api/mcp"}],"profile":{"apiVersion":"1","schemaVersion":"1","id":"mcp-server:io.github.EasyGerber%2Feasygerber","resourceType":"mcp-server","canonicalUrl":"https://www.agentsjunction.com/api/v1/servers/io.github.EasyGerber%2Feasygerber","name":"io.github.EasyGerber/easygerber","description":"AI PCB design, layout, and routing","interfaces":[{"protocol":"mcp","transport":"streamable-http","url":"https://www.easygerber.com/api/mcp"}],"capabilities":[],"identity":{"source":"official-registry","websiteUrl":"https://www.easygerber.com/agents","repositoryUrl":"https://github.com/EasyGerber/easygerber-agent-plugin","version":"0.1.1"},"verification":{"state":"official","confidence":100},"operations":{"resourceType":"mcp-server","name":"io.github.EasyGerber/easygerber","status":"online","lastCheckedAt":"2026-11-03T18:17:34.516Z","lastSuccessfulCheck":"2026-11-03T18:17:34.516Z","latencyMs":151,"consecutiveFailures":0,"isStale":false,"checks":{"endpointReachable":true,"protocolValid":true,"agentCardValid":null,"mcpHandshakeValid":true},"lastSeen":null,"lastSuccessfulInteraction":null,"lastHealthCheck":"2026-11-03T18:17:34.516Z","source":{"type":"health-check","url":null},"observedAt":"2026-11-03T18:17:34.516Z"},"security":null,"timestamps":{"createdAt":"2026-10-17T20:56:51.787Z","updatedAt":"2026-10-17T20:56:51.787Z","observedAt":"2026-11-03T18:17:34.516Z"},"compatibility":{"serverVersion":"0.1.1","protocolVersions":[{"protocol":"mcp","version":null}]}}}}