Rftools

io.github.antonpogrebenko-publicPublished by GitHub account antonpogrebenko-publicv2.6.1Updated Nov 1, 2026

255 RF & electronics calculators + 13 simulation tools for AI agents.

VerifiedSTDIODesktop onlyDeveloper ToolsData & Analytics

Overview

AI-generated overview

Runs 255 RF and electronics calculators locally and submits 13 server-side simulation jobs, so an assistant can size, solve and simulate RF, PCB and power…

What you can do
  • List and search calculators by category or by words in seven languages, and read one calculator's inputs, outputs, formula and JSON Schema
  • Run a calculator locally for free, or solve for the input value that hits a target output
  • Run typed simulation jobs: antenna, EMI, eye diagram, FDTD S-parameters, filter Monte Carlo, impedance matching, magnetics, PDN, radar, RF cascade, satellite link, SMPS loop, S-parameter pipeline
  • Submit a job, poll its status and fetch its result, with summaries or the full payload
  • Read the site's reference tables as resources
When to use it
Useful when an assistant is helping with RF, PCB, antenna, power-supply or EMC design work and needs concrete numbers — trace impedance, link budgets, filter tolerances, decoupling choices — or heavier field and Monte Carlo simulations without leaving the chat.
Requirements
Runs locally as an npm package via npx, so Node.js is needed. Calculators and file-free simulations work without credentials. An API key in RFTOOLS_API_KEY is required for file uploads and for solve_calculation, and raises simulation quotas; network access is needed for simulation jobs and solving.
Before you install
Simulation jobs and solve_calculation spend a metered monthly allowance (free accounts get 5 runs/month) and are not idempotent, so repeats spend again. Uploaded Touchstone files and simulation parameters are sent to rftools.io; file uploads are refused locally without RFTOOLS_API_KEY. Results are engineering estimates with stated assumptions and valid ranges, not certified designs.

Installation

In SourceWeft

  1. Open Rftools in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

rftools-mcp

[npm version] [License: MIT] [MCP]

MCP server for rftools.io — 255 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 200+ more calculators — plus NEC2 antenna simulation, FDTD, Monte Carlo, SMPS analysis, EMI estimation, and more, all callable as MCP tools.

Quick Start

Calculators work with no API key, and so do the simulation tools: without one, a job runs on the free lane. A key raises the limits — sign up at rftools.io and generate one from your dashboard. The one thing a key is required for is a file: uploading a file needs an API key; set RFTOOLS_API_KEY.

Setup

Without API key

All 255 calculators run locally with no sign-up required, and every simulation tool that takes no file still submits — on the free lane, with the free limits and the free-lane parameter bounds stated on the response.

A job type that takes a file is the exception. Uploading a file needs an API key; set RFTOOLS_API_KEY. Without one, a call carrying inputFiles or inputPaths is refused here, with that sentence, before the file is read and before any request leaves this machine.

With API key

Sign up at rftools.io and generate an API key from your dashboard. Free accounts include 5 simulation runs/month. Pro: 100/month. API tier: 10,000/month. A paid key also unlocks the modes the free lane cannot run: the antenna optimiser and the FDTD normal and fine meshes.

Claude Desktop

Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

json
{  "mcpServers": {    "rftools": {      "command": "npx",      "args": ["-y", "rftools-mcp"],      "env": {        "RFTOOLS_API_KEY": "rfc_your_key_here"      }    }  }}

Omit the env block to use calculators only. Restart Claude Desktop after saving.

Claude Code

bash
claude mcp add rftools-mcp -- npx -y rftools-mcp

To add your API key:

bash
claude mcp add rftools-mcp -e RFTOOLS_API_KEY=rfc_your_key_here -- npx -y rftools-mcp

Cursor

Add to .cursor/mcp.json in your project:

json
{  "mcpServers": {    "rftools": {      "command": "npx",      "args": ["-y", "rftools-mcp"],      "env": {        "RFTOOLS_API_KEY": "rfc_your_key_here"      }    }  }}

Windsurf

Add to ~/.codeium/windsurf/mcp_config.json:

json
{  "mcpServers": {    "rftools": {      "command": "npx",      "args": ["-y", "rftools-mcp"],      "env": {        "RFTOOLS_API_KEY": "rfc_your_key_here"      }    }  }}

Tools

24 tools: six for calculators, one simulate_* tool for each of the 13 job types, and five for the job lifecycle; plus the site's reference tables as resources.

What changed in 2.5.7

No tool changed. Results follow rftools.io's trace thermal model (changelog, 2026-10-14):

  • trace-width-current gains widthBoardMm and pcb-trace-temp gains tempRiseBoard and maxTempBoard: the width and rise for this board, from rftools' own thermal model (never labelled IPC-2152), with inModelRange and a 15 % margin. New optional inputs: boardThickness, planeDistance, planeCopperWeight (and isExternal on pcb-trace-temp).
  • provenance.validRange.models lists both fitted models on these two calculators, each with its own inside.
  • Both calculators refuse a zero or negative current, rise, copper weight or length, as the API does.

What changed in 2.5.6

No tool changed. simulate_emi_radiated's fields now use the exact π·µ₀/c and µ₀ (once the worker deploys), and calculator results follow the rftools.io formula follow-up (changelog, 2026-10-13):

  • Seven outputs are removed (breaking): differential-via's five impedances (a field solution showed they depend on the plane pitch, which is not an input), usb-termination eyeOpening and parabolic-dish-antenna noiseTemperature.
  • Values that do not exist are null (breaking): USB 3.0 rise time, crosstalk above the weak-coupling limit, sealed subwoofer at Qts ≥ 0.707, spiral Q at or above resonance, a lossless LC circuit's Q, a via with no stub; and a refused input returns no values instead of zeros.
  • Models corrected: the planar spiral's self-resonance and Q, Paul's two-end crosstalk with a far-end output, Margolis & Small port tuning, coupled-microstrip pcb-crosstalk, Balanis' slot model for the patch, LC Q in parallel mode plus the impedance at resonance, microvia arrays, via self-heating, BGA escape rows, IPC-2222 aspect ratios.
  • Exact constants: one η₀ = µ₀·c, η₀/2π in every microstrip impedance (−0.069 %), and IEC 60028 copper.
  • New inputs: planar-spiral-inductor frequency, pcb-crosstalk dielectricConst, aperture-diagonal routerBit.

What changed in 2.5.5

No tool or argument changed. Calculator inputs and outputs follow the rftools.io input audit (changelog, 2026-10-12):

  • Twelve inputs that never changed a result are retired: a call that still sends one is computed and answered with the warning "Input 'X' is not read by this calculator and was ignored." (get_calculator_schema no longer lists them).
  • Eight inputs now drive new outputs: patch-antenna's feed resistance at the inset, flyback's primary inductance, solar autonomy, the RS-485 baud rate against the cable's maximum, the ADC's Nyquist zone and alias, bldc-thermal's share of the rating, bldc-winding's no-load speed, and the ISM band. Yagi reports assumedBoomLength.
  • Four constant outputs are removed (breaking): balun-transformer vswr and insertionLoss, opamp-bandwidth slewLimited, capacitor-code voltageCode.
  • loop-antenna's gain includes its radiation efficiency (it always read 1.76 dBi); a radiationEfficiency output is added.

What changed in 2.5.4

No tool or name changed. trace-width-current's IPC-2152 width (width2152mm) is now IPC-2152 Figure 5-1 (the conservative chart, by its published closed form) instead of IPC-2221 × 0.75/0.85, which erred on the unsafe side: 5 A at a 10 °C rise in 1 oz copper needs 7.19 mm, not 2.09 mm. A new optional traceWidth input sets the width that resistance, voltage drop and power are computed at. pcb-trace-temp adds the Figure 5-1 rise and maximum temperature (rftools.io changelog, 2026-10-12).

What changed in 2.5.3

No tool, argument or name changed. Twelve calculators now compute the model they cite (rftools.io changelog, 2026-10-12):

  • mosfet-operating-point solves the drain load line (11.96 mA at the defaults, not 450 mA; biasMode 1 keeps the entered V_DS);
  • radar-range-equation takes the range at the required SNR (Albersheim, new pd, pfa and pulses inputs);
  • cable-shield-effectiveness refers the shielding to a 50 Ω line;
  • ferrite-bead uses a complex bead model (AN-1368);
  • bldc-motor solves the loaded speed;
  • ethernet-cable uses TIA-568-C.2 insertion loss at each PHY's signalling frequency (Category 8 on IEEE 802.3bq draft coefficients);
  • bldc-efficiency and bldc-thermal take I²·R copper loss, and bldc-thermal's hot resistance (it is null above the runaway current);
  • class-d-efficiency and motor-driver-power count two conducting FETs;
  • coax-impedance and via-calculator use η₀/2π.

What changed in 2.5.2

No tool, argument or name changed. bldc-winding now counts both coil sides in each slot (a double-layer winding), so its fill factor is 2·N·A_wire/A_slot and is no longer capped at 100 %. Its distribution factor comes from the star-of-slots method (12N14P: 0.933, not 0.966), and its default maximum current is 5 A, a winding that builds (rftools.io changelog, 2026-10-11).

What changed in 2.5.1

No tool, argument or name changed. Thirty-one calculators that computed something other than their cited reference now compute it, with the same numbers as the website and the REST API (rftools.io changelog, 2026-10-07). Among them: shielding-effectiveness (reflection loss carries η₀, 45.5 dB was missing; multiple reflections added), ground-plane-impedance (µ₀·h·l/w, with a new optional separation input, default 1 mm), speaker-crossover (2nd-order inductors √2·R/ω_c), esd-tvs-diode (IEC 61000-4-2's 3.75 A/kV first peak), common-mode-choke (a 50 Ω/50 Ω system), minimum-conductor-spacing (IPC-2221B Table 6-1 by band), radiated-emission-estimate (CISPR 32 Class B at the distance; no margin below 30 MHz or above 6 GHz) and via-thermal-resistance (IPC-2221 current capacity, new optional tempRise).

What changed in 2.5.0

No tool was added, removed or renamed, and no tool's arguments changed.

  • Fourteen new calculators (255 in all), each checked against a cited textbook, standard or datasheet value:
    • antennas: helical-antenna, monopole-antenna, antenna-downtilt;
    • RF: line-of-sight, wilkinson-power-divider, directional-coupler, circular-waveguide, microstrip-mitered-bend, 5g-nr-band-lookup (3GPP Release 18 band table) and 5g-nr-link-budget;
    • power: rc-snubber, rcd-clamp-snubber.
  • A new category, iot ("IoT & LPWAN"), holding lora-link-budget and ble-link-budget. list_calculators with category: "iot" lists them.
  • Corrected outputs:
    • filter-designer: its Chebyshev prototype values were wrong from order 4 (g3 1.5733, now 2.3661), a first-order Butterworth gave g1 = 1 (now 2), and the band-pass element values were ten times too small at Q = 10. The values are now computed, not tabulated.
    • waveguide-cutoff, free-space-path-loss, rf-link-budget, fresnel-zone, link-margin and radar-range-equation use the exact speed of light, not 3×10⁸. Lengths move by about 0.07 % and path loss by 0.006 dB. radar-range-equation also uses the exact Boltzmann constant.
    • planar-spiral-inductor refuses an inner diameter at or above the outer one instead of returning NaN.

What changed in 2.4.0

No existing tool was removed or renamed, and no existing tool's arguments changed: every name and every argument 2.3.0 accepted is accepted the same way.

  • New tool: search_calculators. Finds calculators by words — "trace impedance on FR4 microstrip" — instead of listing all 255. It matches English titles, keywords, input and output names and descriptions, and the German, Spanish, French, Japanese, Korean and Portuguese titles and keywords, so "マイクロストリップ インピーダンス" finds the microstrip calculator too.
  • New tool: get_calculator_schema. One calculator's inputs as a JSON Schema (2020-12): each a number with its unit, minimum, maximum, default and description, with the outputs, the formula and its reference, and the page URL. A misspelt identifier is refused with the closest ones.
  • run_calculation lists what it assumed. A new defaultedInputs field names every declared input the call left out, which therefore took its default. An undeclared input key is still computed around and named in a warning, in the REST API's wording; it is not refused.
  • Every tool carries annotations: a title and readOnlyHint, destructiveHint, idempotentHint and openWorldHint, so a host can tell what it may run without asking (see Annotations below).
  • Every description says what the tool answers, its inputs' units and ranges (or which tool states them), one complete example call and what it returns. The 13 simulate_* descriptions are generated from the website's tool registry, so they change when the tool does.
  • Reference tables as resources: frequency bands, RF connectors, standard values, component marking codes and PCB specifications, at rftools://reference/{domain}/{id} (see Reference resources below).
  • --manifest: npx rftools-mcp --manifest prints what this build lists — tools, resources, templates, counts — as JSON, and exits.
  • run_calculation's webUrl is now the page's canonical address, with its trailing slash.

Annotations

Toolsread-onlydestructiveidempotentopen world
list_calculators, search_calculators, get_calculator_info, get_calculator_schema, run_calculation, list_simulation_tools, get_simulation_status, get_simulation_resultyesnoyesno
solve_calculation, submit_simulation, run_simulation, every simulate_*nononono

A tool that starts a job or makes a metered call spends the account's monthly allowance, so it is not marked read-only — a host that runs read-only tools without asking would otherwise spend a free account's five runs unprompted — and it is not idempotent, because a repeat spends again (identical job submissions merge only inside 60 seconds). Nothing deletes or overwrites anything, and every tool talks only to rftools.io, so no tool is destructive or open-world.

What changed in 2.2.0

  • New tool: solve_calculation. Finds the value of one calculator input that makes an output equal a target — the trace width for 50 Ω, the gap for 90 Ω — instead of an agent guessing values and calling run_calculation in a loop. Unlike every other calculator tool, this runs the search server-side on rftools.io and requires an API key and spends one metered call — see solve_calculation below.

What changed in 2.1.0

  • Calculator results carry provenance. run_calculation returns a provenance object beside the values: the method (calculator:<slug>), the engine (mcp@<version>), the published formula source, the calculator's stated assumptions, the inputs it computed from, whether they lie inside the range the calculator is stated for (and, for a fitted model, its validated range and worst-case error), when it was computed and how long it took. It is the same object the rftools.io API returns.
  • An input left out takes its default, as on the website and the API; it used to reach the calculator as undefined. An input the calculator does not read is named in warnings, and so is an input outside its stated range — the value is still computed.
  • A simulation result's provenance is returned whole in the default summary. Series are still described rather than listed.

What changed in 2.0.0

  • One typed tool per job type. Each of the 13 simulation job types now has its own simulate_<jobType> tool (e.g. simulate_impedance_matching) with a real input schema — name, type, unit, range, options and default per parameter — generated from the job type's parameter contract. run_simulation still exists as a compatibility form that takes jobType and params, but prefer the typed tool: it is the one an agent can read the schema of.
  • Uploads go through this server, inline (inputFiles: [{name, content}]) or by path on this machine (inputPaths); a file-input job type needs RFTOOLS_API_KEY — see Files below.
  • submit_simulation / get_simulation_status / get_simulation_result are the fire-and-forget primitives underneath run_simulation and the typed tools, for a caller that wants to submit, do other work, and poll later.
  • run_simulation is now bounded by waitSeconds (default 90, maximum 600): it submits, polls, and if the job has not finished by the bound it returns the job id, status, progress and stage rather than blocking further — the job keeps running, and a later get_simulation_status / get_simulation_result call picks it up.
  • Results are summarised by default — summary, warnings, provenance, every scalar value, and long series described by length and extremes rather than listed in full. Pass full: true for the whole payload.
  • No defaults are posted. A simulate_* call sends only the parameters you name; it no longer fills in the contract's defaults itself. Since a sampling job type's random seed is derived from the request body, omitting a parameter and sending it at its default are the same request to the solver but not the same body, and can draw a different sample. Set randomSeed to pin a run exactly.
  • Typed errors. Failures are classified by the service's errorKind, not by matching message text — see When something goes wrong below.

Breaking:

  • list_simulation_tools no longer carries a hand-written sentence describing each job type's parameters; it lists them as a plain array of names (params: string[]). Read a simulate_* tool's own input schema for the type, unit, range, options and default of each parameter.
  • Unknown parameter keys are now refused locally, before any request leaves this machine — the same contract the service validates against, checked here first.

Calculator tools

list_calculators, search_calculators, get_calculator_info, get_calculator_schema and run_calculation need no API key — they run locally, for free. solve_calculation is the exception: it runs on rftools.io itself and needs a key, exactly as run_calculation needs none — see its own section below.

list_calculators

List available calculators, optionally filtered by category.

"List all RF calculators""What antenna calculators are available?""Show me power electronics calculators"

Parameters:

  • category (optional): rf, pcb, power, signal, antenna, general, motor, protocol, emc, thermal, sensor, unit-conversion, audio, iot
search_calculators

Find calculators by words, in English or in any of the site's other six languages, ranked by how well they match.

"Which calculator gives trace impedance on FR4 microstrip?""Find a calculator for battery charge time"

Parameters:

  • query (required): the words to match
  • category (optional): restrict to one category; an unknown one is refused with the list
  • limit (optional): 1 to 25 results, default 10

Each result carries slug, title, category, a one-line description, the page url and its score; matched says how many calculators matched in all. A search that matches nothing is returned as an error saying so, not as an empty list.

The ranking is deterministic, so the hosted endpoint can reproduce it exactly: text is NFKC-normalised and lower-cased; Latin text splits into words (accents folded, one plural s dropped), Japanese and Korean into character bigrams; each calculator field has a weight (English title 10, translated title 8, keywords 6, translated keywords 5, input and output names 3, description 2); a calculator scores the sum over the query's words of its best field weight times ln(1 + N/df); ties keep registry order. The rules are written out in src/calculator-search.ts.

get_calculator_info

Get detailed info about a calculator — inputs with units/defaults, outputs, and the formula used.

"What inputs does the microstrip impedance calculator need?""Show me the buck converter calculator parameters"

Parameters:

  • slug (required): Calculator identifier (e.g. "microstrip-impedance")

Each input carries its stated min/max (the same bounds run_calculation's provenance.validRange checks against). An input with neither is unbounded — solve_calculation needs an explicit range to solve for one of those.

get_calculator_schema

The same inputs as a JSON Schema (draft 2020-12) — what a call to run_calculation may send — with the outputs, the formula and the page URL.

Parameters:

  • slug (required): Calculator identifier. A misspelt one is refused, naming the three closest (microstrip-impedence → microstrip-impedance, …).

Returns inputSchema (each property a number with title, description — label, unit and tooltip — default, minimum, maximum and x-unit), outputs (key, label, unit), formula (primary, latex where there is one, and reference, the source the formula comes from) and url.

run_calculation

Run a calculator with specific inputs. Returns results with units, a link to the interactive version on rftools.io, defaultedInputs, and the result's provenance (formula source, assumptions, inputs used, whether they lie inside the calculator's stated range, engine version and time). An input left out takes its default and is named in defaultedInputs; an input key the calculator does not declare is not read and is named in warnings; a value outside the stated range is computed and named in warnings. Runs locally — instant, no quota consumed.

"Calculate microstrip impedance for a 0.3mm trace on 0.2mm Rogers RO4003C""What's the link budget for a 2.4 GHz link over 500m?""Size a buck converter: 12V in, 3.3V out, 2A"

Parameters:

  • slug (required): Calculator identifier
  • inputs (required): Object with input values, e.g. {"traceWidth": 0.3, "substrateHeight": 0.2}
solve_calculation — needs an API key, spends one metered call

Find the value of one calculator input that makes an output equal a target, instead of calling run_calculation in a loop to search for it yourself. The search runs server-side on rftools.io's own calculators — the same engine /calculate uses — so it needs an API key (RFTOOLS_API_KEY), the same one /calculate itself requires, and it is metered like any other API call. reached: false means no value inside the search range reaches the target; the value returned is then the nearest one the search found, not a guess.

"What trace width gives 50 Ω on 1.6mm FR4 with 1oz copper?""Find the gap that gives 90 Ω differential impedance for a 0.15mm trace"

Parameters:

  • slug (required): Calculator identifier
  • inputs (required): The calculator's other inputs, keyed by name — not including solveFor's own input
  • solveFor (required): Which declared numeric input to solve for, e.g. "traceWidth"
  • target (required): {"output": "impedance", "value": 50} — the output key and the value it should reach
  • grid (optional): Round the solution to the nearest multiple of this manufacturing grid, e.g. 0.001 (mm)
  • range (optional): [low, high], narrowing the search inside solveFor's stated bound. Required when get_calculator_info shows no min/max for that input.

The response carries value (on the grid, if one was given), unrounded, reached, evaluations, the solve's own warnings (e.g. another crossing exists in range), and result — exactly what run_calculation//calculate return for the calculator at that value, provenance included.


Simulation tools — no API key required unless the job takes a file

Server-side jobs that are too heavy for in-browser computation. Each of the 13 job types is its own tool, simulate_<name>, whose input schema is generated from that job type's parameter contract: every parameter typed, with its unit, range, options, default and any free-lane bound stated. A call is checked against that contract before anything is sent, so a wrong parameter name comes back naming the key and the keys that are accepted, and spends no quota.

Quota: Free: 5 runs/month · Pro: 100/month · API tier: 10,000/month. Without a key a job that takes no file still runs, on the free lane, and the response says which limits applied. A job that takes a file needs a key — see Files below.

Waiting: a simulate_* call submits and waits up to waitSeconds (default 90, maximum 600), polling immediately — a mode that finishes in a second costs no delay — and reporting progress to hosts that ask for it. On reaching the bound it returns the job id, status, progress and stage; the job keeps running, and get_simulation_status and get_simulation_result pick it up. waitSeconds: 0 submits and returns at once.

Results: the default is a summary — the result's summary, warnings and provenance, every scalar value, and links — with series longer than 50 points described by their length and extremes rather than listed, so a 100 kB result arrives as about 6 kB. Pass full: true for the whole payload. The link to the stored result (resultUrl) is presigned and lives 15 minutes; ask for the status again to mint a fresh one.

Repeat submissions: an identical submission inside 60 seconds returns the job already running rather than starting a second one.

Files: a file-input job type takes either inputFiles: [{name, content}] (inline text, up to 5 MB in one call) or inputPaths: ["/path/to/file.s2p"] (read from this machine). The server obtains the presigned upload, sends the file, and submits the job with the resulting key.

Uploading a file needs an API key; set RFTOOLS_API_KEY. The service refuses an anonymous upload, so this server refuses it first — locally, before the file is read and before any request is made — and says which variable to set rather than passing back a bare 401. The uploaded object is recorded against the key's account, and only that account may submit it.

The 13 job types
TooljobTypeWhat it doesFilesTime budgetPaid-only / free-lane bound
simulate_antenna_simantenna_simWire Antenna Simulator (NEC-2)—1200 ssolveMode: optimize
simulate_emi_radiatedemi_radiatedEMI Radiated Emissions Estimator—240 s—
simulate_eye_diagrameye_diagramEye Diagram from S-Parameters1 × .s2p .s4p120 s—
simulate_fdtd_sparamfdtd_sparamFDTD Transmission Line Simulator—32400 ssolveMode: normal, fine
simulate_filter_monte_carlofilter_monte_carloRF Filter Monte Carlo Analysis—120 smonteCarloIterations ≤ 500
simulate_impedance_matchingimpedance_matchBroadband Impedance Matching Synthesizer0–2 × .s2p120 s—
simulate_magnetics_optimizermagnetics_optimizerMagnetics & Transformer Design Optimizer—360 s—
simulate_pdn_impedancepdn_impedancePDN Impedance Analyzer & Decoupling Capacitor Optimizer—360 s—
simulate_radar_detectionradar_detectionRadar Detection Performance Monte Carlo—300 s—
simulate_rf_cascaderf_cascadeRF Cascade Budget Analyzer0–12 × .s2p180 s—
simulate_sat_link_budgetsat_link_budgetSatellite & Terrestrial Link Budget—240 s—
simulate_smps_control_loopsmps_control_loopSMPS Control Loop Stability Analyzer—300 s—
simulate_sparam_pipelinesparam_pipelineS-Parameter Analysis Pipeline1–4 × .s1p–.s4p120 s—

The time budget is the lane's cap, not an estimate: most jobs finish in 15–120 seconds, and queue wait may add more.

list_simulation_tools

Every job type with its tool name, parameter names, file rules, time budget and free-lane bounds — all read from the same contract the tools are generated from.

submit_simulation

Submit by job type and return at once with the job id, queue position and time budget. Takes jobType, params, and inputFiles / inputPaths for file-input job types — which need an API key; set RFTOOLS_API_KEY.

get_simulation_status

Progress, stage, queue position, start and finish times for a job id.

get_simulation_result

The finished result for a job id, summarised by default, whole with full: true.

run_simulation

The compatibility form of a simulate_* call: jobType, params, optional files (which need a key, as above), waitSeconds (default 90, max 600) and full. Prefer the typed simulate_* tool for the job you want — it is the one whose schema an agent can read.

"Analyse the PDN of a 100 × 80 mm four-layer board, port at the IC, target 10 mΩ""Run an eye diagram on this .s4p at 10 Gbps with PRBS-15""Synthesize a broadband matching network from 50Ω to 200Ω between 800–1200 MHz""Simulate a 3-element Yagi at 144 MHz and give me the pattern""Estimate radiated emissions from a 10 cm trace carrying 50 mA at 100 MHz"
When something goes wrong

Failures are classified by HTTP status and by the service's own error kind, never by matching text: an invalid key, a spent allowance, a rate limit with its retry time, a refused parameter (with the service's own detail, unchanged), a job too large for its lane, a mode the tier does not carry, a timeout and a service fault each read differently. Polling stops at once on a 4xx, and after five failures in a row that are not.


Reference resources

The tables published under rftools.io/reference are MCP resources, one per page, built from the same data the pages are, so the counts always match the site. Each domain has a template for lookup by identifier:

TemplateWhat each entry holds
rftools://reference/bands/{id}A frequency band: limits in Hz, wavelength, ITU designation, uses, propagation and regulatory notes
rftools://reference/connectors/{id}An RF connector: impedance, frequency and power limits, VSWR, mating cycles, materials, uses
rftools://reference/values/{id}A standard-value table: E24/E96 resistors, capacitors, AWG, drills, threads, SI prefixes
rftools://reference/codes/{id}A marking-code chart: SMD resistor codes, capacitor value, voltage, tolerance and dielectric codes
rftools://reference/pcb/{id}A PCB table: copper weight against thickness and current, standard board thicknesses

A read returns JSON with the entry's values, its source (the standards the page names and its note on where the values come from) and the page url. An unknown identifier fails with invalid params, naming the template and the valid identifiers. Hosts that offer completion can complete {id}.

Example Conversations

PCB Design

You: I need a 50-ohm microstrip on 1.6mm FR4 with 1oz copper. What trace width?

AI: Calls run_calculation with microstrip-impedance → A trace width of ~2.9mm gives you 50.2 Ω on 1.6mm FR4 (εr=4.2). View on rftools.io →

RF Link Budget

You: Will my 100mW 915 MHz LoRa link work at 2km with 3dBi antennas?

AI: Calls run_calculation with rf-link-budget → Received power: -72 dBm. With LoRa sensitivity at -137 dBm, you have 65 dB of link margin. Easily workable. View on rftools.io →

Power Electronics

You: Design a buck converter: 24V input, 5V output, 3A load, 500kHz switching.

AI: Calls run_calculation with buck-converter → Duty cycle: 20.8%, inductor: 17.4 μH, output cap: 22 μF. View on rftools.io →

All 255 Calculators

CategoryCountExamples
RF & Microwave36Microstrip impedance, coplanar waveguide (CPW/GCPW), VSWR/return loss, Smith chart, link budget, noise figure cascade, radar range, free-space path loss, mixer spur, Wilkinson divider, directional coupler, circular waveguide, line of sight, 5G NR band lookup and link budget
PCB Design36Trace width for current, controlled impedance, edge-coupled stripline pairs (symmetric, offset, embedded), differential via with stub loss, skin depth percentage, conductor-to-pad width, BGA breakout width, aperture diagonal, maximum pad diameter, effective dielectric constant, via step response, microvia current capacity, asymmetric (offset) stripline, dual stripline, broadside-coupled pair, differential pair, via calculator, crosstalk, critical trace length, fusing current, decoupling capacitor, padstack/annular ring, BGA land pad, conductor spacing, planar spiral inductor, embedded resistor, via voltage drop
Power Electronics23Buck converter, boost converter, flyback, LDO thermal, battery life, MOSFET dissipation, solar panel sizing, RC snubber, RCD clamp snubber
Signal Processing14Filter designer, ADC SNR, FFT bin resolution, PLL loop filter, BER/SNR, Johnson noise, rise time to bandwidth
Antenna Design11Dipole, patch, Yagi-Uda, horn, parabolic dish, loop, EIRP, beamwidth, helical, monopole/whip, antenna downtilt
General Electronics24Ohm's law, crystal PPM tolerance, op-amp gain, 555 timer, BJT bias, MOSFET operating point, Schmitt trigger, crystal load capacitance
Motor Control22DC motor speed, stepper, BLDC, servo, PID tuning, gear ratio, H-bridge selection, torque converter
Communications11UART baud rate, I2C pull-up, SPI timing, CAN bus, USB termination, RS-485, Ethernet, Modbus, LIN bus
EMC/EMI16Shielding effectiveness, EMI filter, ferrite bead, ESD/TVS diode, radiated emission estimate, common-mode choke
Thermal6Heatsink calculator, junction temperature, thermal via array, PCB trace temperature
Sensor Interface17NTC thermistor, RTD, thermocouple, Wheatstone bridge, load cell, photodiode, 4-20 mA loop transmitter
Unit Conversion19dBm↔Watts, rectangular↔polar, frequency↔wavelength, length (mm/mil/inch), AWG wire, capacitor code, temperature, inductance, data rate
Audio Electronics18Speaker crossover, room modes, headphone power, class-D efficiency, audio transformer, equalizer Q
IoT & LPWAN2LoRa link budget (sensitivity by spreading factor, time on air, duty-cycle off-time, Okumura–Hata range), BLE link budget by PHY (ITU-R P.1238 indoor path loss)

Why Use This Instead of Asking the AI to Calculate?

LLMs are unreliable at arithmetic. They may:

  • Use simplified formulas that omit corrections (e.g. copper thickness in microstrip)
  • Confuse units (mils vs mm, dBm vs dBW)
  • Accumulate rounding errors
  • Confidently present wrong answers

This MCP server calls the exact same validated calculator code that runs on rftools.io. Hammerstad-Jensen for microstrip, Friis for path loss, exact dB/linear conversions — real engineering formulas, not LLM approximations.

How It Works

Calculators are bundled as pure TypeScript functions — no API calls, no network latency, no rate limits. The AI calls the function directly and gets instant results.

AI Agent ←stdio→ rftools-mcp ←direct call→ calculator function

solve_calculation is the one calculator tool that is not a direct call: it runs the search on rftools.io's own calculators, so it needs an API key and is metered like a plain /calculate call — no queue, no polling, one request and one response.

AI Agent ←stdio→ rftools-mcp ←HTTPS (key required)→ POST /calculate/solve

Simulation tools run server-side on rftools.io infrastructure (AWS Lambda + SQS + EC2/Fargate workers). Their input schemas are generated at build time from the same parameter contract the website's forms are built from, so a contract change reaches the agent at the next release rather than through a hand-edited string. The server validates the call, uploads any files, submits the job, polls it within the wait bound while reporting progress, and returns a summarised result with a link to the whole payload.

AI Agent ←stdio→ rftools-mcp ←HTTPS (key optional)→ rftools.io API → SQS → worker                                ←poll /v1/jobs/{id}←                                ←result JSON from a 15-minute presigned link←

Machine-Readable Documentation

  • rftools.io/agents — This server's tools, install steps and example prompts, in seven languages
  • rftools.io/llms.txt — Summary with API info and MCP setup
  • rftools.io/llms-full.txt — Complete listing of all 255 calculators with inputs, outputs, units, and URLs
  • npx rftools-mcp --manifest — Everything this build lists (tools with their descriptions, annotations and input schemas, resources, templates and counts) as one JSON document; the agents page is built from it

Links

License

MIT

Source: README.md at commit 6b5e625

Tools

24

list_calculators

List Calculators

List the RF and electronics calculators on rftools.io, or those in one category. Inputs: category, optional: one of rf, pcb, power, signal, antenna, general, motor, protocol, emc, thermal, sensor, unit-conversion, audio, iot. An unknown category is refused with this list. Example: {"category":"pcb"} Returns: A JSON array with each calculator's slug, title, category and description. search_calculators finds one by words instead of listing all 255.

Parameterscategory

search_calculators

Search Calculators

Find the calculators that fit a task described in words, in English or in any of the languages rftools.io is published in. Inputs: query, the words to match (required; English, de, es, fr, ja, ko, pt); category, optional: one of rf, pcb, power, signal, antenna, general, motor, protocol, emc, thermal, sensor, unit-conversion, audio, iot; limit, optional, 1 to 25 results (default 10). Example: {"query":"trace impedance on FR4 microstrip","limit":5} Returns: The matches, highest score first, each with slug, title, category, a one-line description, the page URL and its score, plus how many calculators matched in all. A search that matches nothing is reported as an error saying so, not as an empty list. Pass a slug to get_calculator_schema or run_calculation.

Parameterslimitqueryrequiredcategory

get_calculator_info

Get Calculator Info

Describe one calculator: its inputs with units, defaults and bounds, its outputs, formula and keywords. Inputs: slug, a calculator identifier from list_calculators or search_calculators. Example: {"slug":"microstrip-impedance"} Returns: The calculator's slug, title, category and description; its inputs (key, label, unit, defaultValue, min, max, tooltip); its outputs (key, label, unit, tooltip); the formula and keywords. get_calculator_schema returns the same inputs as a JSON Schema.

Parametersslugrequired

get_calculator_schema

Get Calculator Schema

Give the exact input contract of one calculator as a JSON Schema, with its outputs, formula reference and page URL. Inputs: slug, a calculator identifier. A misspelt one is refused, naming the closest identifiers. Example: {"slug":"microstrip-impedance"} Returns: inputSchema, a JSON Schema 2020-12 object whose properties are the input keys, each a number with its unit (x-unit), minimum, maximum, default and description; outputs (key, label, unit); formula (primary text, LaTeX where there is one, and the reference it comes from); and url.

Parametersslugrequired

run_calculation

Run Calculation

Compute a calculator's outputs for given inputs, locally in this server, with no API key. Inputs: slug, and inputs keyed by the calculator's input names in the units get_calculator_schema reports. An input left out takes its declared default and is listed in defaultedInputs; a key the calculator does not declare is not read and is named in a warning; a value outside the declared range is still computed, with a warning naming the range. Example: {"slug":"microstrip-impedance","inputs":{"traceWidth":3,"substrateHeight":1.6,"dielectricConstant":4.3}} Returns: slug; results, one per output with key, label, value and unit; webUrl; defaultedInputs; warnings and errors when there are any; and provenance: the formula source, assumptions, whether the inputs lie in the range the calculator is stated for, the inputs used and the engine version.

Parametersslugrequiredinputsrequired

solve_calculation

Solve Calculation

Find the value of one calculator input that makes an output equal a target, such as the trace width that gives 50 Ω on microstrip-impedance. Inputs: slug; inputs, the calculator's other inputs keyed by name in its units; solveFor, the input to solve; target {output, value}; grid, optional, a step to round the answer to; range [low, high], required when solveFor states no bound. get_calculator_schema states every input and output key, unit and bound. Example: {"slug":"microstrip-impedance","inputs":{"substrateHeight":1.6,"dielectricConstant":4.2,"copperThickness":35},"solveFor":"traceWidth","target":{"output":"impedance","value":50}} Returns: The solved value (rounded to the grid when one is given, with the unrounded value), reached, which is false when no value in the range meets the target and the nearest value found is returned instead, the number of evaluations, warnings, and the full calculator result at that value with its provenance. Runs on rftools.io, not locally: it needs RFTOOLS_API_KEY and spends one metered call from the account's monthly allowance, like POST /calculate.

ParametersgridslugrequiredrangeinputsrequiredtargetrequiredsolveForrequired

simulate_antenna_sim

Wire Antenna Simulator (NEC-2)

Solve your own wire antenna with the NEC-2 method of moments: dipoles, Yagis, verticals and loops, element by element. Inputs: Units, ranges and defaults are in each parameter's schema; one left out takes its default. Free lane: solveMode cannot be optimize without a paid key. Cross-parameter checks: sweep_stop_after_start. Time budget 1200 s; waitSeconds (default 90, max 600) bounds the wait. Example: {"solveMode":"instant","freq":146000000} Returns: Peak gain, front-to-back ratio, beamwidths, feed impedance and VSWR (per frequency on a sweep, with the VSWR bandwidth), the azimuth and elevation patterns described as series, and for Optimize the recommended design and its Pareto front. Also warnings, provenance and the result page link; series are described, not listed (full: true returns everything). If waitSeconds runs out first: the jobId and progress, and the job keeps running. Runs as a job on rftools.io and counts against the monthly run allowance (free lane without a key).

ParametersfeedfreqfullwiresgroundfreqStopoptimizeconductorfreqStartsolveModefreqPointsgroundType+4 more

simulate_emi_radiated

EMI Radiated Emissions Estimator

Estimate radiated emissions from PCB loops and cables using Paul's analytical DM/CM models. Inputs: Units, ranges and defaults are in each parameter's schema; one left out takes its default. Time budget 240 s; waitSeconds (default 90, max 600) bounds the wait. Example: {"standard":"fcc_b","measDist":3,"dmCurrent_mA":5,"loopArea_cm2":0.5,"cmCurrent_uA":2,"cableLen_m":1,"fClk_MHz":480,"dutyCycle":50,"tRise_ns":0.5,"nTrials":100000} (the "USB 2.0 Trace Loop" preset) Returns: Pass or fail against the chosen limit, the margin at the 5th, 50th and 95th percentiles, the strongest harmonics, and the emission spectrum and limit line described as series. Also warnings, provenance and the result page link; series are described, not listed (full: true returns everything). If waitSeconds runs out first: the jobId and progress, and the job keeps running. Runs as a job on rftools.io and counts against the monthly run allowance (free lane without a key).

ParametersfullnTrialsfClk_MHzmeasDiststandardtRise_nsdutyCyclecableLen_mrandomSeedwaitSecondscmCurrent_uAdmCurrent_mA+1 more

simulate_eye_diagram

Eye Diagram from S-Parameters

Upload a Touchstone (.s2p) file and generate a PRBS eye diagram. Inputs: Units, ranges and defaults are in each parameter's schema; one left out takes its default. Takes 1 to 1 .s2p/.s4p file(s) via inputFiles (inline) or inputPaths (local paths); the server uploads them. Uploading a file needs an API key; set RFTOOLS_API_KEY. Time budget 120 s; waitSeconds (default 90, max 600) bounds the wait. Example: {"dataRate":10000000000,"prbs":"prbs15","samplesPerUI":64,"launchSwing":2000,"equalization":"none","maskType":"none","inputPaths":["/path/to/file.s2p"]} Returns: Eye height (also as a share of the swing), width and jitter at the best or a stated sampling phase, any mask's pass and margin, any CTLE's gain, peaking and the eye before it, the file's details and loss at Nyquist, and the eye traces, impulse response and transfer function as series. Also warnings, provenance and the result page link; series are described, not listed (full: true returns everything). If waitSeconds runs out first: the jobId and progress, and the job keeps running. Runs as a job on rftools.io and counts against the monthly run allowance (free lane without a key).

ParametersfullprbsdataRatemaskTypemaskWidthctleDcGaininputFilesinputPathslaunchSwingwaitSecondsequalizationsamplesPerUI+3 more

simulate_fdtd_sparam

FDTD Transmission Line Simulator

Solve microstrip stubs, coupled-line filters, via transitions, and step discontinuities across a ladder of named solve modes — from a 2D cross-section in seconds to a fine 3D openEMS field solve. Inputs: Units, ranges and defaults are in each parameter's schema; one left out takes its default. Free lane: solveMode cannot be normal or fine without a paid key. Cross-parameter checks: sweep_span_within_center. Time budget 32400 s; waitSeconds (default 90, max 600) bounds the wait. Example: {"structureType":"microstrip_open_stub","substrateName":"FR4","subEr":4.4,"subH":1.6,"subTanD":0.02,"traceW":3} Returns: The solve mode and method actually used, S11 and S21 in dB and the Smith-chart traces described as series, the summary figures such as resonance, notch depth and input impedance, and flags for a degraded or physically invalid result. Also warnings, provenance and the result page link; series are described, not listed (full: true returns everything). If waitSeconds runs out first: the jobId and progress, and the job keeps running. Runs as a job on rftools.io and counts against the monthly run allowance (free lane without a key).

Parametersw2fullgapWsubHstubLsubErviaARtraceLtraceWviaDiacopperTsubTanD+7 more

simulate_filter_monte_carlo

RF Filter Monte Carlo Analysis

Analyse how component tolerances affect your filter's passband ripple and stopband rejection. Inputs: Units, ranges and defaults are in each parameter's schema; one left out takes its default. Free lane: monteCarloIterations max 1000. Cross-parameter checks: filter_parts_ladder, filter_pass_criteria. Time budget 180 s; waitSeconds (default 90, max 600) bounds the wait. Example: {"filterType":"butterworth","bandType":"lowpass","order":5,"freqCutoff":1000000000,"ripple":0.5,"impedance":50} Returns: The yield and its 95% confidence interval against the ripple and rejection limits or the entered pass criteria and a target, failures and statistics per criterion with each part's share of the variance, failing trials, what-ifs on the same trials, and the envelope, sample trials and responses as series. Also warnings, provenance and the result page link; series are described, not listed (full: true returns everything). If waitSeconds runs out first: the jobId and progress, and the job keeps running. Runs as a job on rftools.io and counts against the monthly run allowance (free lane without a key).

ParametersfullorderpartsripplebandTypeimpedancefilterTypefreqCutoffrandomSeedwaitSecondsyieldTargetpassCriteria+5 more

simulate_impedance_matching

Broadband Impedance Matching Synthesizer

Synthesize L, Pi, T, or ladder matching networks for broadband impedance transformation. Inputs: Units, ranges and defaults are in each parameter's schema; one left out takes its default. Takes up to 2 .s2p/.s1p file(s) via inputFiles (inline) or inputPaths (local paths); the server uploads them. Uploading a file needs an API key; set RFTOOLS_API_KEY. Cross-parameter checks: sweep_stop_after_start, design_freq_in_band, load_model_fits_load. Time budget 120 s; waitSeconds (default 90, max 600) bounds the wait. Example: {"sourceR":50,"sourceX":0,"loadR":200,"loadX":0,"freqStart":800000000,"freqStop":1200000000} Returns: The chosen topology and its parts (snapped and ideal), the worst-case in-band return loss against the target, the loaded Q, and at f0 on the load model the return loss, VSWR, mismatch loss removed and RL ≥ 10 dB bandwidth, with the S11 and Smith-chart trajectory described as series. Also warnings, provenance and the result page link; series are described, not listed (full: true returns everything). If waitSeconds runs out first: the jobId and progress, and the job keeps running. Runs as a job on rftools.io and counts against the monthly run allowance (free lane without a key).

ParametersfullmaxQloadRloadXsourceRsourceXfreqStoptargetRLtopologyfreqStartloadModeldesignFreq+6 more

simulate_magnetics_optimizer

Magnetics & Transformer Design Optimizer

NSGA-II optimizer finds Pareto-optimal core and winding designs across 40 cores (E, ETD, PQ, RM and toroids) and 104 core/material combinations, with TDK and Ferroxcube ferrites and Micrometals iron powder. Inputs: Units, ranges and defaults are in each parameter's schema; one left out takes its default. Cross-parameter checks: converter_load_nonzero. Time budget 360 s; waitSeconds (default 90, max 600) bounds the wait. Example: {"topology":"flyback_xfmr","Vin":48,"Vout":12,"Iout":3,"fSw":100000,"dutyCycle":0.45} Returns: The best design (core, turns, air gap, wire gauges and flux densities), its losses, efficiency and temperature rise with a thermal pass or fail, and the Pareto front and evolution history described as series. Also warnings, provenance and the result page link; series are described, not listed (full: true returns everything). If waitSeconds runs out first: the jobId and progress, and the job keeps running. Runs as a job on rftools.io and counts against the monthly run allowance (free lane without a key).

ParametersVinfSwIoutTambTmaxVoutfulliPeak_AtopologydutyCyclepopulationrandomSeed+4 more

simulate_pdn_impedance

PDN Impedance Analyzer & Decoupling Capacitor Optimizer

Choose decoupling capacitors for a PCB power delivery network. Inputs: Units, ranges and defaults are in each parameter's schema; one left out takes its default. Cross-parameter checks: port_within_board, sweep_stop_after_start. Time budget 360 s; waitSeconds (default 90, max 600) bounds the wait. Example: {"boardWidth_mm":85,"boardLength_mm":54,"dielectricEr":4.5,"lossTangent":0.02,"boardThickness_mm":1,"portX_mm":28.3,"portY_mm":18,"vrmBandwidth_hz":100000,"vrmDcr_mohm":5,"targetImpedance_mohm":15,"freqMin_hz":1000,"freqMax_hz":500000000,"maxCapCount":15} (the "Credit Card Size (85x54mm)" preset) Returns: The chosen decoupling capacitors, the worst impedance in the decoupling band against the target with a pass or fail and any frequencies no budget can reach, the cavity resonances of the board, and the impedance curves described as series. Also warnings, provenance and the result page link; series are described, not listed (full: true returns everything). If waitSeconds runs out first: the jobId and progress, and the job keeps running. Runs as a job on rftools.io and counts against the monthly run allowance (free lane without a key).

ParametersfullportX_mmportY_mmfreqMax_hzfreqMin_hzrandomSeedlossTangentmaxCapCountportSize_mmvrmDcr_mohmwaitSecondsdielectricEr+6 more

simulate_radar_detection

Radar Detection Performance Monte Carlo

Compute probability of detection (Pd) vs range for pulsed radar systems. Inputs: Units, ranges and defaults are in each parameter's schema; one left out takes its default. Cross-parameter checks: probability_in_open_unit_interval. Time budget 300 s; waitSeconds (default 90, max 600) bounds the wait. Example: {"frequency_hz":3000000000,"peakPower_w":5000,"antGainTx_dbi":35,"antGainRx_dbi":35,"noiseFig_db":4,"pulseWidth_s":0.00001,"nPulses":20,"swerlingModel":"1","targetRcs_dbsm":5,"rangeMax_km":300} (the "Surveillance Radar (Long Range)" preset) Returns: The detection ranges at 50% and 90% probability, the SNR at maximum range, and the probability of detection against range with its 5th to 95th percentile band and the ROC curve described as series. Also warnings, provenance and the result page link; series are described, not listed (full: true returns everything). If waitSeconds runs out first: the jobId and progress, and the job keeps running. Runs as a job on rftools.io and counts against the monthly run allowance (free lane without a key).

ParameterspfafullnPulsesrandomSeedlossesRx_dblossesTx_dbnoiseFig_dbpeakPower_wrangeMax_kmwaitSecondsfrequency_hzpulseWidth_s+5 more

simulate_rf_cascade

RF Cascade Budget Analyzer

Compute cascaded noise figure, gain, IIP3, and P1dB for an N-stage RF signal chain using Friis formulas. Inputs: Units, ranges and defaults are in each parameter's schema; one left out takes its default. Takes up to 12 .s2p file(s) via inputFiles (inline) or inputPaths (local paths); the server uploads them. Uploading a file needs an API key; set RFTOOLS_API_KEY. Cross-parameter checks: stages_well_formed. Time budget 180 s; waitSeconds (default 90, max 600) bounds the wait. Example: {"stages":"[{\"name\":\"LNA\",\"type\":\"amp\",\"gain_db\":15,\"nf_db\":1.5,\"iip3_dbm\":-5,\"p1db_dbm\":-15},{\"name\":\"BPF\",\"type\":\"filter\",\"gain_db\":-1.5,\"nf_db\":1.5,\"iip3_dbm\":40,\"p1db_dbm\":30},{\"name\":\"Mixer\",\"type\":\"mixer\",\"gain_db\":-7,\"nf_db\":8,\"iip3_dbm\":12,\"p1db_dbm\":2},{\"name\":\"IF Amp\",\"type\":\"amp\",\"gain_db\":20,\"nf_db\":4,\"iip3_dbm\":10,\"p1db_dbm\":0},{\"name\":\"IF Filter\",\"type\":\"filter\",\"gain_db\":-2,\"nf_db\":2,\"iip3_dbm\":40,\"p1db_dbm\":30},{\"name\":\"ADC Driver\",\"type\":\"amp\",\"gain_db\":6,\"nf_db\":6,\"iip3_dbm\":18,\"p1db_dbm\":8}]"} Returns: Total gain, noise figure, input and output IIP3 and P1dB, SFDR and output power, the cumulative figures after each stage, and the Monte Carlo yield against the specs with its distributions described as series. Also warnings, provenance and the result page link; series are described, not listed (full: true returns everything). If waitSeconds runs out first: the jobId and progress, and the job keeps running. Runs as a job on rftools.io and counts against the monthly run allowance (free lane without a key).

ParametersfullstagesrequirednfSpec_dbsnrMin_dbinputFilesinputPathsgainSpec_dbwaitSecondsbandwidth_hziip3Spec_dbminputPower_dbmanalysisFreq_hz

simulate_smps_control_loop

SMPS Control Loop Stability Analyzer

Model switch-mode power supply control loops using small-signal transfer functions. Inputs: Units, ranges and defaults are in each parameter's schema; one left out takes its default. Cross-parameter checks: converter_duty_in_ccm_range, converter_load_nonzero, feedback_reference_within_output, crossover_solve_supported. Time budget 300 s; waitSeconds (default 90, max 600) bounds the wait. Example: {"topology":"buck","controlMode":"voltage_mode","Vin":12,"Vout":5,"Iout":2,"L":0.000047} Returns: The crossover frequency, phase and gain margins and a pass, fail or slow verdict against the minimums, the loop’s poles and zeros, any standard-value R_c, C_c and C_hf the solve placed, Monte Carlo margin statistics with the share of trials without a margin, and the loop gain, phase and plant responses as series. Also warnings, provenance and the result page link; series are described, not listed (full: true returns everything). If waitSeconds runs out first: the jobId and progress, and the job keeps running. Runs as a job on rftools.io and counts against the monthly run allowance (free lane without a key).

ParametersCLESRFswVinIoutVoutfulltolCtolLVrampcompK+26 more

simulate_sparam_pipeline

S-Parameter Analysis Pipeline

Upload up to 4 Touchstone files and get component values (L, C, R, Q, self-resonance) for a single component, plus insertion loss, return loss, group delay, TDR and passband ripple — all in one automated report. Inputs: Units, ranges and defaults are in each parameter's schema; one left out takes its default. Takes 1 to 4 .s1p/.s2p/.s3p/.s4p file(s) via inputFiles (inline) or inputPaths (local paths); the server uploads them. Uploading a file needs an API key; set RFTOOLS_API_KEY. Cross-parameter checks: sweep_stop_after_start. Time budget 120 s; waitSeconds (default 90, max 600) bounds the wait. Example: {"refImpedance":50,"freqStart":0,"freqStop":0,"inputPaths":["/path/to/file.s1p"]} Returns: The port count, frequency range and detected two-port topology, each analysis stage it ran (network representations, passivity, and the extracted R, L or C with Q and self-resonance) with its values described as series, and any advisories. Also warnings, provenance and the result page link; series are described, not listed (full: true returns everything). If waitSeconds runs out first: the jobId and progress, and the job keeps running. Runs as a job on rftools.io and counts against the monthly run allowance (free lane without a key).

ParametersfullfreqStopfreqStartinputFilesinputPathswaitSecondsrefImpedance

list_simulation_tools

List Simulation Tools

List the server-side simulation job types with their tool names, parameters, file rules, free-lane bounds and time budgets. Inputs: none. Example: {} Returns: count (13 today); the tier allowances; what runs without a key; how long a result link lives; the duplicate-submission window; and for each job type its simulate_* tool name, jobType, title, parameter names, time budget, file rules and free-lane bounds. Free tier: 5 runs/month. Pro: 100/month. API tier: 10 000/month. A job runs without a key on the free lane; a job that takes a file does not. Uploading a file needs an API key; set RFTOOLS_API_KEY.

Takes no parameters.

submit_simulation

Submit Simulation

Start a simulation job named by its job type and return at once with its id, without waiting for the result. Inputs: jobType, one of the 13 job types list_simulation_tools names; params, that job type's parameters, validated here against its contract before anything is sent (each one's unit, range and default is in the matching simulate_* tool's schema); inputFiles or inputPaths for a job type that takes files. Uploading a file needs an API key; set RFTOOLS_API_KEY. Example: {"jobType":"antenna_sim","params":{"solveMode":"instant","freq":146000000}} Returns: jobId, jobType, status, queue position, the time budget, a suggested wait and the result page URL. An identical submission inside 60 s returns the same job. Counts against the monthly run allowance. The typed simulate_* tool for a job type does the same and waits for the result.

ParametersparamsjobTyperequiredinputFilesinputPaths

get_simulation_status

Get Simulation Status

Report how far a submitted simulation job has got. Inputs: jobId, as submit_simulation or a simulate_* tool returned it. Example: {"jobId":"0b7c6f3e-5d1a-4c2e-9f8a-2a4e6b1d9c07"} Returns: status, progress from 0 to 1, stage, queue position, start and finish times, whether a result is ready, when the job expires, the result page URL, and for a failed job the error and its kind. Poll this rather than holding a call open; it spends nothing.

ParametersjobIdrequired

get_simulation_result

Get Simulation Result

Fetch the result of a finished simulation job. Inputs: jobId; full, optional, true for the whole payload instead of the summary (default false). Example: {"jobId":"0b7c6f3e-5d1a-4c2e-9f8a-2a4e6b1d9c07"} Returns: The headline values, warnings and provenance, with every series described rather than listed, the result page URL and a result link that lives 15 minutes. A job that has not finished returns its status and progress instead.

ParametersfulljobIdrequired

run_simulation

Run Simulation

Run a simulation job named by its job type and wait a bounded time for its result. Inputs: jobType, one of the 13 job types list_simulation_tools names; params, that job type's parameters, validated here against its contract before anything is sent (each one's unit, range and default is in the matching simulate_* tool's schema); inputFiles or inputPaths for a job type that takes files. Uploading a file needs an API key; set RFTOOLS_API_KEY. waitSeconds, 0 to 600 (default 90); full, optional, true for the whole payload. Example: {"jobType":"antenna_sim","params":{"solveMode":"instant","freq":146000000},"waitSeconds":60} Returns: The same result the job type's simulate_* tool returns. If the wait runs out first, the jobId and current progress instead, and the job keeps running. Counts against the monthly run allowance. Sends progress notifications while it waits. The typed simulate_* tool for a job type takes the same parameters with their units in its schema.

ParametersfullparamsjobTyperequiredinputFilesinputPathswaitSeconds

Version history

20
  1. v2.6.1LatestNov 1, 2026
  2. v2.6.0Oct 29, 2026
  3. v2.5.7Oct 14, 2026
  4. v2.5.6Oct 13, 2026
  5. v2.5.5Oct 12, 2026
  6. v2.5.4Oct 12, 2026
  7. v2.5.3Oct 12, 2026
  8. v2.5.2Oct 12, 2026
  9. v2.5.1Oct 7, 2026
  10. v2.5.0Oct 6, 2026
  11. v2.4.0Oct 3, 2026
  12. v2.3.0Oct 1, 2026
  13. v2.2.1Sep 30, 2026
  14. v2.2.0Sep 26, 2026
  15. v2.1.0Sep 25, 2026
  16. v2.0.0Sep 23, 2026
  17. v1.8.1Sep 20, 2026
  18. v1.8.0Sep 19, 2026
  19. v1.7.4Sep 18, 2026
  20. v1.7.3Sep 16, 2026

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts
  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts