MagicON RF Design Engines
REMOTE · API.PCBGENERATOR.COM
TX/RX/T-R chains, OTA link, radar, PCB filters, patch antennas, stackup, thermal, PDN, compliance.
Available components
Last scanned (17 hours ago)
Scores higher than 84% of remote servers
Reachable. Last reached 4 Nov 2026.
Category IoT and Hardware
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security74
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- No authorisation is required to call this server. Every tool declares its destructiveHint and none is destructive, so open access doesn't expose one. See how to fix → View diagnostics → Partial
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- HSTS check failed: the Strict-Transport-Security header is absent. See how to fix → View diagnostics → Fail
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability57
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 10945 tokens (~643/item across 17 items; 17 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management97
- Stability observed for 29 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 17 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 18 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 4 Nov 26 −1
- Stability: pass → 0.97 functional
- 3 Nov 26 0
- “run_stackup_solver” reworded the description of “allowed_inner_core_materials” cosmetic
- “run_stackup_solver” reworded the description of “construction” cosmetic
2 cosmetic changes on this day. Switch on “Show cosmetic changes” to see them.
- 31 Oct 26 +1
- Stability: 0.97 → pass security
- 29 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.
- 27 Oct 26 +1
- Tool “compare_rf_chains” rewrote its description, which is the text the model reads security
- Tool “find_components_by_spec” rewrote its description, which is the text the model reads security
- “find_components_by_spec” added an optional parameter “max_operating_temp_c” cosmetic
- “find_components_by_spec” added an optional parameter “min_operating_temp_c” cosmetic
- “find_components_by_spec” added an optional parameter “temperature_grade” cosmetic
- “compare_rf_chains” reworded the description of “weights” cosmetic
- “design_rf_receiver” reworded the description of “main_board_input_voltage” cosmetic
- “find_components_by_spec” reworded the description of “category” cosmetic
- “find_components_by_spec” reworded the description of “frequency_ghz” cosmetic
- “run_stackup_solver” reworded the description of “allowed_core_materials” cosmetic
- “run_stackup_solver” reworded the description of “allowed_prepreg_materials” cosmetic
- “run_stackup_solver” reworded the description of “construction” cosmetic
- 26 Oct 26 0
- Tool “run_link_budget” rewrote its description, which is the text the model reads security
- Tool “run_thermal_analysis” rewrote its description, which is the text the model reads security
- 24 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 73 to 77. That category is still filling its 30-day observation window: 22 days of observed history at the previous scan, 23 at this one. The score rises as the window fills, whether or not the server changes.
- 23 Oct 26 0
- “design_rf_chain” reworded the description of “board_mount_only” cosmetic
1 cosmetic change on this day. Switch on “Show cosmetic changes” to see it.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 4 Nov 2026 · Probed https://api.pcbgenerator.com/mcp/
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=api.pcbgenerator.com | CN=WE1,O=Google Trust Services,C=US | 8 Sept 2026 | 7 Dec 2026 | ECDSA 256 | ECDSA-SHA256 | 511f37c4de6d9fc50e566bc96edd857b |
| SANs: api.pcbgenerator.com | ||||||
| CN=WE1,O=Google Trust Services,C=US (CA) | CN=GTS Root R4,O=Google Trust Services LLC,C=US | 13 Dec 2023 | 20 Feb 2029 | ECDSA 256 | ECDSA-SHA384 | 7ff31977972c224a76155d13b6d685e3 |
| CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) | CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE | 15 Nov 2023 | 28 Jan 2028 | ECDSA 384 | SHA256-RSA | 7fe530bf331343bedd821610493d8a1b |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of api.pcbgenerator.com. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| com. | present | 19718 | 13 | Verified |
| pcbgenerator.com. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication No authorisation required
The endpoint answered without asking for a token. Anyone who knows the URL can reach it.
| Result | No authorisation required |
|---|---|
| HTTP status | 200 |
| Header | Value |
|---|---|
| content-security-policy | default-src 'self'; script-src 'self' https://www.googletagmanager.com; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; connect-src 'self' https:; font-src 'self' https:; frame-src 'none'; |
| x-content-type-options | nosniff |
| x-frame-options | DENY |
| referrer-policy | strict-origin-when-cross-origin |
| permissions-policy | camera=(), microphone=(), geolocation=(), payment=() |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://api.pcbgenerator.com/mcp/ | Verified | 400 | |
| http (plaintext) | http://api.pcbgenerator.com/mcp/ | HTTPS enforced | 301 | https://api.pcbgenerator.com/mcp/ |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
check_grounding Check a draft against engine results ~194
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.
| Name | Type | Req | Description |
|---|---|---|---|
| text | string | yes | The draft passage to check, verbatim. Pass the prose the end user will actually read — including tables and captions, since a figure in a table is a figure. Markdown is fine. |
No output schema declared.
No examples provided.
compare_rf_chains Compare transmit chain alternatives ~276
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 / DC power, 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.
| Name | Type | Req | Description |
|---|---|---|---|
| application | string | – | Application context (e.g. satcom_c_band, wifi_wlan). Derived from the frequency band when omitted. |
| frequency | number | – | Operating frequency in GHz. Omit to reuse the conversation's designed chain. |
| max_chains | number | – | Max variants to return (1-20, default 8). |
| target_output_power | number | – | Target output power in dBm. Omit to reuse the conversation's designed chain. |
| user_request | string | – | The end user's own words that prompted this call, verbatim. Used to verify that the figures you pass were stated by your user rather than inferred. Omit it and the results will be labelled caller-ass… |
| weights | object | – | Objective weights {cost, size, performance, power}, each 0-1; normalized to sum 1.0. Defaults to balanced. |
No output schema declared.
No examples provided.
design_patch_antenna Design a patch antenna or array ~522
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.
| Name | Type | Req | Description |
|---|---|---|---|
| apply_gain | boolean | – | Auto-apply the designed gain to the chain's antennaGainDbi. Default true. |
| df | number | – | Manual substrate loss tangent override. |
| dk | number | – | Manual substrate dielectric constant override. |
| frequency_ghz | number | yes | Target resonant frequency f0 (GHz). Required. |
| h_mm | number | – | Manual substrate height (mm) override. |
| material | string | – | Substrate material NAME the user gave (e.g. 'FR4', 'FR408', 'RO4350B'). The server resolves Dk/Df — the catalog for a branded grade, a nominal value for generic 'FR4' — and assumes a standard thickne… |
| nx | integer | – | Array elements along x (width). Requires ny. |
| ny | integer | – | Array elements along y (length). Requires nx. |
| spacing_lambda | number | – | Array element spacing as a fraction of lambda0 (default 0.5). |
| spacing_x_mm | number | – | Explicit x-axis element spacing (mm); wins over spacing_lambda. |
| spacing_y_mm | number | – | Explicit y-axis element spacing (mm); wins over spacing_lambda. |
| steer_phi_deg | number | – | Beam-steer azimuth angle (deg), default 0. |
| steer_theta_deg | number | – | Beam-steer elevation angle (deg), default 0. |
| user_request | string | – | The end user's own words that prompted this call, verbatim. Used to verify that the figures you pass were stated by your user rather than inferred. Omit it and the results will be labelled caller-ass… |
No output schema declared.
No examples provided.
design_rf_chain Design a transmit chain ~1,395
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.
| Name | Type | Req | Description |
|---|---|---|---|
| antenna_gain_dbi | number | – | Antenna gain in dBi. Set it when the user states their antenna so an EU/ETSI design can enforce the e.i.r.p. limit at the real gain (conducted ceiling = e.i.r.p. limit − antenna gain); without it the… |
| application | string | – | Application context (e.g. satcom_c_band, 5g_cellular, wifi_wlan). Defaults to 'general'. For a drone, send the most specific link the user names: drones_digital_video (digital/OFDM video: the PA is j… |
| bandwidth | number | – | Signal bandwidth in MHz (optional). |
| board_mount_only | boolean | – | true ONLY when the user asks for board-mount (surface-mount) parts only. The PA, driver, predriver and the isolator after the PA then skip parts whose record says drop-in, flange, die or cable; if no… |
| digital_modulation | boolean | – | Drone control/telemetry only: true WHEN THE USER STATES the link uses digital modulation (FCC 15.247(b)(3)), which lifts the 24 dBm ceiling to 30 dBm. Never guess it. |
| frequency | number | yes | Operating frequency in GHz (scalar). |
| harmonic_2nd_dbc | number | – | The 2nd-harmonic limit at the output in dBc (a negative number, e.g. -40), ONLY when the user states one. The filters after the PA are then chosen and judged against it. Never guess it and never deri… |
| hopping_channels | integer | – | Drone control/telemetry only: the number of hopping channels the link uses, WHEN THE USER STATES IT. 50 or more lifts the design ceiling from FCC 15.247(b)(2)'s 24 dBm to 30 dBm. Never guess it. |
| input_power_dbm | number | – | The power the user's radio or signal source delivers into the chain, in dBm (e.g. 0 or -10), ONLY when the user states it. It is the INPUT, never the target output. Omit it when not stated — the resu… |
| input_voltage_max_v | number | – | Highest voltage the board supply reaches, in volts (optional; e.g. a fully charged battery). Only when the user STATES it. Pair with input_voltage_min_v. |
| input_voltage_min_v | number | – | Lowest voltage the board supply reaches, in volts (optional; e.g. a battery at cut-off). Only when the user STATES it — never derive it from a cell count or chemistry. Give it together with input_vol… |
| internally_matched_only | boolean | – | Prefer internally 50-ohm matched parts (optional). A preference, not a filter: an unmatched PA can still win on score, and the result's warnings then say so. |
| main_board_input_voltage | number | – | Board DC supply voltage in volts that the power tree steps down/up to the per-component rails (optional; defaults to 12 V). Set it when the user states their supply rail, e.g. a 28 V or 48 V bench/ba… |
| protected_bands | array | – | Bands another radio on the same platform listens on (e.g. a drone's GNSS receiver), checked against the filters after the PA. Only when the user asks to protect a band. A cited ITU RNSS band is named… |
| region | string | – | Target market / regulatory region (e.g. 'USA', 'Europe', 'Global'). Set it when the user states their market so the design-time power clamp can enforce the right limits — an EU/Europe design with a k… |
| target_output_power | number | yes | Target transmitter output power in dBm. |
| transmit_bias_pulsed | boolean | – | Pulsed designs only: true when the user says the amplifier bias (gate or drain) is switched off between pulses, false when it stays on. Omit when not stated — the idle draw between pulses is then cou… |
| transmit_duty_cycle_percent | number | – | Transmit duty cycle in percent for a PULSED system (radar). Default 100 = continuous wave (CW). Set it to the real duty (e.g. 10 for a 10% radar) so thermal, stress, and compliance use AVERAGE power,… |
| user_request | string | – | The end user's own words that prompted this call, verbatim. Used to verify that the figures you pass were stated by your user rather than inferred. Omit it and the results will be labelled caller-ass… |
No output schema declared.
No examples provided.
design_rf_receiver Design a superheterodyne receiver ~722
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.
| Name | Type | Req | Description |
|---|---|---|---|
| application | string | – | Application context, the same label design_rf_chain takes (e.g. drones, marine_radar, wifi_wlan). Every part is scored for it; free text is resolved to the nearest known label, and one that cannot be… |
| architecture | string | – | front_end_only for a radio built on an integrated transceiver (drones): selects only limiter, preselector and LNA, ending at the transceiver input. Omit for a full superheterodyne. |
| bandwidthHz | number | – | Receiver noise bandwidth in Hz. Required for noise floor, MDS and sensitivity — omit it and those are reported as unavailable rather than assumed. |
| ifHz | number | – | Intermediate frequency in Hz. Omit to let the server choose one and disclose that it did. |
| inputPowerDbm | number | – | Signal level at the antenna port, in dBm. Omit for a small-signal reference, which the result discloses. |
| loSide | string | – | LO above or below the RF. Omit to let the server pick. |
| main_board_input_voltage | number | – | Board DC supply voltage in volts, the same argument design_rf_chain takes. A receiver designed from the catalog sizes its bill of materials' power tree from it (12 V when absent); explicit stages bui… |
| requiredSnrDb | number | – | SNR needed at the demodulator, in dB. |
| rfFrequencyHz | number | – | RF centre frequency in Hz (e.g. 9.4e9 for X-band). |
| stages | array | – | Explicit receive chain, ONLY for a bench receiver the user described with their own numbers. Do not hand-build this from memory — pass rfFrequencyHz instead and let the server select real parts. |
| targets | object | – | Requirements the user stated, judged pass/fail in the result's validation. Keys: noiseFigure, sensitivity, mds, noiseFloor, imageRejection, sfdr, instantaneousDynamicRange, iip3, rxGain, rxGainMax. E… |
| transceiverNfDb | number | – | The transceiver's own noise figure in dB, front_end_only only. Omit it and system NF, MDS and sensitivity are withheld, never assumed. |
| user_request | string | – | The end user's own words that prompted this call, verbatim. Used to verify that the figures you pass were stated by your user rather than inferred. Omit it and the results will be labelled caller-ass… |
No output schema declared.
No examples provided.
design_tr_module Design a T/R module ~1,498
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.
| Name | Type | Req | Description |
|---|---|---|---|
| antennaFilter | boolean | – | array_element only: true to add a shared bandpass filter between the circulator and the antenna, charged to both paths. Off unless the user asks for it. |
| antennaReturnLossDb | number | – | Antenna return loss in dB. Without it the antenna-mismatch leakage path assumes a 1.5:1 VSWR (13.98 dB) and says so. |
| application | string | – | Application context, the same label design_rf_chain takes (e.g. drones, marine_radar, wifi_wlan). Every part is scored for it; free text is resolved to the nearest known label, and one that cannot be… |
| architecture | string | – | front_end_only for a radio built on an integrated transceiver (drones): selects only limiter, preselector and LNA, ending at the transceiver input. array_element for ONE element of a phased array, be… |
| bandwidthHz | number | – | Receiver noise bandwidth in Hz. |
| beamformerDriveDbm | number | – | array_element only: the input power at the beamformer port, in dBm, as the user stated it. Required for an array element — never assumed; the tool refuses and names it when absent. |
| beamformerNfDb | number | – | array_element only: the beamformer's own noise figure behind the common leg, in dB. Omit it and the system noise figure at the beamformer port is withheld. |
| frequencyGhz | number | – | Operating frequency in GHz (e.g. 9.4 for X-band). |
| isolationDb | number | – | Transmit-to-receive isolation in dB, for the explicit-inputs path only. |
| main_board_input_voltage | number | – | Board DC supply voltage in volts that the power tree steps down/up to the per-component rails (optional; defaults to 12 V). Set it when the user states their supply rail, e.g. a 14.8 V 4S battery or… |
| maxPulseToPulseAmplitudeDb | number | – | The user's pulse-to-pulse amplitude stability requirement in dB. Not computed; reported as not evaluated with the reason. Omit when not stated. |
| maxPulseToPulsePhaseDeg | number | – | The user's pulse-to-pulse phase stability requirement in degrees. Not computed; reported as not evaluated with the reason. Omit when not stated. |
| maxTxGainFlatnessDb | number | – | The user's transmit gain flatness requirement across the band, in dB. Not computed; reported as not evaluated with the reason. Omit when not stated. |
| maxUnblankingRecoveryS | number | – | The user's maximum unblanking (receiver) recovery time in seconds (e.g. 100e-9 for '< 100 ns'). Judged against the switch back to receive plus limiter recovery. Omit when not stated. |
| minDetectionRangeM | number | – | The closest target the user must detect, in metres, when they state one. Checked against the blind range (pulse width + switch back to receive + limiter recovery). Needs prfHz and pulseWidthS; omit w… |
| minTxToRxIsolationDb | number | – | The user's required TX-to-RX isolation in dB (e.g. 40 for '> 40 dB'). Judged against the shared part's own isolation and reported under requirements. Not the same as isolationDb. Omit when not stated. |
| prfHz | number | – | Pulse repetition frequency in Hz, for a pulsed system. Omit and the switching/blanking budget is absent, not assumed. |
| pulseWidthS | number | – | Transmit pulse width in seconds (e.g. 1e-6). |
| requiredSnrDb | number | – | SNR needed at the demodulator, in dB. |
| targetOutputPowerDbm | number | – | Transmit output power the chain is designed to, in dBm (20 W = 43 dBm). Required — every safety budget is measured against it and no default is substituted. |
| topology | string | – | Shared-antenna element. Omit to use tr_switch, which the result discloses. Choose circulator_limiter for high transmit power — if the stress budget reports over_limit for a switch, re-run with this.… |
| transceiverNfDb | number | – | The transceiver's own noise figure in dB, front_end_only only. Omit it and system NF, MDS and sensitivity are withheld, never assumed. |
| transmitBiasPulsed | boolean | – | Pulsed designs only: true when the user says the transmit amplifier bias (gate or drain) is switched off between pulses, false when it stays on. Omit when not stated — the idle draw between pulses is… |
| transmitDutyCyclePercent | number | – | Transmit duty cycle in percent (e.g. 10 for a 10% pulsed radar). Selects each part's PULSED survivability rating instead of its CW rating, which for a limiter is commonly 7 dB higher. Omit for contin… |
| txPeakPowerDbm | number | – | Peak transmit power AT THE ANTENNA PORT, in dBm. Pass this ONLY to check a front end the user already has — it skips design entirely. To design a module, pass targetOutputPowerDbm instead. |
| user_request | string | – | The end user's own words that prompted this call, verbatim. Used to verify that the figures you pass were stated by your user rather than inferred. Omit it and the results will be labelled caller-ass… |
No output schema declared.
No examples provided.
find_components_by_spec Find parts that meet a spec ~464
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, temperature grade or range). 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.
| Name | Type | Req | Description |
|---|---|---|---|
| category | string | yes | Part type. |
| frequency_ghz | number | yes | Frequency in GHz the part must cover. |
| max_insertion_loss_db | number | – | Highest acceptable insertion loss, in dB. Only a limit your user stated. |
| max_noise_figure_db | number | – | Highest acceptable noise figure, in dB. Only a limit your user stated. |
| max_operating_temp_c | number | – | Highest temp (C) to cover; overrides grade. |
| max_results | integer | – | How many matches to return (default 10, at most 25). |
| min_gain_db | number | – | Lowest acceptable gain, in dB. Only a limit your user stated. |
| min_oip3_dbm | number | – | Lowest acceptable oip3, in dBm. Only a limit your user stated. |
| min_operating_temp_c | number | – | Lowest temp (C) to cover; overrides grade. |
| min_p1db_dbm | number | – | Lowest acceptable p1db, in dBm. Only a limit your user stated. |
| min_psat_dbm | number | – | Lowest acceptable psat, in dBm. Only a limit your user stated. |
| temperature_grade | string | – | Grade the part must cover: commercial 0..70, industrial -40..85, military -55..125 C. |
| user_request | string | – | The end user's own words that prompted this call, verbatim. Used to verify that the figures you pass were stated by your user rather than inferred. Omit it and the results will be labelled caller-ass… |
No output schema declared.
No examples provided.
lookup_component_by_mpn Look up a part's datasheet figures ~277
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.
| Name | Type | Req | Description |
|---|---|---|---|
| part_number | string | yes | Manufacturer part number to look up (e.g. 'TGA2624-SM', 'ADL5904', 'MAX2871'). Match is exact; the user's shortened form may need the family suffix. |
| user_request | string | – | The end user's own words that prompted this call, verbatim. Used to verify that the figures you pass were stated by your user rather than inferred. Omit it and the results will be labelled caller-ass… |
No output schema declared.
No examples provided.
run_compliance_analysis Run compliance checks ~291
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.
| Name | Type | Req | Description |
|---|---|---|---|
| layers | array | – | Optional. Stackup layers. Derived from the solved stackup when omitted. |
| stackup_config | object | – | Optional stackup config (layer_count, total_thickness_mm). Derived when omitted. |
| standards | array | – | Optional. Standards to check (e.g. IPC_2221, IPC_6012_CLASS3, ROHS_3, ETSI_EN_300_328, ETSI_EN_301_893) or a region name for advisory reference limits (e.g. 'China', 'SRRC', 'Japan', 'Canada'). Defau… |
| user_request | string | – | The end user's own words that prompted this call, verbatim. Used to verify that the figures you pass were stated by your user rather than inferred. Omit it and the results will be labelled caller-ass… |
No output schema declared.
No examples provided.
run_glass_weave_analysis Recommend a PCB glass-weave style ~252
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.
| Name | Type | Req | Description |
|---|---|---|---|
| frequency_ghz | number | – | Optional. Design frequency in GHz. Derived from the solved stackup / RF specs when omitted. |
| impedance_tolerance_pct | number | – | Optional impedance tolerance target in percent (default 5). |
| is_differential_pair | boolean | – | Optional. True halves the effective tolerance (differential pairs are more skew-sensitive). Default false. |
| trace_width_mm | number | – | Optional trace width in mm (default 0.1, worst-case narrow). |
| user_request | string | – | The end user's own words that prompted this call, verbatim. Used to verify that the figures you pass were stated by your user rather than inferred. Omit it and the results will be labelled caller-ass… |
No output schema declared.
No examples provided.
run_link_budget Run a link budget ~450
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 (after a receiver it returns that receiver's own cascade; a T/R module keeps no stage list, so it is refused). 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.
| Name | Type | Req | Description |
|---|---|---|---|
| bandwidthHz | number | – | Optional receiver noise bandwidth in Hz. When given, the result adds the thermal noise floor, MDS, SFDR, and instantaneous dynamic range (a receiver figure of merit). |
| inputPowerDbm | number | – | Input power into the first stage, in dBm. Omit for a just-designed chain (derived from its power flow). |
| requiredSnrDb | number | – | Optional SNR (dB) required for detection/demod. With bandwidthHz, yields receiver sensitivity = MDS + this SNR. |
| stages | array | – | Ordered list of RF stages for a bench/hypothetical chain. Omit for a just-designed chain (derived server-side). Each stage may declare gainDB or lossDB (loss is treated as -|lossDB|), nfDB, oip3Dbm,… |
| user_request | string | – | The end user's own words that prompted this call, verbatim. Used to verify that the figures you pass were stated by your user rather than inferred. Omit it and the results will be labelled caller-ass… |
No output schema declared.
No examples provided.
run_ota_link Run an over-the-air link budget ~563
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.
| Name | Type | Req | Description |
|---|---|---|---|
| bandwidthHz | number | – | Receiver noise bandwidth (Hz) — used to derive sensitivity. |
| distanceM | number | – | Link distance in METRES (pass 5000 for 5 km). USER ASSUMPTION. |
| fadeMarginDb | number | – | Fade margin required for the link to count as closing (dB). Default 0. |
| frequencyGhz | number | – | Carrier frequency (GHz). Reused from a prior antenna design if omitted. |
| miscLossDb | number | – | Misc/implementation loss lump (dB): cables, connectors, pointing, polarization. USER ASSUMPTION. Default 0. |
| requiredSnrDb | number | – | Demodulation SNR required (dB) — used to derive sensitivity. |
| rxGainDbi | number | – | Receive antenna gain (dBi). Defaults to 0 (isotropic) — pass it when the far-end antenna is known. |
| rxNfDb | number | – | Receiver noise figure (dB) — used to derive sensitivity when none is available. |
| sensitivityDbm | number | – | Receiver sensitivity (dBm). Reused from a prior link budget if omitted. |
| txGainDbi | number | – | Transmit antenna gain (dBi). Reused from a prior patch-antenna design if omitted. |
| txPowerDbm | number | – | Transmit power in dBm. Use ONLY when the user states dBm; otherwise pass txPowerW. Wins if both are given. |
| txPowerW | number | – | Transmit power in WATTS (pass 0.1 for 100 mW). PREFER this for W/mW inputs — the server converts to dBm. Do NOT convert yourself. |
| user_request | string | – | The end user's own words that prompted this call, verbatim. Used to verify that the figures you pass were stated by your user rather than inferred. Omit it and the results will be labelled caller-ass… |
No output schema declared.
No examples provided.
run_pdn_analysis Run power-delivery analysis ~247
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.
| Name | Type | Req | Description |
|---|---|---|---|
| decoupling_caps | array | – | Optional. Decoupling capacitors. Derived from the BOM's PDN passive lines when omitted. |
| plane_pairs | array | – | Optional. Power/ground plane pairs. Derived from the solved stackup when omitted. |
| target | object | – | Optional target-impedance config {voltage_v, ripple_pct, transient_current_a, rise_time_ns} or {preset_name}. Derived from the power-tree rail when omitted. |
| user_request | string | – | The end user's own words that prompted this call, verbatim. Used to verify that the figures you pass were stated by your user rather than inferred. Omit it and the results will be labelled caller-ass… |
No output schema declared.
No examples provided.
run_planar_filter Synthesize a planar PCB filter ~539
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.
| Name | Type | Req | Description |
|---|---|---|---|
| f0_ghz | number | – | Center frequency in GHz (BPF only). |
| fc_ghz | number | – | Cutoff frequency in GHz (LPF only). |
| filter_class | string | yes | Low-pass or band-pass. |
| fractional_bw | number | – | Fractional bandwidth 0<Δ<1 (BPF only), e.g. 0.10 for 10%. |
| impedance_extremes | object | – | Stepped-impedance LPF only: zh_ohm (high-Z line) and zl_ohm (low-Z line). open_stub uses zh_ohm alone. |
| order | integer | yes | Filter order N (number of reactive elements), >= 1. |
| response | string | yes | Prototype response. chebyshev requires ripple_db. |
| ripple_db | number | – | Passband ripple in dB (required for chebyshev). |
| substrate | object | yes | PCB substrate. line_topology 'microstrip' or 'stripline'; material (the laminate the user named) or er (only a Dk the user stated); h_mm (microstrip height) or b_mm (stripline plate spacing); optiona… |
| topology | string | yes | LPF: stepped_impedance or open_stub. BPF: parallel_coupled or hairpin. (interdigital/combline are Tier B — not implemented.) |
| user_request | string | – | The end user's own words that prompted this call, verbatim. Used to verify that the figures you pass were stated by your user rather than inferred. Omit it and the results will be labelled caller-ass… |
| z0_ohm | number | yes | System (port) impedance in ohms, e.g. 50. |
No output schema declared.
No examples provided.
run_radar_performance Compute radar range and waveform limits ~538
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.
| Name | Type | Req | Description |
|---|---|---|---|
| compressedBandwidthHz | number | – | Pulse-compression bandwidth B (Hz); overrides range resolution. |
| frequencyGhz | number | – | Carrier frequency (GHz). |
| gainRxDbi | number | – | Receive antenna gain (dBi); defaults to gainTxDbi (monostatic). |
| gainTxDbi | number | – | Transmit antenna gain (dBi). |
| integrationCount | integer | – | Pulses integrated (N >= 1). Default 1. |
| integrationMode | string | – | 'coherent' (+10log10 N) or 'noncoherent' (~6.5log10 N). |
| mdsDbm | number | – | Detection floor (dBm). Reused from a prior link budget if omitted. |
| peakPowerDbm | number | – | Transmit peak power in dBm. Use ONLY when the user states dBm directly; otherwise pass peakPowerW. Wins if both are given. |
| peakPowerW | number | – | Transmit peak power in WATTS (pass 1000 for 1 kW). PREFER this for W/kW/MW inputs — the server converts to dBm. Do NOT convert to dBm yourself. |
| prfHz | number | – | Pulse repetition frequency (Hz). |
| pulseWidthS | number | – | Pulse width tau (s). |
| rcsM2 | number | – | Target radar cross-section (m^2). USER ASSUMPTION. |
| requiredSnrDb | number | – | Detection SNR (dB) used to solve maximum range. |
| systemLossDb | number | – | System loss budget (dB). USER ASSUMPTION. Default 0. |
| targetRangeM | number | – | Target range (m). USER ASSUMPTION. |
| user_request | string | – | The end user's own words that prompted this call, verbatim. Used to verify that the figures you pass were stated by your user rather than inferred. Omit it and the results will be labelled caller-ass… |
No output schema declared.
No examples provided.
run_stackup_solver Solve a PCB stackup ~1,464
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.
| Name | Type | Req | Description |
|---|---|---|---|
| allowed_core_materials | array | – | Restrict core dielectrics to these catalog materials (e.g. RO4350B, MEGTRON6; 'FR4' = the standard FR-4 grades). Pass ONLY materials the user named; none named at all = 'FR4'. |
| allowed_inner_core_materials | array | – | For a HYBRID board (an RF core on top or on both outer cores, a cheaper laminate on the others): the catalog materials those cores may be. Omitted, 'FR4' (the standard FR-4 grades). Pass ONLY what th… |
| allowed_prepreg_materials | array | – | Restrict prepregs to these catalog materials (e.g. RO4450F, MEGTRON6; 'FR4' = the standard FR-4 grades). Pass ONLY materials the user named; none named at all = 'FR4'. |
| build_type | string | – | Lamination build: 'single' (default) or HDI level hdi1-hdi4. HDI defaults cost_priority to performance. |
| construction | string | – | Lamination. OMIT it unless the user named one: an omitted lamination is built foil; naming a non-FR-4 core builds core_outer where it can be (4+ layers, build_type 'single'), whatever the frequency.… |
| copper_weight_oz | number | – | Restrict solutions to this copper weight in oz (0.5, 1, 2, or 3). Omit to let the solver optimize copper weight; an omitted value inherits the latest update_stackup_config copper weight automatically… |
| cost_priority | string | – | Cost preference: low, balanced, or performance. Default balanced; an HDI build_type OR a frequency at or above 18 GHz defaults to performance instead, because at mm-wave a balanced weighting ranks an… |
| frequency_ghz | number | yes | Operating frequency in GHz |
| impedance_ohms | number | – | Target impedance in Ohms (default 50). Single-target convenience — ignored when impedance_targets is given. |
| impedance_targets | array | – | Up to 4 impedance targets the stackup must satisfy SIMULTANEOUSLY, each {ohms, topology ('microstrip'|'stripline'), differential (bool), spacing_mm (differential pair gap in mm, default 0.15)}. Use f… |
| input_power_w | number | – | RF power in W going into the line, ONLY when the user states one (0-10000; needs line_length_mm). Adds heat_w: the watts the line turns into heat. |
| layer_count | number | yes | Total copper layers (even number, 2-32) |
| line_length_mm | number | – | Length of the line in mm, ONLY when the user states one (0-2000). Each single-ended trace always returns its loss in dB/mm (trace_results[].loss); with a length it also returns line_loss_db for that… |
| max_solutions | number | – | Max solutions to return, 1-20 (default 5) |
| reflow_process | string | – | Assembly reflow process; enforces a Tg floor on all dielectrics (default lead_free). |
| solder_mask | object | – | Solder mask covering the OUTER trace, as {thickness_mm, dk}. Mask raises the effective permittivity around the trace and pulls Z0 down, so the solver returns a NARROWER width for the same target impe… |
| target_thickness_mils | number | – | Board thickness in mils (default 62) |
| thickness_tolerance_mm | number | – | Allowed deviation from the target thickness in mm. OMIT it and the solver uses 10% of the target thickness. Set it only when the user states a tolerance. The value the solve used comes back as thickn… |
| topology | string | – | Transmission line type: microstrip or stripline (default microstrip) |
| user_request | string | – | The end user's own words that prompted this call, verbatim. Used to verify that the figures you pass were stated by your user rather than inferred. Omit it and the results will be labelled caller-ass… |
No output schema declared.
No examples provided.
run_thermal_analysis Run thermal analysis ~831
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 (a receiver's supply draw, or a T/R module's merged figure) 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.
| Name | Type | Req | Description |
|---|---|---|---|
| analysis_input | object | – | Optional once a design exists. {power_w, ambient_c} are BOTH optional: the server fills power_w from the designed chain's dissipated power and defaults ambient_c to 25 C. Omit this entirely to run th… |
| board_length_mm | number | – | Overall PCB length in mm — used for Timoshenko warpage and CTE-mismatch curvature estimates. |
| board_width_mm | number | – | Overall PCB width in mm (warpage / CTE inputs). |
| copper_coverage_bottom_pct | number | – | Fractional copper coverage on the bottom side (0–100 %). Asymmetry vs. top drives warpage predictions. |
| copper_coverage_top_pct | number | – | Fractional copper coverage on the top side (0–100 %). Used for warpage symmetry and effective-CTE calculations. |
| copper_thickness_mm | number | – | Plane/pour copper thickness in mm (e.g. 0.035 for 1 oz, 0.070 for 2 oz). Drives the lateral spreading conductance. |
| delta_t_c | number | – | Thermal-cycling ΔT in °C for Coffin-Manson fatigue analysis (e.g. 100 °C from −40 to +60 °C operating swing). |
| effective_cte_z_ppm | number | – | Effective z-axis CTE in ppm/°C — input to Coffin-Manson barrel-stress life estimation. Typical 40–70 ppm/°C for FR4. |
| heatsink | object | – | Optional user-STATED heatsink (or drone airframe spreader) the part is mounted to. ALL THREE properties are required together and NONE is ever defaulted — if the user has not stated one, ask; a parti… |
| layer_count | integer | – | Total copper layer count (even number, typically 2–32). Used to scale per-layer thermal contributions. |
| pour_area_mm2 | number | – | Total copper-pour spreader area in mm² on the heat-sink side; larger pours reduce the spreading-Rth term. |
| source_area_mm2 | number | – | Heat source footprint area in mm² — typically the IC die or package pad footprint. Used for Kennedy spreading resistance. |
| stackup_layers | array | – | Optional per-layer thermal contributions. |
| theta_jc_c_per_w | number | – | Device junction-to-case thermal resistance in °C/W (datasheet R_θJC). Optional — the server derives it from the designed chain's PA record when available. |
| user_request | string | – | The end user's own words that prompted this call, verbatim. Used to verify that the figures you pass were stated by your user rather than inferred. Omit it and the results will be labelled caller-ass… |
| via_config | object | – | Optional thermal via array. ALL SEVEN properties are required together — a partial object is rejected — and plating_thickness_mm must be < via_diameter_mm / 2. |
No output schema declared.
No examples provided.
How do I install the MagicON RF Design Engines MCP server?
MagicON RF Design Engines is a hosted endpoint at https://api.pcbgenerator.com/mcp/, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · api.pcbgenerator.com
claude mcp add --transport http magiccadai-magicon 'https://api.pcbgenerator.com/mcp/'
What is the MagicON RF Design Engines MCP server?
MagicON RF Design Engines is an MCP server listed in the public MCP registry as io.github.magiccadai/magicon. TX/RX/T-R chains, OTA link, radar, PCB filters, patch antennas, stackup, thermal, PDN, compliance. This page covers its hosted endpoint (https://api.pcbgenerator.com/mcp/).
Is the MagicON RF Design Engines MCP server safe to use?
MagicON RF Design Engines scores 81 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the MagicON RF Design Engines MCP server expose?
MagicON RF Design Engines exposes 17 tools: design_rf_chain, design_rf_receiver, design_tr_module, run_link_budget, run_stackup_solver, and 12 more. Their descriptions and schemas cost roughly 10,523 tokens of context every time the server is loaded.
Does the MagicON RF Design Engines MCP server require authentication?
No. We connected to MagicON RF Design Engines without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.
Is the MagicON RF Design Engines MCP server still maintained?
MagicON RF Design Engines is still listed as active in the MCP registry. We last reached this channel on 4 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.