# EasyEDA Copilot (npm · easyeda-copilot-mcp)

Connect MCP clients to EasyEDA Desktop for schematic and PCB design, routing, inspection, and DRC.

- Trust score: 83/100 (high trust)
- Change this week: +37
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-11

## Components

- npm · `easyeda-copilot-mcp`: 83/100 (this document), [markdown](https://verifymcp.io/servers/biosshot-easyeda-copilot/easyeda-copilot-mcp.md), [page](https://verifymcp.io/servers/biosshot-easyeda-copilot/easyeda-copilot-mcp)

## Channel facts

- Registry: `npm`
- Package: `easyeda-copilot-mcp`
- Version: `1.1.7`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-11.

- **Supply Chain Security**: 99/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - No install/post-install scripts declared.
  - 31 of 134 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 97/100
  - Source repository is publicly reachable at the declared URL.
  - Cryptographically verified build provenance (signed, bound to biosshot/easyeda-copilot).
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 1 days ago).
  - Security-disclosure policy not yet verified: we couldn't inspect the source repository.
- **Schema Quality & AI Usability**: 81/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 4162 tokens (~115/item across 36 items; 35 tools + 1 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 23/100
  - Stability observed for 7 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 96/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 87% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add biosshot-easyeda-copilot -- npx -y easyeda-copilot-mcp
```

### Codex

```bash
codex mcp add biosshot-easyeda-copilot -- npx -y easyeda-copilot-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "biosshot-easyeda-copilot": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "easyeda-copilot-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add biosshot-easyeda-copilot --command npx --arg -y --arg easyeda-copilot-mcp
```

### Hermes

```yaml
mcp_servers:
  biosshot-easyeda-copilot:
    command: "npx"
    args: ["-y", "easyeda-copilot-mcp"]
```

### Other

```json
{
  "mcpServers": {
    "biosshot-easyeda-copilot": {
      "command": "npx",
      "args": [
        "-y",
        "easyeda-copilot-mcp"
      ]
    }
  }
}
```

## Changelog

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

### 2026-08-11 (score 83, +1)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-08-10 (score 82, +1)

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

### 2026-08-09 (score 81, +2)

- [functional improvement] Stability: unverified → 0.17
- [functional] Package version: 1.1.6 → 1.1.7

### 2026-08-08 (score 79, +4)

- [security improvement] Known CVEs: partial → pass
- [functional] Dependency health: partial → 0.90

### 2026-08-05 (score 75, +29)

- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [functional improvement] Tool coverage: unverified → 100
- [functional improvement] Schema quality: unverified → 100
- [functional improvement] MCP protocol: unverified → pass
- [functional] First check of Tool coverage: 86
- [functional] First check of Schema quality: fail
- [functional] First check of Schema quality: fail
- [functional] First check of Schema quality: good

### 2026-08-04 (score 46)

First indexed and scored.

## MCP tools (35)

### `get_pcb_stack_layers` (~46 tokens)

Get PCB Stack Layers

Return the current PCB copper layer count and active signal routing layers. Open the target PCB document first. Use before choosing route_layers for run_auto_route_on_current_pcbdoc.

### `set_pcb_copper_layer_count` (~66 tokens)

Set PCB Copper Layer Count

Set the number of copper layers in the currently opened PCB document. This changes the PCB stack; use get_pcb_stack_layers afterwards to verify available routing layers.

Input parameters:

- `count` (required): Allowed copper layer count. EasyEDA supports even counts from 2 to 32.

### `import_pcb_changes` (~88 tokens)

Import PCB Changes

Import schematic changes into the currently opened PCB document. If schematic_uuid is omitted, EasyEDA uses the schematic linked to the same board. Open the target PCB document first. For PCB docs, read the local docs folder: /workdir/node_modules/easyeda-copilot-mcp/docs/SKILL.md

Input parameters:

- `schematic_uuid` (string): Optional schematic UUID to import changes from.

### `get_pcb_component_sizes` (~74 tokens)

Get PCB Component Sizes

Return resolved PCB footprint sizes in millimeters for selected current schematic components. Use before choosing compact board dimensions. For PCB layout docs, read the local docs folder: /workdir/node_modules/easyeda-copilot-mcp/docs/SKILL.md

Input parameters:

- `designators`
- `includeAll`

### `make_pcb_layout` (~156 tokens)

Make PCB Layout

Create PCB component placement from the current EasyEDA schematic using JavaScript PCB layout DSL code. Starts a long-running server operation, waits up to 60 seconds, then returns either the finished layoutId/preview or an operationId for wait_pcb_layout. Server-side routing is disabled: route the assembled PCB later in EasyEDA/client tools. This tool does not assemble the board. For PCB layout docs, read the local docs folder: /workdir/node_modules/easyeda-copilot-mcp/docs/SKILL.md

Input parameters:

- `file` (string, required): Path to a JavaScript PCB layout DSL code file.
- `wait_ms` (number): How long this call may wait for completion. Default: 60000ms.

### `wait_pcb_layout` (~78 tokens)

Wait PCB Layout

Wait for a previously started make_pcb_layout operation. Use operationId returned by make_pcb_layout when it says the layout is still running.

Input parameters:

- `operationId` (string, required): operationId returned by make_pcb_layout.
- `wait_ms` (number): How long this call may wait for completion. Default: 60000ms.

### `cancel_pcb_layout` (~39 tokens)

Cancel PCB Layout

Cancel a previously started make_pcb_layout operation by operationId.

Input parameters:

- `operationId` (string, required): operationId returned by make_pcb_layout.

### `assemble_pcb_layout_on_current_pcbdoc` (~114 tokens)

Assemble PCB Layout

Send a previously generated make_pcb_layout board assembly payload to the currently opened EasyEDA PCB document. Before using this tool, call get_current_project_info, verify the schematic belongs to a BOARD item with a PCB document, and call open_document for that PCB uuid. For PCB assembly docs, read the local docs folder: /workdir/node_modules/easyeda-copilot-mcp/docs/SKILL.md

Input parameters:

- `layoutId` (string, required): layoutId returned by make_pcb_layout.

### `preview_pcb` (~201 tokens)

Preview PCB

Render a PNG preview of the currently opened PCB document. Supports layer selection, net/component highlighting, and zoom to a net, component, or bounding box. Open the target PCB document first.

Input parameters:

- `highlight_component` (string): Optional component designator to highlight.
- `highlight_component_colors` (object): Optional per-component highlight colors, e.g. {"U1":"#ff0000"}.
- `highlight_net` (string): Optional net name to highlight.
- `highlight_net_colors` (object): Optional per-net highlight colors, e.g. {"BAT+":"#ff0000","GND":"#00ff00"}.
- `layers` (array): Layers to render, e.g. ["top"], ["bottom"], ["top","bottom"], or ["all"].
- `padding_mm` (number): Padding around the rendered area in millimeters.
- `zoom`: Zoom target: full board, a net, a component, or a bbox.

### `inspect_net` (~77 tokens)

Inspect PCB Net

Analyze a specific net on the currently opened PCB document: length, width, vias, layers, connected/unconnected pads, polygons, and DRC violations. Open the target PCB document first.

Input parameters:

- `drc_limit` (number): Maximum DRC violations per group to fetch for this net.
- `net` (string, required): Net name to inspect.

### `inspect_component` (~68 tokens)

Inspect PCB Component

Return a PCB component by designator with a list of nearest neighboring components within the given radius. Open the target PCB document first.

Input parameters:

- `designator` (string, required): Component designator to inspect, e.g. R1.
- `radius` (number): Search radius in millimeters for nearest components.

### `get_current_pcb` (~952 tokens)

Get EasyEDA PCB

Get the current EasyEDA PCB through the connected MCP interface. Open a PCB document first.
Format: {"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"layers":{"type":"array","items":{"type":"object","properties":{"layer":{"type":"string"},"type":{"type":"string"}},"required":["layer","type"],"additionalProperties":false}},"board":{"type":"object","properties":{"polygon":{"minItems":3,"type":"array","items":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"}},"required":["x","y"],"additionalProperties":false}}},"required":["polygon"],"additionalProperties":false},"components":{"type":"array","items":{"type":"object","properties":{"designator":{"type":"string"},"value":{"type":"string"},"footprint":{"type":"string"},"x":{"type":"number"},"y":{"type":"number"},"rotate":{"type":"number"},"layer":{"type":"string"},"pads":{"type":"array","items":{"type":"object","properties":{"pad":{"type":"string"},"net":{"type":"string"}},"required":["pad"],"additionalProperties":false}},"nearest_components":{"type":"array","items":{"type":"object","properties":{"designator":{"type":"string"},"distance":{"type":"number"},"x":{"type":"number"},"y":{"type":"number"},"layer":{"type":"string"}},"required":["designator","distance","x","y","layer"],"additionalProperties":false}}},"required":["designator","x","y","layer","pads"],"additionalProperties":false}},"wires":{"type":"array","items":{"type":"object","properties":{"net":{"type":"string"},"layer":{"type":"array","items":{"type":"string"}},"connected_pads":{"type":"array","items":{"type":"string"}},"length":{"type":"number"},"direct_distance":{"type":"number"},"detour_ratio":{"type":"number"},"vias":{"type":"number"},"width":{"type":"object","properties":{"min":{"type":"number"},"max":{"type":"number"}},"required":["min","max"],"additionalProperties":false},"segments":{"type":"number"},"bbox":{"type":"object","properties":{"left":{"type":"number"},"right":{"type":"number"},"to…

### `run_auto_route_on_current_pcbdoc` (~407 tokens)

Run PCB Auto Router

Export the current EasyEDA PCB autoroute JSON, run the bundled custom router on the MCP side, import the routed result back into EasyEDA, then rebuild GND pours and add GND suture vias. Starts a long-running local operation, waits up to 60 seconds, then returns either the finished result or an operationId for wait_auto_route_on_current_pcbdoc. This tool does not clear existing tracks/vias before routing and does not route nets that are already routed in EasyEDA autoroute export; call clear_routing first when old routing should be replaced. Open the target PCB document first.

Input parameters:

- `ignore_nets` (array): Nets removed from the routing task. Default: ["GND"].
- `pour_gnd` (boolean): Create/rebuild full-board GND pours after importing routes.
- `route_layers` (array): Optional copper signal layers allowed for routing, e.g. ["TOP"], ["BOTTOM"], or ["TOP","BOTTOM","INNER_1"]. Use get_pcb_stack_layers first.
- `routing_effect_priority` (string): Auto router effect priority. SPEED_FIRST limits routing attempts. COMPLETION_FIRST prioritizes route completion.
- `suture_diameter_mm` (number): GND suture via outer diameter in millimeters.
- `suture_drill_mm` (number): GND suture via drill diameter in millimeters.
- `suture_edge_margin_mm` (number): Minimum distance from board bounding box edge for generated suture via candidates.
- `suture_gnd` (boolean): Add GND SUTURE vias after importing routes.
- `suture_grid_mm` (number): GND suture via grid step in millimeters.
- `suture_max_count` (integer): Safety cap for generated GND suture vias.
- `timeout_sec` (number): Router timeout in seconds.
- `wait_ms` (number): How long this call may wait for completion. Default: 60000ms.

### `clear_routing` (~121 tokens)

Clear PCB Routing

Delete existing PCB routing primitives from the currently opened EasyEDA PCB document: tracks, arcs, polylines, pours, fills, regions, and vias. Board outline is preserved. Use before run_auto_route_on_current_pcbdoc when old routing should be replaced.

Input parameters:

- `clearOnlyNet`: If set, clear only this net name or these net names. ignoreToClearNet still excludes matching nets.
- `ignoreToClearNet`: Net name or net names to preserve while clearing routing, e.g. "GND" or ["GND"].

### `wait_auto_route_on_current_pcbdoc` (~95 tokens)

Wait PCB Auto Router

Wait for a previously started run_auto_route_on_current_pcbdoc operation. Use operationId returned by run_auto_route_on_current_pcbdoc when it says the auto route is still running.

Input parameters:

- `operationId` (string, required): operationId returned by run_auto_route_on_current_pcbdoc.
- `wait_ms` (number): How long this call may wait for completion. Default: 60000ms.

### `cancel_auto_route_on_current_pcbdoc` (~70 tokens)

Cancel PCB Auto Router

Cancel a previously started run_auto_route_on_current_pcbdoc operation by operationId. Cancellation stops before import if possible; if import already started, the board may still be updated.

Input parameters:

- `operationId` (string, required): operationId returned by run_auto_route_on_current_pcbdoc.

### `list_checkpoints` (~20 tokens)

List EasyEDA Checkpoints

List checkpoints saved by the EasyEDA Copilot extension.

### `save_checkpoint_for_current_page` (~21 tokens)

Save EasyEDA Checkpoint

Save a checkpoint for the current EasyEDA document.

### `restore_checkpoint_for_current_page` (~27 tokens)

Restore EasyEDA Checkpoint

Restore one checkpoint by id in EasyEDA.

Input parameters:

- `id` (string)

### `component_search` (~40 tokens)

Search EasyEDA Component

Search a component on the main EasyEDA Copilot server by exact part_uuid or MPN only.

Input parameters:

- `MPN`
- `part_uuid`

### `search_reused_block` (~100 tokens)

Search Reused Block

Search pre-assembled EasyEDA Copilot reused blocks that can be recalculated and inserted into a circuit. For circuit workflow docs, read the local docs folder: /workdir/node_modules/easyeda-copilot-mcp/docs/SKILL.md

Input parameters:

- `limit` (number): Number of results per page.
- `page` (number): Current results page.
- `query` (string, required): Query example: "3.3V power regulator"

### `extract_circuit_on_current_page` (~179 tokens)

Extract Circuit

Post-process circuit changes on the main EasyEDA Copilot server and sends the assembled result to EasyEDA. Every added component must include part_uuid. For circuit modification docs, read the local docs folder: /workdir/node_modules/easyeda-copilot-mcp/docs/SKILL.md

Input parameters:

- `add_components` (array, required): Components to add
- `add_reused_blocks` (array, required): reuded blocks to add
- `external_connect` (required): Use only when you need to connect to a pin of an external component that you have not modified and that does not have a signal_name
- `external_rm_connect` (required): Use only if you need to remove/break the connection from an external component's pin. Remember to remove external_rm_connect first and then add external_connect.
- `rm_components` (required): Components to remove from the circuit

### `beautify_schematic_on_current_page` (~98 tokens)

Beautify EasyEDA Schematic

Reassemble every component on the current EasyEDA schematic page into named functional blocks. The blocks must cover the whole page. A checkpoint is saved before the server request, and assembly failures restore it automatically. For circuit workflow docs, read the local docs folder: /workdir/node_modules/easyeda-copilot-mcp/docs/SKILL.md

Input parameters:

- `blocks` (object, required): All current-page components grouped by block name.

### `get_current_page_schematic` (~426 tokens)

Get EasyEDA Schematic

Get the current EasyEDA schematic through the connected MCP interface.
Format: {"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"components":{"type":"array","items":{"type":"object","properties":{"designator":{"type":"string","description":"Component identifier (e.g., \"U1\", \"R5\", \"J1\", \"X1\")."},"value":{"type":"string","description":"Minimum description: for simple components — only the nominal value; for microcircuits — only the name. Only ASCII symbols (e.g., \"LM358\", \"10nF\", \"100k\")."},"pins":{"type":"array","items":{"type":"object","properties":{"pin_number":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"Pin number."},"name":{"type":"string","description":"Pin name (e.g., \"VCC\")."},"signal_name":{"type":"string","description":"The name of the signal the pin is connected to. (Name only). The signal name assigned to the pin must be identical to the signal name of the target output."}},"required":["pin_number","name","signal_name"],"additionalProperties":false},"description":"Pin details."},"part_uuid":{"anyOf":[{"type":"string","pattern":"^[0-9a-f]{32}$"},{"type":"null"}],"description":"Unique component identifier."},"pos":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"},"rotate":{"type":"number"},"mirror":{"type":"boolean"}},"required":["x","y"],"additionalProperties":false},"footprint_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"footprint_uuid":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["designator","value","pins","part_uuid"],"additionalProperties":false},"description":"Components"}},"required":["components"],"additionalProperties":false}

### `open_document` (~45 tokens)

Open EasyEDA Project Document

Open a schematic, schematic page, PCB, or panel document from the current EasyEDA project by document UUID.

Input parameters:

- `document_uuid` (string, required): Document UUID from get_current_project_info.

### `sync_current_document` (~54 tokens)

Sync Current EasyEDA Document

Force EasyEDA to synchronize the current schematic or PCB document by saving it, closing the current editor tab, waiting briefly, and reopening the same document.

Input parameters:

- `settle_ms` (number): Delay in milliseconds between close and reopen.

### `modify_name` (~47 tokens)

Rename EasyEDA: Schematic, Schematic page, PCB

Modify the name of an EasyEDA Schematic, Schematic page, PCB

Input parameters:

- `doc` (required)
- `name` (string, required): New short name. Use UPPERCASE or PascalCase

### `create_doc` (~23 tokens)

Create EasyEDA Doc

Create a doc in the current EasyEDA project

Input parameters:

- `doc` (required)

### `delete_doc` (~27 tokens)

Delete EasyEDA Doc

Delete a doc from the current EasyEDA project. This is destructive!

Input parameters:

- `doc` (required)

### `get_current_project_info` (~41 tokens)

Get Current EasyEDA Project Info

Read the current EasyEDA project tree and document metadata through the connected extension. BOARD items show the linked schematic and PCB document; use this before PCB assembly.

### `export_pcb_drc_rules` (~77 tokens)

Export PCB DRC Rules

Export the full current PCB DRC bundle to a JSON file. The bundle contains ruleConfiguration and netRules; differential pairs are injected into netRules as synthetic entries with type "differentialPair". Open the target PCB document first.

Input parameters:

- `file` (string): Optional output JSON file path. Defaults to a temp file.

### `apply_pcb_drc_rules` (~104 tokens)

Apply PCB DRC Rules

Apply a PCB DRC bundle JSON file exported by export_pcb_drc_rules. Synthetic netRules entries with type "differentialPair" are reconciled through EasyEDA differential-pair APIs before regular netRules are overwritten. Open the target PCB document first. First read doc /workdir/node_modules/easyeda-copilot-mcp/docs/SKILL.md

Input parameters:

- `file` (string, required): Path to the edited PCB DRC bundle JSON file.

### `check_pcb_drc` (~77 tokens)

Check PCB DRC

Run EasyEDA PCB DRC check on the currently opened PCB document. Returns simplified DRC violations grouped by category. The limit is split evenly across rule groups within each category to avoid huge responses. Open the target PCB document first.

Input parameters:

- `limit` (number): Maximum number of violations to return per category, split across rule groups.

### `list_easyeda_instances` (~34 tokens)

List EasyEDA Instances

List currently connected EasyEDA Copilot extension instances. Use this when more than one EasyEDA window/project may be open.

### `select_easyeda_instance` (~45 tokens)

Select EasyEDA Instance

Select which connected EasyEDA project this MCP process should use when multiple EasyEDA instances are connected.

Input parameters:

- `instanceId` (string, required): instanceId returned by list_easyeda_instances.

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/biosshot-easyeda-copilot/easyeda-copilot-mcp#diagnostics

## Score history

- 2026-08-11: 83
- 2026-08-10: 82
- 2026-08-09: 81
- 2026-08-08: 79
- 2026-08-07: 75
- 2026-08-06: 75
- 2026-08-05: 75
- 2026-08-04: 46

## Links

- npm package: https://www.npmjs.com/package/easyeda-copilot-mcp
- Socket report: https://socket.dev/npm/package/easyeda-copilot-mcp
- Repository: https://github.com/biosshot/easyeda-copilot
- Changelog RSS feed: https://verifymcp.io/servers/biosshot-easyeda-copilot/easyeda-copilot-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/biosshot-easyeda-copilot/easyeda-copilot-mcp.json
- HTML version of this page: https://verifymcp.io/servers/biosshot-easyeda-copilot/easyeda-copilot-mcp
