# MagicON RF Design Engines

> TX/RX/T-R chains, OTA link, radar, PCB filters, patch antennas, stackup, thermal, PDN, compliance.

- name: io.github.magiccadai/magicon
- version: 1.1.0
- connection class: R0 (autonomous)
- trust: 79/100 flags: no-repository
- quality: 77/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/io.github.magiccadai%2Fmagicon
- tools: https://api.protogrid.dev/v1/servers/io.github.magiccadai%2Fmagicon/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "magicon": {
      "type": "http",
      "url": "https://api.pcbgenerator.com/mcp/"
    }
  }
}
```


## Trust

- hygiene: 80
- liveness: 99
- freshness: 100
- provenance: 45
- drivers: +website +reachable +uptime-99% +updated-12d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 77/100 (good)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 79 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 17 of 17 tools declare readOnlyHint or destructiveHint
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: design_rf_chain (destructiveHint, idempotentHint); design_rf_receiver (destructiveHint, idempotentHint); design_tr_module (destructiveHint, idempotentHint); …
- warn `tools.token_cost`: about 13,439 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 75 (weight 15)

- warn `stability.changes`: 29 tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 17, about 13,439 tokens to load them all
- tool set hash: 3030b94a0276dd2bd634db3bf1c34d52
- tools last changed: 2026-10-18T21:28:29.362Z
- badge: [![protogrid quality](https://protogrid.dev/badge/io.github.magiccadai/magicon.svg)](https://protogrid.dev/servers/io.github.magiccadai/magicon)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-18 `find_components_by_spec` added
  - Find real parts in the validated catalog that meet a spec: a part type, an operating frequency in GHz, and optional limits (noise figure, gain, P1dB, Psat, OIP3, insertion loss). Returns the matching parts, best first on the first limit, each with its headline figures and the datasheet page for each figure where one is on file, as lookup_component_by_mpn gives them. Parts whose record lacks a limited figure are named as not compared, never counted as matches. Pass only figures your user stated; an untraceable one is refused.
- 2026-10-18 `compare_rf_chains` added
  - Multi-objective RF chain comparison: designs the primary chain with the convergent orchestrator, generates alternative chains by swapping components, scores every variant on cost / size / performance, and returns the ranked list with a Pareto frontier — the same engine as the Guided 'Compare Alternatives' panel (POST /api/rf-chain/design-multi). Call with no arguments after a chain design to compare that design.
- 2026-10-18 `lookup_component_by_mpn` changed (description)
  - before: Look up an RF component in the validated catalog by manufacturer part number: the catalog's summary of its headline figures, not the full datasheet. Returns the frequency, power and gain ranges, package, datasheet link, and the headline figures (Psat, P1dB, gain, noise figure, OIP3, insertion and conversion loss), each with its datasheet page where one is on file. Figures the record lacks are listed as not in the record, and internal estimates are named but never given as numbers. It does NOT hold thermal resistance, derating, absolute-maximum ratings, bias, test conditions or footnotes: for those, read the datasheet link. Use this whenever the user names a specific part, so answers come from catalog data rather than recall.
  - after: Look up an RF component in the validated catalog by manufacturer part number: the catalog's summary of its headline figures, not the full datasheet. Returns the frequency, power and gain ranges, package, datasheet link, and the headline figures (Psat, P1dB, gain, noise figure, OIP3, insertion and conversion loss, junction-to-case thermal resistance, maximum junction temperature), each with its datasheet page where one is on file. Figures the record lacks are listed as not in the record, and internal estimates are named but never given as numbers. It does NOT hold derating, absolute-maximum ratings, bias, test conditions or footnotes: for those, read the datasheet link. Use this whenever the user names a specific part, so answers come from catalog data rather than recall.
- 2026-10-18 `run_ota_link` changed (description)
  - before: Compute a one-way over-the-air link budget — EIRP, free-space path loss (Friis), received power, link margin against receiver sensitivity, a closes/marginal/fails verdict, and the maximum range — using the SAME engine behind POST /api/ota-link/compute. Receiver sensitivity is reused from a prior link budget and transmit antenna gain/frequency from a prior antenna design when not given. FREE-SPACE ONLY: excludes rain, terrain, multipath and fading beyond the misc-loss and fade-margin inputs. Distance and misc loss are user assumptions, disclosed on the result.
  - after: Compute a one-way over-the-air link budget — EIRP, free-space path loss (Friis), received power, link margin against receiver sensitivity, a closes/marginal/fails verdict, and the maximum range — using the SAME engine behind POST /api/ota-link/compute. Receiver sensitivity is reused from a prior link budget and transmit antenna gain/frequency from a prior antenna design when not given. FREE-SPACE ONLY: excludes rain, terrain, multipath and fading beyond the misc-loss and fade-margin inputs. Distance and misc loss are user assumptions, disclosed on the result. For the stage-by-stage cascade through one chain's parts (gain, noise figure, OIP3), use run_link_budget instead.
- 2026-10-18 `run_link_budget` changed (description)
  - before: Compute a cascaded RF link budget. For the chain just designed, call with NO arguments — the server derives stages and input power from the design. Pass stages + inputPowerDbm only for a bench/hypothetical chain. Returns per-stage output power, cumulative gain, Friis cascaded NF, gain-referred reciprocal-sum cascaded OIP3, P1dB headroom warnings, and overall risk. Optionally pass bandwidthHz (and requiredSnrDb) to also get the receiver noise floor, MDS, sensitivity, SFDR, and instantaneous dynamic range.
  - after: Compute a cascaded RF link budget. For the chain just designed, call with NO arguments — the server derives stages and input power from the design. Pass stages + inputPowerDbm only for a bench/hypothetical chain. Returns per-stage output power, cumulative gain, Friis cascaded NF, gain-referred reciprocal-sum cascaded OIP3, P1dB headroom warnings, and overall risk. Optionally pass bandwidthHz (and requiredSnrDb) to also get the receiver noise floor, MDS, sensitivity, SFDR, and instantaneous dynamic range. For a link through the air between two antennas (EIRP, path loss, range), use run_ota_link instead.
- 2026-10-18 `design_tr_module` changed (description)
  - before: Design a T/R (transmit/receive) module that shares ONE antenna between a transmitter and a receiver. Designs both chains through the existing engines, selects the shared front end (a T/R switch, or a circulator with a receive-path limiter), and returns four safety budgets: TX-to-RX isolation against the receiver's damage limit, the receive window left after switching and limiter recovery (with the blind range: the closest echo the receiver can hear), limiter leakage driving the LNA into compression, and transmit power against each part's survivability rating. Pass frequencyGhz and targetOutputPowerDbm to design one; pass txPeakPowerDbm and isolationDb only to check a front end the user already described with their own numbers.
  - after: Design a T/R (transmit/receive) module that shares ONE antenna between a transmitter and a receiver. Designs both chains through the existing engines, selects the shared front end (a T/R switch, or a circulator with a receive-path limiter), and returns four safety budgets: TX-to-RX isolation against the receiver's damage limit, the receive window left after switching and limiter recovery (with the blind range: the closest echo the receiver can hear), limiter leakage driving the LNA into compression, and transmit power against each part's survivability rating. Pass frequencyGhz and targetOutputPowerDbm to design one; pass txPeakPowerDbm and isolationDb only to check a front end the user already described with their own numbers. For a transmitter alone, use design_rf_chain instead. For a receiver alone, use design_rf_receiver instead.
- 2026-10-18 `design_rf_receiver` changed (description, inputSchema)
  - before: Design or analyse a superheterodyne RECEIVER. Selects catalog parts for each slot (limiter, LNA, image filter, mixer, LO, IF filter, IF amp, step attenuator) and returns the frequency plan (image, half-IF, LO leakage), the cascaded noise figure, noise floor, MDS, sensitivity, SFDR and dynamic range, plus the ADC interface (sample rate, Nyquist zone, ENOB, jitter limit). Pass rfFrequencyHz to design one; pass stages[] only for a bench receiver the user described with their own numbers.
  - after: Design or analyse a superheterodyne RECEIVER. Selects catalog parts for each slot (limiter, LNA, image filter, mixer, LO, IF filter, IF amp, step attenuator) and returns the frequency plan (image, half-IF, LO leakage), the cascaded noise figure, noise floor, MDS, sensitivity, SFDR and dynamic range, plus the ADC interface (sample rate, Nyquist zone, ENOB, jitter limit). Pass rfFrequencyHz to design one; pass stages[] only for a bench receiver the user described with their own numbers. For a transmitter, use design_rf_chain instead. For a module that shares one antenna between transmit and receive, use design_tr_module instead.
- 2026-10-18 `design_rf_chain` changed (description, inputSchema)
  - before: Design a complete RF transmitter chain with the convergent orchestrator: selects the driver, PA, filter, and connector (the signal source is the user's input power by default — no VCO unless one is explicitly the generator), matches drive power between stages, inserts a pre-driver or attenuator when needed to reach the target output power, and returns the BOM plus a convergence summary (achieved vs target output). When the BOM's pricingCoverage is 'partial', total_usd is a subtotal of pricedLines of totalLines parts: never call it the total, and state no figure for the unpriced parts.
  - after: Design a complete RF transmitter chain with the convergent orchestrator: selects the driver, PA, filter, and connector (the signal source is the user's input power by default — no VCO unless one is explicitly the generator), matches drive power between stages, inserts a pre-driver or attenuator when needed to reach the target output power, and returns the BOM plus a convergence summary (achieved vs target output). When the BOM's pricingCoverage is 'partial', total_usd is a subtotal of pricedLines of totalLines parts: never call it the total, and state no figure for the unpriced parts. For a receiver, use design_rf_receiver instead. For a module that shares one antenna between transmit and receive, use design_tr_module instead.
- 2026-10-18 `lookup_component_by_mpn` changed (description)
  - before: Look up an RF component in the validated catalog by manufacturer part number: what its datasheet says, as our record states it. Returns the frequency, power and gain ranges, package, datasheet link, and the headline figures (Psat, P1dB, gain, noise figure, OIP3, insertion and conversion loss), each with its datasheet page where one is on file. Figures the record lacks are listed as not in the record, and internal estimates are named but never given as numbers. Use this whenever the user names a specific part, so answers come from catalog data rather than recall.
  - after: Look up an RF component in the validated catalog by manufacturer part number: the catalog's summary of its headline figures, not the full datasheet. Returns the frequency, power and gain ranges, package, datasheet link, and the headline figures (Psat, P1dB, gain, noise figure, OIP3, insertion and conversion loss), each with its datasheet page where one is on file. Figures the record lacks are listed as not in the record, and internal estimates are named but never given as numbers. It does NOT hold thermal resistance, derating, absolute-maximum ratings, bias, test conditions or footnotes: for those, read the datasheet link. Use this whenever the user names a specific part, so answers come from catalog data rather than recall.
- 2026-10-15 `lookup_component_by_mpn` added
  - Look up an RF component in the validated catalog by manufacturer part number: what its datasheet says, as our record states it. Returns the frequency, power and gain ranges, package, datasheet link, and the headline figures (Psat, P1dB, gain, noise figure, OIP3, insertion and conversion loss), each with its datasheet page where one is on file. Figures the record lacks are listed as not in the record, and internal estimates are named but never given as numbers. Use this whenever the user names a specific part, so answers come from catalog data rather than recall.

Full history: https://api.protogrid.dev/v1/servers/io.github.magiccadai%2Fmagicon/changes

## Remotes

- https://api.pcbgenerator.com/mcp/ (streamable-http, auth none, reachable true, uptime30d 0.98630136)

## Packages

_none_

## Tools (17)

- `check_grounding`: Check a draft passage against the engine results computed in THIS session. It returns every figure no engine produced, and every claim it checks that the results do not support or contradict (for example a solver score called a loss), each in `findings` with the reason. Run it before publishing or handing over a report, fabrication sheet, BOM summary or any other figure-bearing deliverable built from these tools. It computes nothing and adds no evidence — it only reports what the results back. Fix each finding the way its `why` says: quote the engine's own value, call the tool that computes it, correct the wording, or say plainly in the text that the figure is not from a tool.
- `compare_rf_chains`: Multi-objective RF chain comparison: designs the primary chain with the convergent orchestrator, generates alternative chains by swapping components, scores every variant on cost / size / performance, and returns the ranked list with a Pareto frontier — the same engine as the Guided 'Compare Alternatives' panel (POST /api/rf-chain/design-multi). Call with no arguments after a chain design to compare that design.
- `design_patch_antenna`: Design a rectangular microstrip patch antenna (and, when both nx and ny are given, a uniform planar array of it) using the Balanis cavity/transmission-line + array-factor model — the SAME engine behind POST /api/antenna/patch/design and the Guided Phase IV antenna panel. The substrate (dk/df/h) derives from the latest solved stackup's outer prepreg dielectric unless dk/df/h_mm are given explicitly. Returns patch dimensions, resonance/bandwidth/gain, and (for an array) beamwidths, pattern cuts, and a grating-lobe check. The designed gain auto-applies to the chain's antennaGainDbi (compliance/SAR) unless apply_gain=false.
- `design_rf_chain`: Design a complete RF transmitter chain with the convergent orchestrator: selects the driver, PA, filter, and connector (the signal source is the user's input power by default — no VCO unless one is explicitly the generator), matches drive power between stages, inserts a pre-driver or attenuator when needed to reach the target output power, and returns the BOM plus a convergence summary (achieved vs target output). When the BOM's pricingCoverage is 'partial', total_usd is a subtotal of pricedLines of totalLines parts: never call it the total, and state no figure for the unpriced parts. For a receiver, use design_rf_receiver instead. For a module that shares one antenna between transmit and receive, use design_tr_module instead.
- `design_rf_receiver`: Design or analyse a superheterodyne RECEIVER. Selects catalog parts for each slot (limiter, LNA, image filter, mixer, LO, IF filter, IF amp, step attenuator) and returns the frequency plan (image, half-IF, LO leakage), the cascaded noise figure, noise floor, MDS, sensitivity, SFDR and dynamic range, plus the ADC interface (sample rate, Nyquist zone, ENOB, jitter limit). Pass rfFrequencyHz to design one; pass stages[] only for a bench receiver the user described with their own numbers. For a transmitter, use design_rf_chain instead. For a module that shares one antenna between transmit and receive, use design_tr_module instead.
- `design_tr_module`: Design a T/R (transmit/receive) module that shares ONE antenna between a transmitter and a receiver. Designs both chains through the existing engines, selects the shared front end (a T/R switch, or a circulator with a receive-path limiter), and returns four safety budgets: TX-to-RX isolation against the receiver's damage limit, the receive window left after switching and limiter recovery (with the blind range: the closest echo the receiver can hear), limiter leakage driving the LNA into compression, and transmit power against each part's survivability rating. Pass frequencyGhz and targetOutputPowerDbm to design one; pass txPeakPowerDbm and isolationDb only to check a front end the user already described with their own numbers. For a transmitter alone, use design_rf_chain instead. For a receiver alone, use design_rf_receiver instead.
- `find_components_by_spec`: Find real parts in the validated catalog that meet a spec: a part type, an operating frequency in GHz, and optional limits (noise figure, gain, P1dB, Psat, OIP3, insertion loss). Returns the matching parts, best first on the first limit, each with its headline figures and the datasheet page for each figure where one is on file, as lookup_component_by_mpn gives them. Parts whose record lacks a limited figure are named as not compared, never counted as matches. Pass only figures your user stated; an untraceable one is refused.
- `lookup_component_by_mpn`: Look up an RF component in the validated catalog by manufacturer part number: the catalog's summary of its headline figures, not the full datasheet. Returns the frequency, power and gain ranges, package, datasheet link, and the headline figures (Psat, P1dB, gain, noise figure, OIP3, insertion and conversion loss, junction-to-case thermal resistance, maximum junction temperature), each with its datasheet page where one is on file. Figures the record lacks are listed as not in the record, and internal estimates are named but never given as numbers. It does NOT hold derating, absolute-maximum ratings, bias, test conditions or footnotes: for those, read the datasheet link. Use this whenever the user names a specific part, so answers come from catalog data rather than recall.
- `run_compliance_analysis`: Audit the solved stackup against PCB standards (IPC-2221, IPC-6012, IPC-4101, MIL, UL-94, RoHS, REACH): per-rule pass/fail with severities and remediation. Reuses the engine behind POST /api/compliance/check. Layers are derived from the solved stackup and standards default to IPC-2221 + IPC-6012 Class 2 — call with no arguments once a stackup exists.
- `run_glass_weave_analysis`: Recommend PCB glass-weave (fiber-weave) styles for the current design: ranks catalogued styles by impedance variation and cost for the design frequency and marks the cheapest one meeting the impedance tolerance. Reuses the Phase-24 engine behind POST /api/glass-weave/recommend. Frequency is derived from the solved stackup / RF specs; tolerance and trace width default to stated assumptions — call with no arguments once a design exists.
- `run_link_budget`: Compute a cascaded RF link budget. For the chain just designed, call with NO arguments — the server derives stages and input power from the design. Pass stages + inputPowerDbm only for a bench/hypothetical chain. Returns per-stage output power, cumulative gain, Friis cascaded NF, gain-referred reciprocal-sum cascaded OIP3, P1dB headroom warnings, and overall risk. Optionally pass bandwidthHz (and requiredSnrDb) to also get the receiver noise floor, MDS, sensitivity, SFDR, and instantaneous dynamic range. For a link through the air between two antennas (EIRP, path loss, range), use run_ota_link instead.
- `run_ota_link`: Compute a one-way over-the-air link budget — EIRP, free-space path loss (Friis), received power, link margin against receiver sensitivity, a closes/marginal/fails verdict, and the maximum range — using the SAME engine behind POST /api/ota-link/compute. Receiver sensitivity is reused from a prior link budget and transmit antenna gain/frequency from a prior antenna design when not given. FREE-SPACE ONLY: excludes rain, terrain, multipath and fading beyond the misc-loss and fade-margin inputs. Distance and misc loss are user assumptions, disclosed on the result. For the stage-by-stage cascade through one chain's parts (gain, noise figure, OIP3), use run_link_budget instead.
- `run_pdn_analysis`: Run a PDN (power delivery network) impedance analysis: interplanar plane-pair capacitance, multi-cap decoupling impedance vs. target impedance, violations, and recommended decoupling caps. Reuses the Phase-25 engine behind POST /api/pdn/analyze. Inputs are derived server-side from the solved stackup, the BOM's PDN passives, and the power-tree rail — call with no arguments once a design exists.
- `run_planar_filter`: Synthesize a passive planar (copper-on-PCB) filter from analytical formulas: stepped-impedance / open-stub low-pass, or parallel-coupled / hairpin band-pass, Chebyshev or Butterworth. Returns per-section line impedances (Z0e/Z0o for coupled sections), width/spacing, quarter-wave lengths, the total occupied board area, a copper footprint, passband markers, a simulated S21/S11 frequency response (response_curve) with modeled insertion loss / return loss / 3-dB bandwidth (response_summary), and accuracy warnings. Reuses the engine behind POST /api/planar-filter/compute (SSOT). Use it to replace a purchased SMT filter with board copper. Interdigital/combline are not implemented.
- `run_radar_performance`: Compute radar performance — the monostatic range equation (received power, SNR vs range, maximum detection range, coherent/non-coherent integration gain) and pulsed-waveform relations (duty cycle, unambiguous range/velocity, range resolution, blind speeds) — using the SAME engine behind POST /api/radar/performance. Antenna gain enters as a dBi number; the detection floor is reused from a prior link budget's MDS when not given. RCS, target range, and system loss are user assumptions, disclosed on the result.
- `run_stackup_solver`: Run the impedance-aware stackup constraint solver to find optimal PCB configurations. Use when the user wants ranked material/thickness/copper solutions for a given layer count and frequency. Returns scored and ranked feasible stackups. Each solution's prepreg_thickness_mm is ONE prepreg layer: prepreg_sheets (1-3) x prepreg_sheet_thickness_mm (maker's table). Per-layer numbers do NOT sum to total_thickness_mm — the total uses the pressed thickness, 0.04064 mm thinner per layer. Report both as returned; never 'correct' one to match the other.
- `run_thermal_analysis`: Run a full PCB thermal analysis: via array Rth, junction-to-ambient stack, Kennedy spreading, Coffin-Manson barrel stress, Timoshenko warpage, and resin-flow estimation. Mirrors POST /api/stackups/{id}/thermal-analysis. Call with no arguments once a design exists: the server takes power_w from the designed chain's dissipated power and defaults ambient_c to 25 C. The result carries `recommendations` (thermal vias, copper, plating) — answer adjustment questions from those entries. If the user states a heatsink or airframe spreader, pass `heatsink` (θcs, θsa and mount, all three as stated — never guessed); Tj is then computed through it instead of still-air convection.
