eda-agent (salitronic/eda-agent) is an MCP server listed on the M8ven Trust Index. It scores 60 out of 100, grade C. It declares 783 tools. No publisher has claimed this listing.

C
Caution
60/100

eda-agent

Open-source MCP server that lets an AI drive a live session of Altium Designer, and optionally KiCad or EasyEDA Pro, editing the open design in place while you watch. 300+ tools: schematic, PCB, library and project automation, design review, audits, rendering, auto-placement, panelization, autonomous design-plan executor. Apache-2.0.

Caution. Specific findings reduced this grade. They are listed on the page. Grades reflect the full trust pyramid: code, verification depth, and reputation. New projects cap at C until adoption is earned.

How we verified

⚡ Live Monitored: not connected

Verified is a snapshot. Live keeps it current, and builds your track record.

⚡ Connect GitHub → continuous verification on every pushwhy connect →

Who stands behind it

salitronic

Source: github_topic · also listed on github_repo_search

Is this your MCP?

Claim it to get a verified publisher badge, a free copy of our full audit findings, and direct contact for any high-priority issues we find. Or connect your repo for our deepest verification, Live Monitored: read-only, revoke anytime. What we access →

Install from

The grade above is for the source repository. Registries can serve a different version, so we mark the ones we were not able to read.

// key findings
⚠️
Tool descriptions don’t match what handlers do
2 tools describe read intent but their handlers mutate — design_snapshot_inventory (line 434: cache_path.write_text(); design_visual_review (line 358: svg_target.write_text(svg, encoding="utf-8"))
No credential exfiltration, no sensitive file access, no obfuscation
Static analysis found nothing flowing your secrets to unexpected places.
Open source with a license and README
Anyone can audit the code, the license is declared, and the publisher documents what it does.
// tools this server exposes773 tools

These names and descriptions are the publisher's own, read from the source code. We print them as written. Our assessment is the findings above, not this list.

tool_catalog

Discover tools by category / maturity / interaction without loading every schema.

tool_invoke

Invoke any registered tool by name: the companion to `tool_catalog`.

app_get_status

Check if Altium Designer is running and get status information.

app_context

Where you are, in one call. Run this before anything else.

app_attach

Connect to a running Altium Designer instance.

app_save_all

Flush every dirty Altium document to disk.

app_exit_active_command

Close a transaction a crashed handler left open in Altium.

app_checkpoint

Snapshot the focused project so the session is revertible.

app_list_checkpoints

List saved checkpoints for the current workspace, newest first.

app_restore_checkpoint

Restore the focused project's files from a checkpoint.

app_detach

Stop the Altium MCP polling loop. CALL THIS WHEN YOU'RE FINISHED.

app_ping

Test if the Altium script is responding and report script version.

app_get_report

Report the health of the MCP bridge, workspace, and Altium link.

app_create_document

Create a new blank document of a given kind and save it to disk.

app_list_documents

List all documents known to the current Altium workspace.

app_diag_workspace

Diagnostic: enumerate workspace files via Altium's FindFiles helper.

app_get_active_document

Get information about the currently active (focused) document.

app_set_active_document

Set a specific document as the active (focused) document.

app_get_version

Get the version of Altium Designer.

app_get_preferences

Get key Altium Designer preferences.

app_run_menu

Dispatch a menu command by path. DISPATCH IS NOT EXECUTION.

app_set_intent

Tell the dashboard what high-level task the agent is working on.

app_get_clipboard

Get text content from the Windows clipboard.

audit_find_inconsistent_track_widths

Find nets where the maximum and minimum track widths differ by more than 2×.

audit_find_acute_angles

Find pairs of same-net tracks meeting at < 90° interior angle.

audit_find_placeholder_values

Find SCH component parameters containing obvious "I'll fix this later" placeholder strings that escaped a release.

audit_find_orphan_power_objects

Find schematic power-port markers (GND, VCC, +3V3 etc.) sitting off-wire.

audit_find_orphan_net_labels

Find schematic net labels whose location is NOT on any wire or bus.

audit_find_net_label_conflicts

Find net labels that silently merge, short, or do nothing.

audit_find_visible_supplier_pn

Find schematic components with a VISIBLE supplier-PN parameter.

audit_find_unlocked_component_primitives

Find placed components whose internal primitives are NOT locked. Unlocked primitives are a silent fab-bug class -- a stray click + drag in the PCB editor moves a single pad off-center within the footprint without any warning. The gerbers look fine, just slightly off, and the part doesn't solder prop

audit_find_mirrored_pcb_text

Find free-floating PCB text (eTextObject) that's mirrored on the wrong overlay.

audit_find_mixed_designator_rotation

Find PCB silkscreens where designators face BOTH 0 and 180 (or both 90 and 270) -- the assembly-readability check.

audit_find_non_embedded_images

Find schematic images that are NOT embedded -- they hold only a path reference to the original file.

audit_find_single_pin_nets

Find nets that have EXACTLY ONE pin AND at least one net-label / port / power-object on them.

audit_find_mpn_inconsistencies

Find groups of ICs with the same (lib_ref, comment) but DIFFERENT Manufacturer Part Numbers.

audit_find_missing_datasheets

Find ICs (designator U*) with no fetchable datasheet URL in any of their parameters.

audit_find_pin_net_name_mismatches

Find IC pins whose NAME looks like a power / ground pin but whose connected NET is not actually a power / ground rail.

audit_find_missing_decoupling

Find ICs whose power pins lack a nearby decoupling cap.

audit_find_unconnected_ic_pins

Find IC pins with an empty / unset net (excluding pins intentionally named NC / DNC / RSVD / RESERVED).

audit_component_param_visibility

Check that every placed component shows the parameters its class requires for a legible schematic and a procurable BOM.

audit_power_port_orientation

Check that schematic power-symbol orientations follow the standard convention so reviewers' eyes can scan the sheet quickly.

audit_tented_via_ratio

Count tented vs untented via SURFACES on the active board and report the tented ratio.

audit_find_floating_ports

Find schematic ports that aren't actually connected to anything.

audit_find_bad_connections

Find PCB tracks / arcs with endpoints that are close to another same-net primitive but don't actually touch.

audit_find_signal_vias_without_return

Find signal vias that have no nearby ground / power via for return-current flow.

audit_find_pads_near_board_edge

Find PCB pads / vias closer than ``clearance_mils`` to the board outline (depaneling damage hazard).

audit_find_components_outside_board_outline

Find PCB components whose origin sits outside the board outline.

audit_find_off_grid_components

Find schematic components placed off the snap grid.

audit_find_removed_pad_shapes

Find pads / vias whose copper annular ring has been removed on layers where it's still needed.

audit_find_designator_collisions

Find schematic components that share a designator across sheets.

audit_find_via_antennas

Find vias connected on only one layer (resonating stubs).

audit_find_unmatched_ports

Find schematic nets with port-direction mismatches across sheets.

audit_variant_not_fitted

List components marked Not Fitted in the project's CURRENT variant.

audit_find_invalid_regions

Find PCB polygon regions whose area is zero or unset.

pcb_calc_impedance

Characteristic impedance of a PCB trace (IPC-2141 / Wadell).

pcb_calc_trace_width_for_impedance

Trace width (mils) to hit a target impedance for a geometry (microstrip / stripline / their *_diff variants). Differential targets need spacing_mils. Inverse of the IPC-2141 impedance formula.

pcb_calc_termination

Assess whether a net is electrically long for its edge rate and, if so, recommend a termination (series for point-to-point, Thevenin / parallel for a multi-load bus) with E24 values.

pcb_calc_length_match

Resolve the effective Er and a match tolerance from a skew budget (or match_fraction * rise_time_ns), then optionally report a group of net lengths against it.

pcb_calc_thermal_vias

Size a thermal-via field for a target thermal resistance (given directly, or as power_w with a delta_t_c budget), or score an existing via_count. Fourier conduction, R = L/(k*A).

pcb_calc_trace_width_for_current

Minimum track width (mils) to carry a current at a temperature rise (IPC-2221), widened by ``margin`` and snapped to a 0.1 mil grid.

pcb_calc_track_current_capacity

Forward IPC-2221: the current a track of this width sustains at a given temperature rise.

design_get_discipline

Read the design discipline + DesignPlan JSON schema.

design_session_start

Open a durable design-session journal for an autonomous run.

design_session_log

Append one event to a design-session journal.

design_session_status

Read a design session's derived state (stage map, artifacts, ...).

design_session_resume

Resume a design run: state plus a plain-language next-action hint.

design_next_action

Decide the single next action for an autonomous design run.

design_autonomy_guide

The autonomous spec-to-board loop protocol, in one call.

design_job_start

Start a long engine run as a background job; returns its id.

design_job_status

Status of a background job (or all jobs if ``job_id`` is blank).

design_job_result

Fetch a finished job's result payload (None until it's done).

design_snapshot_inventory

Open a list of SchLib files and return what components live in them.

design_validate_plan

Validate a candidate DesignPlan JSON against the schema + cross-check.

design_list_circuit_blocks

List the canonical circuit blocks and their parameter contracts.

design_add_circuit_block

Fold a canonical circuit block into a DesignPlan in one call.

design_add_part

Add one part and wire its pins to named nets, in one call.

design_connect_bus

Wire a parallel bus across two+ parts in one call.

design_compose_netlist

Apply many authoring operations to a plan in ONE call.

design_generate_bom

Derive the bill of materials from a plan's parts in one call.

design_edit_plan

Edit an existing plan -- the MODIFY complement to the add tools.

design_compute_component_value

Compute a manufacturable component value, snapped to an E-series.

design_describe_circuits

Report the electrical behaviour of each recognised sub-circuit.

design_suggest_diff_pair_traces

Recommend a controlled-impedance trace width for every differential pair in a plan.

design_review_file

Offline FALLBACK review of a .SchDoc/.PrjPcb: OFF by default.

design_solve_netlist_file

Reconstruct a .SchDoc's netlist geometrically: OFF by default.

design_bom_file

Consolidated BOM from a .SchDoc/.PrjPcb on disk: OFF by default.

design_review_plan

One-call offline pre-flight: bundle every plan-level analysis.

design_layout_schematic

Compute a full schematic layout for a DesignPlan, as pure data.

design_suggest_partition

Suggest how to split a design into balanced functional groups.

design_execute_plan

Instantiate a DesignPlan in Altium.

design_learn_from_layout

Capture your placement edits as training data.

design_preview_plan

Render a DesignPlan to SVG without emitting to Altium.

design_audit_schematic

Structured visual/layout audit of the active schematic.

design_validate

ERC + connectivity sanity report on the focused project.

design_validate_requirement

Validate a structured DesignRequirement before planning starts.

design_load_fab_profile

Validate a fab capability profile and echo the normalized form.

design_synthesize_rules

Synthesize PCB design rules + stackup ops from a fab profile.

design_plan_hierarchy

Propose a multi-sheet hierarchy for a dense DesignPlan.

design_apply_hierarchy

Rewrite a DesignPlan onto the sheets a hierarchy proposes.

673 further tools are not listed here. The complete surface is in the source.

// environment variables
To run this server yourself, you supply these values. They go in your own MCP client configuration and stay on your machine. The secret label means the value is sensitive, not that the server mishandles it.
configEDA_EXPORT_TIMEOUT_MS
configEDA_HANDLER_TIMEOUT_MS
configEDA_AGENT_BACKENDThe server picks a backend at startup (, default altium), so one install drives any of them. See [EDA backends](#eda-backends).
configEDA_AGENT_TOOLSETregisters several hundred. Set =minimal (or pass
config_EDA_AGENT_BACKEND_REEXEC
configEDA_SWEEP_OUT
configEDA_SWEEP_WAIT
configEDA_SWEEP_SECOND_TAB_GRACE
configEDA_SWEEP_TRY_OPEN
configEDA_SWEEP_TAB_WAIT
configEDA_SMOKE_WAIT
configEDA_SMOKE_TAB_WAIT
configEDA_SMOKE_NEW
configEDA_AGENT_PLACEMENT_LOG
configEDA_AGENT_PREFERENCES_LOG
configEDA_AGENT_ASSUME_YES
configPYTEST_CURRENT_TEST
configEDA_AGENT_WORKSPACEOverride: set environment variable
configEDA_AGENT_EASYEDA_HOST
configEDA_AGENT_EASYEDA_PORT
configEDA_AGENT_EASYEDA_VERIFIED
configEDA_AGENT_PRIORS
configEDA_AGENT_QUALITY_MODEL
configEDA_AGENT_ALTIUM_PROCESS
// quality suggestions

Tool annotations

No tools have read-only/destructive annotations

Add readOnlyHint or destructiveHint annotations to every tool so hosts can warn users before invoking.

All four hints declared on every tool

783/783 tools missing one or more hints — tool_catalog (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint); tool_invoke (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint); app_get_status (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint), +780 more. OpenAI's directory rejects tools where any of the four hints are missing or non-boolean.

For every tool, set all four hints (readOnlyHint, destructiveHint, idempotentHint, openWorldHint) to explicit true/false values that match the handler’s actual behaviour.

Destructive tools are labelled

4 tools perform destructive updates without destructiveHint — app_set_intent deletes at line 989 (path.unlink()); kicad_get_fab_stats deletes at line 506 (os.remove(out)); kicad_run_spice deletes at line 1137 (os.remove(cir))

Add destructiveHint:true to any tool whose handler calls .delete(), .upsert(), .update(), unlink, rm, DELETE, DROP, REPLACE INTO, or any operation that overwrites existing data.

Descriptions match behaviour

2 tools describe read intent but their handlers mutate — design_snapshot_inventory (line 434: cache_path.write_text(); design_visual_review (line 358: svg_target.write_text(svg, encoding="utf-8"))

Rename the tool, rewrite the description, or move the side-effect into a separate clearly-named tool.

Tool test coverage

506/783 tools referenced in tests (65%)

Write tests that reference each tool by name so every tool has at least one test.

Tool description accuracy

design_snapshot_inventory: description implies read-only but handler writes/deletes/executes; design_visual_review: description implies read-only but handler writes/deletes/executes

Update tool descriptions to accurately reflect all capabilities — especially write, delete, or execute operations.

Claim the listing to review these findings one by one and send us a correction where you disagree, straight to the team. Claiming also means we tell you when the grade moves, and reach you first if we find anything urgent.

// full audit trail
The findings above are the summary. The full trail, every check we ran, each deduction, the network hosts observed and the dependency advisories, goes to verified publishers, along with an alert whenever a new one lands. Verified publishers can also review each finding and dispute it in one click. Publisher corrections have sharpened several of our checks this month, because the maintainer knows the codebase better than any scanner.
// improvement guidance — verified publishers only
We have 6 concrete improvements we can share with the publisher of this MCP. Each comes with specific guidance to raise the trust score.
// embed badge in your README
[![M8ven Verified](https://m8ven.ai/badge/mcp/salitronic/eda-agent?variant=verified)](https://m8ven.ai/mcp/salitronic/eda-agent)
Shows verification status without the grade. Want the grade badge instead? Remove ?variant=verified from the URL.
commit: 1b60105cbe0c4bd557007b87bc04dda2fd4ef9a1
code hash: 2758fa417ef2842c2d4f36e8461bc67cd1223bacc9c19c8af2b2776feb086ce4
view raw JSON →
Check MCPs from inside your assistant
Tool Check · MCP

Vetting this one by hand? Tool Check is an MCP that scores other MCPs. Add it once and ask Claude, ChatGPT, or any MCP client to grade a server, surface CVEs, check the publisher, and suggest safer alternatives — before you install.

https://m8ven.ai/api/mcp/tool-check
check_toolsearch_toolscompare_toolsrecommend_alternativescheck_publisherreport_concern
How to add it →Free · no account needed · works in any MCP client