197 RF & electronics calculators for AI agents: microstrip, link budget, filters, power and more.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Inspect callable tools, capabilities, and parameters exposed to AI agents by Rftools.
simulate_antenna_simWire Antenna Simulator (NEC-2)
simulate_emi_radiatedEMI Radiated Emissions Estimator
simulate_eye_diagramEye Diagram from S-Parameters
simulate_fdtd_sparamFDTD Transmission Line Simulator
simulate_filter_monte_carloRF Filter Monte Carlo Analysis
simulate_impedance_matchingBroadband Impedance Matching Synthesizer
MCP server for rftools.io β 241 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.
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.
All 241 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.
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.
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
Omit the env block to use calculators only. Restart Claude Desktop after saving.
To add your API key:
Add to .cursor/mcp.json in your project:
Add to ~/.codeium/windsurf/mcp_config.json:
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.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.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.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.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.list_calculatorsList available calculators, optionally filtered by category.
Parameters:
category (optional): rf, pcb, power, signal, antenna, general, motor, protocol, emc, thermal, sensor, unit-conversion, audioget_calculator_infoGet detailed info about a calculator β inputs with units/defaults, outputs, and the formula used.
Parameters:
slug (required): Calculator identifier (e.g. "microstrip-impedance")run_calculationRun a calculator with specific inputs. Returns results with units and a link to the interactive version on rftools.io. Runs locally β instant, no quota consumed.
Parameters:
slug (required): Calculator identifierinputs (required): Object with input values, e.g. {"traceWidth": 0.3, "substrateHeight": 0.2}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.
Factual signals from GitHub, npm, and our automated checks β not a rating.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/rftools)<a href="https://allmcps.com/mcp/rftools"><img src="https://allmcps.com/api/badge/rftools?style=directory" alt="Rftools on AllMCPs" /></a>