Skip to main content
Glama

MagicON RF Design Engines

Server Details

RF module design for AI assistants: transmit chains, receivers, link budgets, PCB stackups, thermal and compliance, every figure computed by a solver from real catalog parts, never guessed. Free, no sign-in.

Ownership verified
Status
Healthy
Uptime
99.8% over 22 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A4.2/5.0

Scored across 17 tools

Disambiguation5/5

Every tool targets a distinct resource or computation, and the descriptions explicitly route the agent between near-neighbors (design_rf_chain vs design_rf_receiver vs design_tr_module; run_link_budget vs run_ota_link; find_components_by_spec vs lookup_component_by_mpn). Even the most easily confused pair — cascade link budget and over-the-air link budget — is called out with 'use X instead' guidance. There is essentially no risk of misselection.

Naming Consistency4/5

All names are snake_case and follow a small, semantically meaningful verb family: run_* for analyses, design_* for design generation, plus check_/compare_/find_/lookup_ for their specific roles. The only minor deviation is that two verb families (design_ and run_) cover comparable 'produce a result' operations, but the split is logical and readable throughout.

Tool Count4/5

17 tools is slightly above the ideal band but each one maps to a genuinely distinct RF domain area (antenna, TX, RX, T/R, filter, stackup, compliance, thermal, PDN, glass weave, link budgets, radar, component lookup, verification). No tool appears redundant or filler, so the count is justified by the breadth rather than bloated.

Completeness4/5

The surface covers the full lifecycle: component discovery (spec + MPN), design synthesis (chain, receiver, T/R, antenna, planar filter), and downstream analyses (link budget, OTA, radar, compliance, thermal, PDN, glass weave), plus a grounding/verification gate before publishing. Minor gaps exist — no explicit session/design retrieval, export, or design-editing tools — but agents can work around these.

Available Tools

17 tools
check_groundingCheck a draft against engine resultsA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesThe 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.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds real behavioral context beyond that: it reports every unsupported figure and every claim the results contradict, returns them in `findings` with a `why` reason, and offers four remediation patterns. It stops short of describing ordering, counts, or empty-result behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action and return shape, then the usage trigger, then the remediation guidance. Every sentence carries content, though the closing enumeration of fix strategies is slightly long relative to the rest.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the burden of explaining returns and does so: it names the `findings` collection and its `why` field and characterizes what lands there. For a single-parameter, read-only check, nothing an agent needs is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for the single `text` parameter and the schema already says to pass verbatim prose including tables and captions. The description reinforces 'verbatim' but adds no format or syntax detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb+resource: check a draft passage against engine results from THIS session. The scope qualifier ('THIS session') and the negative framing ('computes nothing, adds no evidence') clearly separate it from the compute siblings like run_link_budget and run_thermal_analysis.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger ('Run it before publishing or handing over a report, fabrication sheet, BOM summary or any other figure-bearing deliverable built from these tools') and implicitly rules out using it as a compute tool by stating it computes nothing. An agent knows exactly when to reach for this versus a solver.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compare_rf_chainsCompare transmit chain alternativesA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
weightsNoObjective weights {cost, size, performance}, each 0-1; normalized to sum 1.0. Defaults to balanced.
frequencyNoOperating frequency in GHz. Omit to reuse the conversation's designed chain.
max_chainsNoMax variants to return (1-20, default 8).
applicationNoApplication context (e.g. satcom_c_band, wifi_wlan). Derived from the frequency band when omitted.
user_requestNoThe 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-asserted.
target_output_powerNoTarget output power in dBm. Omit to reuse the conversation's designed chain.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint=true already covering safety, the description adds real behavioral context: it discloses the multi-step pipeline, the cost/size/performance scoring axes, the Pareto-frontier return, and the backing engine/endpoint. It does not explain the apparent tension between readOnly and 'designs/generates' operations, but the annotation's safety signal is not contradicted.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence, but it is front-loaded with the core purpose and every clause (pipeline stages, scoring axes, return shape, engine reference, invocation hint) earns its place. Slightly long but not padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description compensates by describing the return (ranked list with a Pareto frontier). For a 6-param all-optional tool it is nearly complete, missing only a note on what happens without a prior design.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all six parameters are already documented, including their defaults and reuse semantics. The description adds only the no-argument invocation hint, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Multi-objective RF chain comparison') and enumerates the full behavior chain: designs the primary chain, generates alternatives, scores on cost/size/performance, returns a ranked Pareto list. This clearly distinguishes it from sibling design_rf_chain, which designs a single chain.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger ('Call with no arguments after a chain design to compare that design') and a prerequisite (a prior chain design). It does not name a sibling alternative or state a when-not condition, so it stops short of the top band.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

design_patch_antennaDesign a patch antenna or arrayA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dfNoManual substrate loss tangent override.
dkNoManual substrate dielectric constant override.
nxNoArray elements along x (width). Requires ny.
nyNoArray elements along y (length). Requires nx.
h_mmNoManual substrate height (mm) override.
materialNoSubstrate 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 thickness, disclosing both. Pass this instead of dk/df when the user names a material rather than numbers; do NOT invent dk/df yourself.
apply_gainNoAuto-apply the designed gain to the chain's antennaGainDbi. Default true.
spacing_x_mmNoExplicit x-axis element spacing (mm); wins over spacing_lambda.
spacing_y_mmNoExplicit y-axis element spacing (mm); wins over spacing_lambda.
user_requestNoThe 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-asserted.
frequency_ghzYesTarget resonant frequency f0 (GHz). Required.
steer_phi_degNoBeam-steer azimuth angle (deg), default 0.
spacing_lambdaNoArray element spacing as a fraction of lambda0 (default 0.5).
steer_theta_degNoBeam-steer elevation angle (deg), default 0.

TDQS

A3.7/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, but the description says the designed gain is auto-applied to the chain's antennaGainDbi unless apply_gain=false — a state mutation. That directly contradicts the read-only annotation. The description is otherwise candid about side effects, but the conflict with the annotation triggers a 1 under the rubric.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense paragraph that front-loads what is designed, then the model, then the default behaviors and return contents. Every clause carries information, though the substrate/gain sentences could be broken out for faster scanning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 14-parameter tool with no output schema, the description covers the substrate sourcing logic, the array conditional, the auto-apply side effect, and enumerates return contents (dimensions, resonance/bandwidth/gain, beamwidths, pattern cuts, grating-lobe check). Remaining parameter specifics are fully covered by the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, so the baseline is 3, but the description adds real meaning: the substrate defaulting rule, the array-vs-single conditional on nx/ny, and the note that omitting user_request labels results 'caller-asserted'. The material-resolution guidance is also reinforced rather than merely restated.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (design a rectangular microstrip patch antenna / planar array), names the underlying model (Balanis cavity + array factor), and ties itself to a concrete endpoint and UI panel. An agent can distinguish it from design_rf_chain or run_stackup_solver without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear conditions: array mode triggers only when both nx and ny are supplied, and substrate values derive from the latest solved stackup unless dk/df/h_mm are given explicitly. It does not, however, name when to prefer a sibling tool (e.g. design_rf_chain vs this) or state exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

design_rf_chainDesign a transmit chainA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
regionNoTarget 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 known antenna gain is held to the ETSI e.i.r.p. limit (EN 300 328 / EN 301 893), not just the FCC ISM conducted limit.
bandwidthNoSignal bandwidth in MHz (optional).
frequencyYesOperating frequency in GHz (scalar).
applicationNoApplication 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 judged on LINEAR power), drones_analog_video (analog FM video: saturated power, plus the FCC 15.249 licence note) or drones_control_telemetry; plain 'drones' means the modulation is unknown (the PA is judged on P1dB).
user_requestNoThe 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-asserted.
input_power_dbmNoThe 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 result then says which level was assumed.
protected_bandsNoBands 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 by source ('table:rnss_1164_1215', 'table:rnss_1215_1240', 'table:rnss_1240_1300', 'table:rnss_1559_1610', 'table:rnss_5010_5030') and needs no edges; a band the user states uses source 'user' with name, fLowHz and fHighHz. requiredRejectionDb ONLY when the user states it — it narrows the filter choice. Never invent an edge or a requirement.
antenna_gain_dbiNoAntenna 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 ETSI clamp does NOT engage (no 0 dBi assumption is made in the design).
board_mount_onlyNotrue ONLY when the user asks for board-mount (surface-mount) parts only. The isolator after the PA then skips parts whose record says drop-in, flange, die or cable; if none is left the slot stays empty and the warnings say why. Other slots are not filtered yet.
harmonic_2nd_dbcNoThe 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 derive it from a regulation.
hopping_channelsNoDrone 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.
digital_modulationNoDrone 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.
input_voltage_max_vNoHighest 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_vNoLowest 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_voltage_max_v and a main_board_input_voltage inside the two; the power tree then picks regulators that work across the whole span.
target_output_powerYesTarget transmitter output power in dBm.
transmit_bias_pulsedNoPulsed 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 counted as heat.
internally_matched_onlyNoPrefer 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_voltageNoBoard 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/battery input.
transmit_duty_cycle_percentNoTransmit 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, not peak.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint and openWorldHint false, so the description carries the real burden and delivers: it discloses the extraction/insertion behavior (pre-driver or attenuator inserted to hit target power), the default source assumption, and a non-obvious reporting rule that when pricingCoverage is 'partial', total_usd is a subtotal of pricedLines and must not be called the total. That is substantive behavioral context an agent could not infer.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the design action and its outputs before the caveat and the sibling routing. The first sentence is dense with stacked parentheticals, which slightly taxes readability, but every sentence carries non-redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 19 parameters, no output schema, and a complex orchestration task, the description still tells the agent what comes back (BOM plus convergence summary including achieved vs target output) and how to interpret partial pricing. Nothing needed to call the tool correctly appears to be missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 19 parameters in detail, including defaults and 'only when stated' constraints. The description adds an implicit default for the signal source but no parameter-level syntax or value guidance beyond what the schema provides, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Design a complete RF transmitter chain') and enumerates the concrete stages it resolves (driver, PA, filter, connector) plus what it returns (BOM and convergence summary). It also names the two sibling tools it is not (design_rf_receiver, design_tr_module), so an agent can disambiguate without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes to alternatives: 'For a receiver, use design_rf_receiver instead. For a module that shares one antenna between transmit and receive, use design_tr_module instead.' It also states an implicit default behavior (signal source is the user's input power; no VCO unless explicitly the generator), covering the when-to-use decision fully.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

design_rf_receiverDesign a superheterodyne receiverA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
ifHzNoIntermediate frequency in Hz. Omit to let the server choose one and disclose that it did.
loSideNoLO above or below the RF. Omit to let the server pick.
stagesNoExplicit 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.
targetsNoRequirements the user stated, judged pass/fail in the result's validation. Keys: noiseFigure, sensitivity, mds, noiseFloor, imageRejection, sfdr, instantaneousDynamicRange, iip3, rxGain, rxGainMax. Each value is a number or {min, typ, max}. Only values the user gave; never invent one.
applicationNoApplication 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 resolved is scored as 'general' with a warning saying so. Omit for 'general'.
bandwidthHzNoReceiver noise bandwidth in Hz. Required for noise floor, MDS and sensitivity — omit it and those are reported as unavailable rather than assumed.
architectureNofront_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.
user_requestNoThe 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-asserted.
inputPowerDbmNoSignal level at the antenna port, in dBm. Omit for a small-signal reference, which the result discloses.
requiredSnrDbNoSNR needed at the demodulator, in dB.
rfFrequencyHzNoRF centre frequency in Hz (e.g. 9.4e9 for X-band).
transceiverNfDbNoThe transceiver's own noise figure in dB, front_end_only only. Omit it and system NF, MDS and sensitivity are withheld, never assumed.
main_board_input_voltageNoBoard DC supply voltage in volts, the same argument design_rf_chain takes. This tool returns no bill of materials or power tree, so a value given here is reported back as unused rather than applied.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint and openWorldHint; the description adds far more — the full result surface (frequency plan with image/half-IF/LO leakage, cascaded NF, noise floor, MDS, sensitivity, SFDR, ADC interface), plus disclosure behavior when inputs are omitted ('reported as unavailable rather than assumed', 'labelled caller-asserted'). It also warns that a stage built from memory is discouraged and that an omitted nfSideband produces an ambiguity warning, which is genuine behavioral context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then outputs, then parameter routing, then sibling routing — a logical progression with zero filler. Despite being several sentences, each one carries distinct information the agent needs to call the tool correctly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 13-parameter tool with nested stage objects and no output schema, the description compensates by describing the returned quantities in detail and by stating what is withheld when optional inputs are missing. It also flags the no-BOM limitation for main_board_input_voltage, covering the full decision surface.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds routing semantics the schema cannot: which of rfFrequencyHz vs stages[] to use and under what user-story condition, plus the note that bandwidthHz gates noise floor/MDS/sensitivity. It stops short of explaining the remaining numeric conventions, which the schema already handles.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Design or analyse a superheterodyne RECEIVER') and immediately enumerates what it selects (limiter, LNA, image filter, mixer, LO, IF filter, IF amp, step attenuator) and what it returns. It explicitly distinguishes itself from design_rf_chain (transmitter) and design_tr_module (shared antenna), so an agent can route without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit decision rule for the two primary modes ('pass rfFrequencyHz to design one; pass stages[] only for a bench receiver the user described with their own numbers') and names two alternatives with the conditions that select them. No exclusions are left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

design_tr_moduleDesign a T/R moduleA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
prfHzNoPulse repetition frequency in Hz, for a pulsed system. Omit and the switching/blanking budget is absent, not assumed.
topologyNoShared-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. switch_and_circulator belongs to architecture array_element only (and is its only topology); any other pairing is refused.
applicationNoApplication 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 resolved is scored as 'general' with a warning saying so. Omit for 'general'.
bandwidthHzNoReceiver noise bandwidth in Hz.
isolationDbNoTransmit-to-receive isolation in dB, for the explicit-inputs path only.
pulseWidthSNoTransmit pulse width in seconds (e.g. 1e-6).
architectureNofront_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, beamformer port to antenna port: phase shifter + step attenuator shared by both paths, a low-power T/R switch and a circulator; requires beamformerDriveDbm. Omit for a full superheterodyne.
frequencyGhzNoOperating frequency in GHz (e.g. 9.4 for X-band).
user_requestNoThe 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-asserted.
antennaFilterNoarray_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.
requiredSnrDbNoSNR needed at the demodulator, in dB.
beamformerNfDbNoarray_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.
txPeakPowerDbmNoPeak 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.
transceiverNfDbNoThe transceiver's own noise figure in dB, front_end_only only. Omit it and system NF, MDS and sensitivity are withheld, never assumed.
beamformerDriveDbmNoarray_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.
minDetectionRangeMNoThe 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 when not stated — no requirement is assumed.
transmitBiasPulsedNoPulsed 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 then counted as heat, and the thermal disclosures say so.
antennaReturnLossDbNoAntenna return loss in dB. Without it the antenna-mismatch leakage path assumes a 1.5:1 VSWR (13.98 dB) and says so.
maxTxGainFlatnessDbNoThe user's transmit gain flatness requirement across the band, in dB. Not computed; reported as not evaluated with the reason. Omit when not stated.
minTxToRxIsolationDbNoThe 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.
targetOutputPowerDbmNoTransmit 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.
maxUnblankingRecoverySNoThe 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.
maxPulseToPulsePhaseDegNoThe user's pulse-to-pulse phase stability requirement in degrees. Not computed; reported as not evaluated with the reason. Omit when not stated.
main_board_input_voltageNoBoard 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 a 28 V bench input. Same meaning as on design_rf_chain.
transmitDutyCyclePercentNoTransmit 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 continuous wave — the CW rating is then used, and a part declaring no pulsed rating keeps its CW one with that substitution disclosed. Redundant if prfHz and pulseWidthS are both given, which imply it.
maxPulseToPulseAmplitudeDbNoThe user's pulse-to-pulse amplitude stability requirement in dB. Not computed; reported as not evaluated with the reason. Omit when not stated.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true and openWorldHint=false, consistent with a design/compute tool. Beyond that, the description discloses refusal behavior ('any other pairing is refused'), defaults-vs-withholding semantics ('the switching/blanking budget is absent, not assumed'), and scoring fallbacks, which are genuine behavioral facts the annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core paragraph is dense but front-loaded: purpose and the two usage paths come first, safety budgets next, alternatives last. Every sentence earns its place, though the run-on enumeration of budgets and the very long single paragraph slightly reduce scannability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 26-parameter tool with no output schema and no formally required parameters, the description supplies what an agent needs: the two invocation modes, the design outcome (four safety budgets), what is withheld when inputs are omitted, and refusal conditions. Nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents each of the 26 parameters, making 3 the baseline. The description still adds cross-parameter routing logic the schema cannot express: which inputs select the design path vs. the explicit-inputs path, and that omitted inputs are withheld rather than defaulted. That is meaningful added meaning, though most per-parameter detail remains in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Design a T/R (transmit/receive) module that shares ONE antenna'), names the shared-antenna front-end choices, and enumerates the four safety budgets returned. It explicitly contrasts itself with design_rf_chain (transmitter alone) and design_rf_receiver (receiver alone), so an agent can route correctly without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use routing: '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.' It also names the alternatives (design_rf_chain, design_rf_receiver) and their selection condition, leaving nothing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_components_by_specFind parts that meet a specA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
categoryYesPart type, e.g. 'lna', 'pa', 'filter', 'mixer'.
max_resultsNoHow many matches to return (default 10, at most 25).
min_gain_dbNoLowest acceptable gain, in dB. Only a limit your user stated.
min_oip3_dbmNoLowest acceptable oip3, in dBm. Only a limit your user stated.
min_p1db_dbmNoLowest acceptable p1db, in dBm. Only a limit your user stated.
min_psat_dbmNoLowest acceptable psat, in dBm. Only a limit your user stated.
user_requestNoThe 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-asserted.
frequency_ghzYesOperating frequency in GHz the part must cover.
max_noise_figure_dbNoHighest acceptable noise figure, in dB. Only a limit your user stated.
max_insertion_loss_dbNoHighest acceptable insertion loss, in dB. Only a limit your user stated.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well past the readOnly/openWorld annotations: it discloses result ordering ('best first on the first limit'), how parts missing a limited figure are handled (named as not compared, never counted as matches), the refusal behavior for untraceable figures, and the 'caller-asserted' labelling that results receive when user_request is omitted. This is substantive behavioral context an agent cannot get from annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and criteria, then behavior, then the constraint on inputs — a sensible order. The single dense paragraph repeats the 'only stated figures' rule that the schema already carries per-parameter, which is mild redundancy rather than bloat.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the return-value burden and does so: matching parts, best-first ordering, headline figures with datasheet pages, and the treatment of non-compared parts. Combined with full schema coverage and readOnly annotations, an agent has everything needed to call and interpret it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents every parameter including the 'only a limit your user stated' phrasing. The description still adds meaning beyond it by enumerating the usable limits (noise figure, gain, P1dB, Psat, OIP3, insertion loss) and, crucially, by explaining that ranking is driven by the first limit supplied.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (find), resource (real parts in the validated catalog), and the exact selection criteria (part type, frequency, optional limits), so an agent knows this is spec-based search rather than MPN lookup. It explicitly contrasts with lookup_component_by_mpn by noting the results carry the same datasheet-page provenance that tool gives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clear context is given: use it when the user has stated a spec (type + frequency + limits), and the rule 'Pass only figures your user stated; an untraceable one is refused' tells the agent how to populate limits. However, it never states when to prefer this over sibling design tools (design_rf_chain, compare_rf_chains) or when lookup_component_by_mpn is the better call.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lookup_component_by_mpnLook up a part's datasheet figuresA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
part_numberYesManufacturer 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_requestNoThe 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-asserted.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover readOnly/openWorld; the description adds real behavioral detail beyond them: which figures are returned with datasheet page references, that missing figures are labelled 'not in the record', that internal estimates are named but never numeric, and that the caller-asserted labelling depends on user_request. Exact-match matching behavior is also disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose and return contents are front-loaded, and the exclusions follow logically. It is dense and slightly long for a two-parameter lookup, but nearly every clause carries distinct information (returned fields, degraded-data behavior, exclusions).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description fully carries the return-value burden: it enumerates the returned fields, explains datasheet page references, and describes how incomplete records and estimates appear. Nothing needed to call or interpret the result is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both parameters are already documented in the schema, including the exact-match caveat and the user_request verification purpose. The description adds no further syntax or format guidance for them, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('look up') and resource (an RF component in the validated catalog by manufacturer part number) and immediately scopes it against the full datasheet. It is trivially distinguishable from the design_/run_ siblings, none of which retrieve catalog parts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger ('Use this whenever the user names a specific part, so answers come from catalog data rather than recall') and explicit exclusions ('It does NOT hold derating, absolute-maximum ratings, bias, test conditions or footnotes: for those, read the datasheet link'). Both when-to-use and where-to-go-otherwise are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_compliance_analysisRun compliance checksA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
layersNoOptional. Stackup layers. Derived from the solved stackup when omitted.
standardsNoOptional. 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'). Defaults to IPC-2221 + IPC-6012 Class 2 when omitted.
user_requestNoThe 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-asserted.
stackup_configNoOptional stackup config (layer_count, total_thickness_mm). Derived when omitted.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnlyHint=true, openWorldHint=false), and the description adds real value beyond them: it discloses the underlying engine (POST /api/compliance/check), that layers are derived, that standards default, and that omitting user_request downgrades results to 'caller-asserted.' No rate limits or caching behavior mentioned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences, front-loaded with the purpose and standards, followed by the invocation shortcut. No filler, though the standards enumeration is long and the default rule is repeated from the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description supplies the return shape ('per-rule pass/fail with severities and remediation'), the default standard set, the derivation of layers, and the user_request labeling consequence. An agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents layers, standards, user_request, and stackup_config, including defaults and the caller-asserted labelling rule. The description largely restates the same default/derivation facts, adding little beyond the schema baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Audit the solved stackup against PCB standards') and enumerates the standard families checked. It is clearly distinguishable from siblings like run_stackup_solver or run_pdn_analysis, which operate on different artifacts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'call with no arguments once a stackup exists,' which gives a clear precondition and default path. It does not name a competing sibling or state when NOT to run it, but the context is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_glass_weave_analysisRecommend a PCB glass-weave styleA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_requestNoThe 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-asserted.
frequency_ghzNoOptional. Design frequency in GHz. Derived from the solved stackup / RF specs when omitted.
trace_width_mmNoOptional trace width in mm (default 0.1, worst-case narrow).
is_differential_pairNoOptional. True halves the effective tolerance (differential pairs are more skew-sensitive). Default false.
impedance_tolerance_pctNoOptional impedance tolerance target in percent (default 5).

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint=true already covering safety, the description still adds real behavioral context: defaults for tolerance/trace width, frequency derivation from the solved stackup, the differential-pair tolerance halving, and the caller-asserted vs verified labelling consequence of omitting user_request. The Phase-24/POST endpoint reference is implementation detail rather than agent-relevant behavior, keeping it out of the top score.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose and ranking logic are front-loaded in the first sentence, and the calling guidance follows. The third sentence on the Phase-24 engine and internal POST route is low-value for an agent deciding whether to call, marginally diluting otherwise efficient prose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description compensates functionally by explaining that results are ranked styles with the cheapest qualifying one marked. Combined with full parameter coverage and read-only annotations, an agent has enough to invoke correctly; only the exact result shape remains unspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the five parameters and their defaults are already fully documented in the schema; the baseline is 3. The description largely restates those same defaults (tolerance 5%, trace width 0.1, derivation when omitted) without adding syntax or format detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Recommend') and resource ('PCB glass-weave (fiber-weave) styles') and states the scope precisely: ranks catalogued styles by impedance variation and cost for the design frequency, and marks the cheapest one meeting the tolerance. This is distinguishable from every sibling analysis tool at a glance.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a concrete precondition and calling pattern -- 'call with no arguments once a design exists' -- plus which inputs are derived vs defaulted. It does not name a specific sibling or state exclusions (e.g. that a solved stackup must exist first), so it falls short of explicit alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_pdn_analysisRun power-delivery analysisA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNoOptional target-impedance config {voltage_v, ripple_pct, transient_current_a, rise_time_ns} or {preset_name}. Derived from the power-tree rail when omitted.
plane_pairsNoOptional. Power/ground plane pairs. Derived from the solved stackup when omitted.
user_requestNoThe 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-asserted.
decoupling_capsNoOptional. Decoupling capacitors. Derived from the BOM's PDN passive lines when omitted.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds real value beyond that: it discloses the server-side derivation of inputs and that the engine is the Phase-25 implementation behind POST /api/pdn/analyze. It does not cover failure modes or runtime characteristics, but that is a minor gap given the annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the purpose and outputs before the derivation and no-arg usage note. The internal engine/endpoint reference is slightly implementation-flavored but short enough to earn its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully enumerates what the analysis returns, and it explains that all four optional parameters are derived server-side. Combined with 100% schema coverage and read-only annotations, this is nearly complete, with only return format/pagination left unspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and each parameter's schema already documents its 'derived when omitted' behavior, so the description largely repeats structured data. It reinforces the no-argument default but adds no syntax or format detail beyond the schema, making the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (PDN impedance analysis) and enumerates the concrete outputs: interplanar capacitance, decoupling impedance vs. target, violations, and recommended caps. It is clearly distinguishable from sibling analysis tools like run_stackup_solver and run_thermal_analysis by domain and by the enumerated results.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear precondition ('call with no arguments once a design exists') and explains that all inputs are derived server-side, which tells the agent when the tool is applicable. It stops short of naming an alternative or stating when not to use it, so it is strong context rather than full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_planar_filterSynthesize a planar PCB filterA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
orderYesFilter order N (number of reactive elements), >= 1.
f0_ghzNoCenter frequency in GHz (BPF only).
fc_ghzNoCutoff frequency in GHz (LPF only).
z0_ohmYesSystem (port) impedance in ohms, e.g. 50.
responseYesPrototype response. chebyshev requires ripple_db.
topologyYesLPF: stepped_impedance or open_stub. BPF: parallel_coupled or hairpin. (interdigital/combline are Tier B — not implemented.)
ripple_dbNoPassband ripple in dB (required for chebyshev).
substrateYesPCB 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); optional t_mm (copper thickness), tan_d, fab_min_spacing_mm.
filter_classYesLow-pass or band-pass.
user_requestNoThe 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-asserted.
fractional_bwNoFractional bandwidth 0<Δ<1 (BPF only), e.g. 0.10 for 10%.
impedance_extremesNoStepped-impedance LPF only: zh_ohm (high-Z line) and zl_ohm (low-Z line). open_stub uses zh_ohm alone.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint=true and openWorldHint=false already covering the safety profile, the description adds substantive context: the analytical-formula basis, that it reuses the SSOT engine behind POST /api/planar-filter/compute, and that it emits 'accuracy warnings'. It goes beyond annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and supported topologies are front-loaded in the first sentence, followed by returns, usage, and exclusions. The long enumerated list of return artifacts is dense but every element is informative; there is little waste, though the returns clause could be tighter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 12-parameter tool with nested objects and no output schema, the description compensates well by spelling out what the call returns (impedances, width/spacing, footprint, response_curve and response_summary, accuracy warnings). Parameter-level detail is left to the fully-covered schema, so this is complete enough to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, including enum constraints and nested substrate fields, so the schema does the heavy lifting (baseline 3). The description's mentions of Chebyshev/Butterworth and topology restrictions largely restate what the schema already documents, adding little parameter-level meaning beyond it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Synthesize a passive planar copper-on-PCB filter from analytical formulas') and enumerates the supported topologies and responses. An agent can immediately tell this apart from all siblings (antenna, radar, link-budget, PDN tools), none of which synthesize filters.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use it to replace a purchased SMT filter with board copper' gives a clear when-to-use context, and 'Interdigital/combline are not implemented' marks the capability boundary. It stops short of naming alternative tools or when NOT to use this one, so it is clear-context but not full when/when-not routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_radar_performanceCompute radar range and waveform limitsA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
prfHzNoPulse repetition frequency (Hz).
rcsM2NoTarget radar cross-section (m^2). USER ASSUMPTION.
mdsDbmNoDetection floor (dBm). Reused from a prior link budget if omitted.
gainRxDbiNoReceive antenna gain (dBi); defaults to gainTxDbi (monostatic).
gainTxDbiNoTransmit antenna gain (dBi).
peakPowerWNoTransmit 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.
pulseWidthSNoPulse width tau (s).
frequencyGhzNoCarrier frequency (GHz).
peakPowerDbmNoTransmit peak power in dBm. Use ONLY when the user states dBm directly; otherwise pass peakPowerW. Wins if both are given.
systemLossDbNoSystem loss budget (dB). USER ASSUMPTION. Default 0.
targetRangeMNoTarget range (m). USER ASSUMPTION.
user_requestNoThe 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-asserted.
requiredSnrDbNoDetection SNR (dB) used to solve maximum range.
integrationModeNo'coherent' (+10log10 N) or 'noncoherent' (~6.5log10 N).
integrationCountNoPulses integrated (N >= 1). Default 1.
compressedBandwidthHzNoPulse-compression bandwidth B (Hz); overrides range resolution.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint=true, openWorldHint=false), yet the description adds real behavioral context: endpoint parity with POST /api/radar/performance, the fallback rule that MDS is inherited from a prior link budget, and the fact that RCS/target range/system loss are user assumptions disclosed on the result. It stops short of describing the return payload or numeric-edge behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the compute purpose, then two short sentences carrying the fallback and assumption-disclosure rules. Dense parenthetical enumerations but each clause maps to a real capability; no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 16 optional parameters, no output schema, and a complex physics domain, the description covers purpose, chaining, fallback inputs, and how results are labelled. It does not explain what happens when no parameters are supplied (all optional) or summarize the result shape, which is the remaining gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the parameter docs are already unusually rich (units, defaults, W-vs-dBm preference, assumption flags), so the baseline is 3. The description largely restates schema content (dBi gain entry, assumption disclosure) without adding syntax or precedence detail the schema lacks.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Compute') and resource ('radar performance') and then enumerates the exact outputs: monostatic range equation quantities (received power, SNR vs range, max detection range, integration gain) and pulsed-waveform relations (duty cycle, unambiguous range/velocity, range resolution, blind speeds). This is far more specific than siblings like run_link_budget or design_rf_chain, so an agent can route without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the note that the detection floor is 'reused from a prior link budget's MDS when not given' hints this tool chains downstream of run_link_budget, but it never states when to choose this tool over run_link_budget or run_compliance_analysis. No explicit when-not or exclusion criteria are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_stackup_solverSolve a PCB stackupA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
topologyNoTransmission line type: microstrip or stripline (default microstrip)
build_typeNoLamination build: 'single' (default) or HDI level hdi1-hdi4. HDI defaults cost_priority to performance.
layer_countYesTotal copper layers (even number, 2-32)
solder_maskNoSolder 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 impedance. OMIT IT (the default) and the microstrip is solved BARE — pass it only when the user says the outer traces are mask-covered, or states a mask thickness or mask Dk. Applies to microstrip targets only: a stripline is buried under laminate, not mask. Both members are optional and default to typical green LPI (0.02 mm, Dk 3.5); thickness_mm must be over 0 and at most 0.2, dk over 1 and at most 10. Mask LOSS is not modeled: the insertion-loss score leaves it out, and a masked result says so in diagnostics — tell your user when you cite a masked solve.
constructionNoLamination. OMIT it unless the user named one: an omitted lamination is built foil; naming a core material builds core_outer where it can be (4+ layers, build_type 'single'), whatever the frequency. 'foil' puts prepreg outermost, so an outer microstrip rides on prepreg; 'core_outer' puts a core outermost, so the core material, such as an RF laminate, sits directly under the outer microstrip — the same choice Guided Phase IV offers. 'auto' searches BOTH and ranks them together; send it only when the user asks to compare the two. On 6+ layers, naming a core outside the FR-4 grades (e.g. RO4350B) under core_outer ALSO searches hybrid boards: that core on the two outer cores, an FR-4 grade on the cores between (a hybrid solution names its inner_core_material); the other boards have every core that material. No hybrid with a stripline target. Each solution reports the construction it was built as; name it when you cite that solution.
user_requestNoThe 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-asserted.
cost_priorityNoCost 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 FR4-class laminate above every low-loss one. Pass it explicitly to override either default — a stated preference always wins. The priority actually used comes back as costPriority.
frequency_ghzYesOperating frequency in GHz
input_power_wNoRF 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.
max_solutionsNoMax solutions to return, 1-20 (default 5)
impedance_ohmsNoTarget impedance in Ohms (default 50). Single-target convenience — ignored when impedance_targets is given.
line_length_mmNoLength 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 line.
reflow_processNoAssembly reflow process; enforces a Tg floor on all dielectrics (default lead_free).
copper_weight_ozNoRestrict 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. The value is the FINISHED thickness, with outer-layer plating already included (1 oz = 0.035 mm finished, plated up from 0.5 oz starting foil). A spec written as '0.5 oz base foil + plating, 1.7 mil finished' uses the OTHER convention — pass 1, not 0.5.
impedance_targetsNoUp 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 for multi-impedance boards — e.g. 50 ohm RF plus a 100 ohm differential pair. Overrides impedance_ohms/topology.
target_thickness_milsNoBoard thickness in mils (default 62)
allowed_core_materialsNoRestrict core dielectrics to these catalog materials (e.g. RO4350B, MEGTRON6; 'FR4' = the standard FR-4 grades). Pass ONLY materials the user named; omit for the full catalog.
thickness_tolerance_mmNoAllowed 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 thicknessToleranceMm - cite that one.
allowed_prepreg_materialsNoRestrict prepregs to these catalog materials (e.g. RO4450F, MEGTRON6; 'FR4' = the standard FR-4 grades). Pass ONLY materials the user named; omit for the full catalog.
allowed_inner_core_materialsNoFor a HYBRID board (an RF core on the two outer cores, a cheaper laminate on the cores between them): the catalog materials the inner cores may be. Omitted, they are 'FR4' (the standard FR-4 grades). Pass ONLY what the user named for the inner cores; giving it also asks for hybrids.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=true and openWorldHint=false, so the description carries real weight and delivers it: it warns that mask loss is NOT modeled and that a masked result says so in diagnostics, discloses the cost_priority default overrides, and explains the construction/hybrid search behavior. These are non-obvious behavioral traits an agent cannot derive from the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads purpose and usage in the first two sentences, then uses the remaining space for the one genuinely confusing output relationship (per-layer vs pressed total) that would otherwise cause downstream misreporting. No filler or restatement of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description must explain returns, and it covers the highest-risk return semantics (prepreg thickness, pressed total, diagnostics). For a 20-parameter solver it leaves most return fields (loss, heat_w, costPriority) to the schema, which is reasonable but not exhaustive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3 and the schema already documents every one of the 20 parameters in detail. The description's numeric detail (prepreg_sheets x prepreg_sheet_thickness_mm, pressed thickness offset) describes returned fields rather than adding parameter syntax beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Run the impedance-aware stackup constraint solver') plus the concrete output the agent gets ('ranked material/thickness/copper solutions'). This is clearly distinguishable from sibling analysis tools like run_thermal_analysis or run_pdn_analysis, which compute different quantities.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger: 'Use when the user wants ranked material/thickness/copper solutions for a given layer count and frequency.' That is clear context for invocation, but it names no exclusions and no alternative sibling (e.g. when to prefer run_glass_weave_analysis or a config update instead).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_thermal_analysisRun thermal analysisA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
heatsinkNoOptional 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 partial object is rejected naming the missing field. When given it REPLACES still-air convection; the result echoes it with source 'user_supplied' and a heat_path.
delta_t_cNoThermal-cycling ΔT in °C for Coffin-Manson fatigue analysis (e.g. 100 °C from −40 to +60 °C operating swing).
via_configNoOptional thermal via array. ALL SEVEN properties are required together — a partial object is rejected — and plating_thickness_mm must be < via_diameter_mm / 2.
layer_countNoTotal copper layer count (even number, typically 2–32). Used to scale per-layer thermal contributions.
user_requestNoThe 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-asserted.
pour_area_mm2NoTotal copper-pour spreader area in mm² on the heat-sink side; larger pours reduce the spreading-Rth term.
analysis_inputNoOptional 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 thermal on the current design.
board_width_mmNoOverall PCB width in mm (warpage / CTE inputs).
stackup_layersNoOptional per-layer thermal contributions.
board_length_mmNoOverall PCB length in mm — used for Timoshenko warpage and CTE-mismatch curvature estimates.
source_area_mm2NoHeat source footprint area in mm² — typically the IC die or package pad footprint. Used for Kennedy spreading resistance.
theta_jc_c_per_wNoDevice 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.
copper_thickness_mmNoPlane/pour copper thickness in mm (e.g. 0.035 for 1 oz, 0.070 for 2 oz). Drives the lateral spreading conductance.
effective_cte_z_ppmNoEffective z-axis CTE in ppm/°C — input to Coffin-Manson barrel-stress life estimation. Typical 40–70 ppm/°C for FR4.
copper_coverage_top_pctNoFractional copper coverage on the top side (0–100 %). Used for warpage symmetry and effective-CTE calculations.
copper_coverage_bottom_pctNoFractional copper coverage on the bottom side (0–100 %). Asymmetry vs. top drives warpage predictions.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the readOnlyHint/openWorldHint annotations: discloses that power_w is taken from the designed chain's dissipated power, ambient_c defaults to 25 C, the result carries `recommendations` to answer adjustment questions, a supplied heatsink REPLACES still-air convection and is echoed with source 'user_supplied' and a heat_path, and results are labelled caller-asserted if user_request is omitted.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but front-loaded: purpose first, then invocation defaults, then heatsink handling. Some enumeration of models and overlap with schema text costs a little, but essentially every sentence carries actionable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 16-param, zero-required, no-output-schema tool, the description covers the critical behaviors (defaults, heatsink replacement semantics, recommendations output). It does not explain the shape of the returned result beyond `recommendations`/`heat_path`, but nothing needed to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (baseline 3), but the description adds real semantic value: heatsink θcs/θsa/mount must be 'all three as stated — never guessed', user_request should be the user's verbatim words to prove figures were stated not inferred, and analysis_input is optional once a design exists.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Run a full PCB thermal analysis') and enumerates the exact physics models computed (via array Rth, Kennedy spreading, Coffin-Manson, Timoshenko warpage, resin flow), which clearly separates it from siblings like run_pdn_analysis or run_stackup_solver.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear invocation context: 'Call with no arguments once a design exists', explains server-side defaults, and tells the agent when to supply `heatsink` (only when the user states one). It lacks an explicit when-not/alternative routing against sibling analyses, but the operating conditions are well defined.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool update
    • Addedfind_components_by_spec
  2. 3 tool updates
    • Addedcompare_rf_chains
    • Changeddesign_rf_chain1 field changed
      • addedInput schema / properties / board_mount_only
        Added value: +{
        +  "description": "true ONLY when the user asks for board-mount (surface-mount) parts only. The isolator after the PA then skips parts whose record says drop-in, flange, die or cable; if none is left the slot stays empty and the warnings say why. Other slots are not filtered yet.",
        +  "type": "boolean"
        +}
    • Changeddesign_rf_receiver1 field changed
      • addedInput schema / properties / targets
        Added value: +{
        +  "description": "Requirements the user stated, judged pass/fail in the result's validation. Keys: noiseFigure, sensitivity, mds, noiseFloor, imageRejection, sfdr, instantaneousDynamicRange, iip3, rxGain, rxGainMax. Each value is a number or {min, typ, max}. Only values the user gave; never invent one.",
        +  "type": "object"
        +}
  3. 1 tool update
    • Addedlookup_component_by_mpn
  4. 1 tool update
    • Changedrun_stackup_solver2 fields changed
      • addedInput schema / properties / input_power_w
        Added value: +{
        +  "description": "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.",
        +  "type": "number"
        +}
      • addedInput schema / properties / line_length_mm
        Added value: +{
        +  "description": "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 line.",
        +  "type": "number"
        +}
  5. 1 tool update
    • Changedrun_stackup_solver2 fields changed
      • addedInput schema / properties / allowed_inner_core_materials
        Added value: +{
        +  "description": "For a HYBRID board (an RF core on the two outer cores, a cheaper laminate on the cores between them): the catalog materials the inner cores may be. Omitted, they are 'FR4' (the standard FR-4 grades). Pass ONLY what the user named for the inner cores; giving it also asks for hybrids.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / construction / description
        Previous value: -"Lamination. OMIT it unless the user named one: an omitted lamination is built foil; naming a core material builds core_outer where it can be (4+ layers, build_type 'single'), whatever the frequency. 'foil' puts prepreg outermost, so an outer microstrip rides on prepreg; 'core_outer' puts a core outermost, so the core material, such as an RF laminate, sits directly under the outer microstrip — the same choice Guided Phase IV offers. 'auto' searches BOTH and ranks them together; send it only when the user asks to compare the two. Core outer makes EVERY core that material (N/2 cores), not only the outer pair. Each solution reports the construction it was built as; name it when you cite that solution."New value: +"Lamination. OMIT it unless the user named one: an omitted lamination is built foil; naming a core material builds core_outer where it can be (4+ layers, build_type 'single'), whatever the frequency. 'foil' puts prepreg outermost, so an outer microstrip rides on prepreg; 'core_outer' puts a core outermost, so the core material, such as an RF laminate, sits directly under the outer microstrip — the same choice Guided Phase IV offers. 'auto' searches BOTH and ranks them together; send it only when the user asks to compare the two. On 6+ layers, naming a core outside the FR-4 grades (e.g. RO4350B) under core_outer ALSO searches hybrid boards: that core on the two outer cores, an FR-4 grade on the cores between (a hybrid solution names its inner_core_material); the other boards have every core that material. No hybrid with a stripline target. Each solution reports the construction it was built as; name it when you cite that solution."
  6. 2 tool updates
    • Addeddesign_patch_antenna
    • Addedrun_glass_weave_analysis
  7. 1 tool update
    • Addedrun_planar_filter
  8. 2 tool updates
    • Addedrun_ota_link
    • Addedrun_radar_performance
  9. 2 tool updates
    • Changeddesign_tr_module6 fields changed
      • addedInput schema / properties / maxPulseToPulseAmplitudeDb
        Added value: +{
        +  "description": "The user's pulse-to-pulse amplitude stability requirement in dB. Not computed; reported as not evaluated with the reason. Omit when not stated.",
        +  "type": "number"
        +}
      • addedInput schema / properties / maxPulseToPulsePhaseDeg
        Added value: +{
        +  "description": "The user's pulse-to-pulse phase stability requirement in degrees. Not computed; reported as not evaluated with the reason. Omit when not stated.",
        +  "type": "number"
        +}
      • addedInput schema / properties / maxTxGainFlatnessDb
        Added value: +{
        +  "description": "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.",
        +  "type": "number"
        +}
      • addedInput schema / properties / maxUnblankingRecoveryS
        Added value: +{
        +  "description": "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.",
        +  "type": "number"
        +}
      • addedInput schema / properties / minDetectionRangeM
        Added value: +{
        +  "description": "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 when not stated — no requirement is assumed.",
        +  "type": "number"
        +}
      • addedInput schema / properties / minTxToRxIsolationDb
        Added value: +{
        +  "description": "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.",
        +  "type": "number"
        +}
    • Changedrun_stackup_solver3 fields changed
      • changedInput schema / properties / allowed_core_materials / description
        Previous value: -"Restrict core dielectrics to these catalog materials (e.g. RO4350B, MEGTRON6). Pass ONLY materials the user named; omit to search the full catalog."New value: +"Restrict core dielectrics to these catalog materials (e.g. RO4350B, MEGTRON6; 'FR4' = the standard FR-4 grades). Pass ONLY materials the user named; omit for the full catalog."
      • changedInput schema / properties / allowed_prepreg_materials / description
        Previous value: -"Restrict prepregs to these catalog materials (e.g. RO4450F, MEGTRON6). Pass ONLY materials the user named; omit to search the full catalog."New value: +"Restrict prepregs to these catalog materials (e.g. RO4450F, MEGTRON6; 'FR4' = the standard FR-4 grades). Pass ONLY materials the user named; omit for the full catalog."
      • changedInput schema / properties / construction / description
        Previous value: -"Lamination. OMIT it unless the user named one: an omitted lamination is built core_outer wherever core outer can be built (4+ layers, build_type 'single') and foil everywhere else (2 layers, any HDI build). 'foil' puts prepreg outermost, so an outer microstrip rides on prepreg; 'core_outer' puts a core outermost, so the core material, such as an RF laminate, sits directly under the outer microstrip — the same choice Guided Phase IV offers. 'auto' searches BOTH and ranks them together; send it only when the user asks to compare the two. Core outer makes EVERY core that material (N/2 cores), not only the outer pair. Each solution reports the construction it was built as; name it when you cite that solution."New value: +"Lamination. OMIT it unless the user named one: an omitted lamination is built foil; naming a core material builds core_outer where it can be (4+ layers, build_type 'single'), whatever the frequency. 'foil' puts prepreg outermost, so an outer microstrip rides on prepreg; 'core_outer' puts a core outermost, so the core material, such as an RF laminate, sits directly under the outer microstrip — the same choice Guided Phase IV offers. 'auto' searches BOTH and ranks them together; send it only when the user asks to compare the two. Core outer makes EVERY core that material (N/2 cores), not only the outer pair. Each solution reports the construction it was built as; name it when you cite that solution."
  10. 1 tool update
    • Changeddesign_tr_module1 field changed
      • changedInput schema / properties / antennaReturnLossDb / description
        Previous value: -"Antenna return loss in dB. Without it the antenna-mismatch leakage path is excluded and disclosed."New value: +"Antenna return loss in dB. Without it the antenna-mismatch leakage path assumes a 1.5:1 VSWR (13.98 dB) and says so."
  11. 9 tool updates
    • Changedcheck_grounding1 field changed
      • addedInput schema / properties / text / maxLength
        Added value: +100000
    • Changeddesign_rf_chain1 field changed
      • addedInput schema / properties / user_request / maxLength
        Added value: +4000
    • Changeddesign_rf_receiver1 field changed
      • addedInput schema / properties / user_request / maxLength
        Added value: +4000
    • Changeddesign_tr_module1 field changed
      • addedInput schema / properties / user_request / maxLength
        Added value: +4000
    • Changedrun_compliance_analysis1 field changed
      • addedInput schema / properties / user_request / maxLength
        Added value: +4000
    • Changedrun_link_budget1 field changed
      • addedInput schema / properties / user_request / maxLength
        Added value: +4000
    • Changedrun_pdn_analysis1 field changed
      • addedInput schema / properties / user_request / maxLength
        Added value: +4000
    • Changedrun_stackup_solver1 field changed
      • addedInput schema / properties / user_request / maxLength
        Added value: +4000
    • Changedrun_thermal_analysis1 field changed
      • addedInput schema / properties / user_request / maxLength
        Added value: +4000
  12. 9 tool updates
    • First observedcheck_grounding
    • First observeddesign_rf_chain
    • First observeddesign_rf_receiver
    • First observeddesign_tr_module
    • First observedrun_compliance_analysis
    • First observedrun_link_budget
    • First observedrun_pdn_analysis
    • First observedrun_stackup_solver
    • First observedrun_thermal_analysis

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to design RF filters and SMPS-EMC from spec using three MCP servers that drive LTspice, Qucs-S, and scikit-rf, with closed-form synthesis, real-component optimization, and CISPR-aware compliance checking.
    4
    AGPL 3.0
  • A
    license
    B
    quality
    B
    maintenance
    Enables closed-loop RF passive design from natural-language requirements to EM-verified Altium boards, automating parametric layout, HFSS simulation, and Optuna optimization via MCP tools.
    12
    3
    Apache 2.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    MCP server for rftools.io — 213 RF & electronics calculators + 13 server-side simulation tools for AI agents. Give Claude, Cursor, or any MCP-compatible AI assistant access to validated engineering calculators and heavy server-side simulations. Microstrip impedance, link budgets, filter design, converter sizing, antenna patterns, and 190+ more calculators — plus NEC2 antenna simulation, FDTD, Mon
    621 npm
    7
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI assistants to drive RF/microwave design and simulation workflows, including geometry synthesis, multi-solver execution, quality checks, and optimization, with sandboxed draft-and-validate edits.
    1
    GPL 3.0
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources