Atlas / MCP servers / geer1895 / rfauto

rfautoBLOCK

mcp/geer1895/rfauto

RF/microwave CAD automation + LLM orchestration: multi-solver tuning loop (HFSS/ADS/openEMS/Palace), calibration-anchored surrogate optimization, 71 EM templates, 254 CLI commands, 149 MCP tools, deterministic-kernel physics. GPL-3.0

Verdict
BLOCK
Grade
F
Trust score
31 /100
Exposed tools
30 19r · 11w · 0d
Transport
stdio
License
GPL-3.0
Stars
0
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

[]() []() []() []()

English | 简体中文

rfauto is an automation framework for RF/microwave design and simulation. Describe a device, get a first-cut geometry from physics formulas, simulate it with whichever solver you have, check the result for numerical artifacts, and let an optimizer tune the dimensions — with AI assistants allowed to drive the whole pipeline through MCP, under one hard rule:

Every physical number (frequency, loss, geometry) is produced by a deterministic kernel or solver — never by the LLM.

It drives 16 EM/EDA engines behind one interface, ships 71 parameterized device templates with built-in physics checks, and exposes 258 CLI commands and 152 MCP tools (+7 resources) — kept honest by 22300+ unit tests that run without any commercial license.

CALCULATOR_REGISTRY 100 (with experimental 101) · TEMPLATE_META 71 · EXPECTED_TEMPLATES 71 · ANCHORS 60 · CLI commands 258 (leaves) · (152 MCP tools + 7 resources)

Contents · Why · What it does · Trust layer · Quick start · The Web UI · Engines · Docs · Roadmap · Contributing

Why

RF simulation

Read from source at commit f35e25c57afbOBSERVED · 2026-10-13
Advertisement
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code
claude mcp add {{ cookiecutter.project_slug }} --env RFAUTO_C4_ARB_MAX_PASSES=${RFAUTO_C4_ARB_MAX_PASSES} --env RFAUTO_MAPES_G0_MAX_PASSES=${RFAUTO_MAPES_G0_MAX_PASSES} --env RFAUTO_MAPES_M_MAX_PASSES=${RFAUTO_MAPES_M_MAX_PASSES} -- uvx {{ cookiecutter.project_slug }}
claude-desktop
{
  "mcpServers": {
    "{{ cookiecutter.project_slug }}": {
      "command": "uvx",
      "args": [
        "{{ cookiecutter.project_slug }}"
      ],
      "env": {
        "RFAUTO_C4_ARB_MAX_PASSES": "${RFAUTO_C4_ARB_MAX_PASSES}",
        "RFAUTO_MAPES_G0_MAX_PASSES": "${RFAUTO_MAPES_G0_MAX_PASSES}",
        "RFAUTO_MAPES_M_MAX_PASSES": "${RFAUTO_MAPES_M_MAX_PASSES}"
      }
    }
  }
}
03

Exposed tools (30)

19 read · 11 write · 0 destructive.

ToolRiskDescription
adc_interleave_spursreadADC 交错杂散表(adc 域):fs/fin/路数 → 失配杂散清单(折叠第一奈区)。
autotune_self_verifyread自验证环(agent 域):propose→verify→fix 闭环+里程碑分解+执行看板。
create_runwrite提交仿真任务(jobs 域):配方+适配器 → 同步求解并返回 run_id。
create_run_asyncwrite异步提交仿真任务(jobs 域):配方+适配器 → 立即返回 job_id。
dataset_annotate_ground_truthreadground truth 标注(datasets_ops 域):白名单源清点 → manifest 回写。
dataset_export_hfreadHF 数据集导出(datasets_ops 域):数据集 → parquet 分片+数据卡目录。
dataset_set_visibilitywrite数据集可见性切换(datasets_ops 域):public/private → manifest 回写。
emc_cispr_band_paramsreadCISPR 检波器参数表(emc 域):Band A/B/C/D → 16-1-1 Table 1 四参数。
emc_cispr_detectreadCISPR 三检波器读数(emc 域):时域波形 → Peak/QP/Avg dBμV。
emc_cm_radiated_budgetreadCM 辐射预算(emc 域):浮地-机壳耦合电容 → I_CM → Ott 辐射场。
emc_ground_spacing_checkread接地间距判据(emc 域):间距/频率 → λ/20 等电位判据(Ott/Paul)。
export_report_pdfwritePDF 报告导出(report_bench 域):run 指标 → 多页 PDF(WP4.7)。
jitter_budget_snrread抖动预算 SNR(adc 域):RJ/DJ/BER → TJ 与等效 SNR(UI 域闭式)。
metasurface_coding_patternread编码超表面方向图(metasurface 域):码矩阵 → 远场摘要(2D DFT 权面)。
metasurface_quant_loss_dbread量化损失双报(metasurface 域):bits/阵规模 → 理论 sinc2+实测峰比(dB)。
multi_agent_runwrite评审/调优/验证三角色端到端(LangGraph 式图 + MCP 工具层 + A2A,WP3.8)。
nfc_coil_evaluatereadNFC 平面螺旋电感评估(nfc 域):几何 → Mohan 1999 电感闭式(H)。
nfc_coil_qreadNFC 线圈 Q 评估(nfc 域):频率+线圈参数 → 有载/无载 Q(T 模型精确式)。
nfc_coil_synthesizereadNFC 线圈综合(nfc 域):目标电感 → 外径二分反解(回代自洽 ≤1e-10)。
nfmeas_cut_viewread.ffs 切面视图(nfmeas 域):单频块 → 固定 φ 取 θ 扫描(或反之)。
nfmeas_ffs_inforead审计 HFSS .ffs 远场文件头(nfmeas 域):路径 → 频率/三功率/轴序。
recommend_templatesread模板推荐(specs 域):f0/族/端口数/关键词 → filter+rank 推荐表。
rf_run_samplerwrite验证采样内核(agent 域):params → metrics/valley(唯一产数环节)。
run_campaignwrite战役闭环执行(specs 域):已落盘计划 → 逐阶段执行(VI-2 基座)。
run_sweepwrite运行参数扫描(粗扫→精调,同步返回全量信封)。
sar_analytic_plane_waveread平面波 SAR 闭式对照(sar 域):组织参数+深度 → 随深衰减谱(判据锚)。
save_campaign_planwrite战役计划落盘(specs 域):plan dict → <out_dir>/campaign.plan.json。
start_tunewrite提交主优化任务(异步),立即返回 job_id。
t1readd
warm_start_optimizewritewarm-start 优化(report_bench 域):数据集历史样本 → 先验注入求解。
04

Trust audit

BLOCKgrade F · trust 31/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)FAIL
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (5 observation(s))
Network
declared (11 observation(s))
Shell
declared (11 observation(s))
Dependencies
pinned
Secrets in source
found

Findings (25)

HIGHCode injection · code.deserialize · CWE-78, CWE-94, CWE-95
src/rfauto/optimization/model_registry.py:336
model = pickle.load(f)
Why it matters. deserialises untrusted bytes into live objects
Fix. use json or yaml.safe_load
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
scripts/c3_fullcurve_runner.py:416
exec(compile(head, "c3_fullcurve_plan", "exec"), scope)   # 几何段(FDTD.Run 之前)
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
scripts/coax_f3_sweep.py:144
exec(compile(text[:cut], "coax_f3_dryrender", "exec"), scope)
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
scripts/df6_a1_r4_runner.py:466
exec(compile(head, "df6a1_audit", "exec"), scope)
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
scripts/df6_dp2_q_half_runner.py:282
exec(compile(head, "qhalf_audit", "exec"), scope)
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
scripts/diag_sma_launcher.py:293
exec(compile(head, "sma_diag", "exec"), scope)
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHPrompt injection · prompt.zero_width · CWE-94, CWE-1427
pyaedt_reference/app_types_special.md:1
# PyAEDT Application Types & Special Modules Reference
Why it matters. invisible characters in instruction text
Fix. strip non-printing characters
HIGHPrompt injection · prompt.zero_width · CWE-94, CWE-1427
pyaedt_reference/generic_internal.md:1
# PyAEDT `generic` + `internal` Modules Reference
Why it matters. invisible characters in instruction text
Fix. strip non-printing characters
HIGHPrompt injection · prompt.zero_width · CWE-94, CWE-1427
pyaedt_reference/modeler_complete.md:1
# PyAEDT Modeler Complete Reference
Why it matters. invisible characters in instruction text
Fix. strip non-printing characters
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
scripts/lit_mine_pipeline.py:750
mod = __import__(module)
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
src/rfauto/adapters/oe_templates/render_core.py:2814
"_FF_DIR = __import__(\"os\").path.dirname(\n"
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
src/rfauto/adapters/oe_templates/render_core.py:2815
"    __import__(\"os\").path.abspath(__file__))\n"
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
src/rfauto/adapters/oe_templates/render_core.py:2829
"    with open(__import__(\"os\").path.join(_FF_DIR,\n"
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
src/rfauto/adapters/oe_templates/render_core.py:2858
"    with open(__import__(\"os\").path.join(_FF_DIR,\n"
MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
src/rfauto/cli/domains/agent_kicad.py:127
console.print(f"  token: [cyan]{result['token']}[/cyan]")
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
configs/dsh/rfauto_mcp_server.cordis.yml:38
# url: http://127.0.0.1:8643/mcp
MEDIUMObfuscation / stealth · obf.homoglyph · CWE-506, CWE-94
configs/fake_calibration.yaml:23
#     3.5395≈3.54 自洽)。锚=对 HJ 推导 εeff 乘恒定频率尺度修正
MEDIUMObfuscation / stealth · obf.homoglyph · CWE-506, CWE-94
configs/fake_calibration.yaml:25
#     恒定、εr 物理含义不漂移;拒绝绝对覆盖(会把尺度修正换成硬编码绝对值)。
MEDIUMObfuscation / stealth · obf.homoglyph · CWE-506, CWE-94
configs/materials.yaml:11
# DP-7 P2 公差单源:εr 制造容差(半宽,εr 同单位)。消费方:
MEDIUMObfuscation / stealth · obf.homoglyph · CWE-506, CWE-94
configs/materials.yaml:56
# DP-7 P2 公差单源:εr 制造容差(半宽,εr 同单位)。核对状态=verified-web
MEDIUMObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
knowledge/formula_provenance.yaml:2139
- **Mohan 电流片方系数已核**(可达二级源 coil32.net/pcb-coil.html 逐位\n  读出,转引 Mohan/S.Hershenson/Boyd/Lee, IEEE\
MEDIUMHard-coded secrets · secret.db_uri · CWE-798, CWE-321
tests/unit/test_env_vars.py:85
assert "postgres://u:p@h/db" not in str(rows)
LOWInventory / provenance · inv.hidden_file · CWE-1104
.coveragerc
.coveragerc
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.importlinter
.importlinter
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.pre-commit-config.yaml
.pre-commit-config.yaml
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose

Gates applied: no_behavioural_pass.

Audited 2026-10-13 · audit v0.4.1 · source sha f35e25c57afbfull audit observations/trust-audit/mcp-server/geer1895__rfauto.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-13f35e25c57afbBLOCKF31first audit
06

Questions

What is the rfauto MCP server?

RF/microwave CAD automation + LLM orchestration: multi-solver tuning loop (HFSS/ADS/openEMS/Palace), calibration-anchored surrogate optimization, 71 EM templates, 254 CLI commands, 149 MCP tools, deterministic-kernel physics. GPL-3.0

What tools does rfauto expose?

30 in total: 19 read-only, 11 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is rfauto safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (31/100) and found 9 critical or high issues in the source. Each one is listed on this page with the file and line it is on.

What credentials does rfauto need?

It reads RFAUTO_C4_ARB_MAX_PASSES, RFAUTO_MAPES_G0_MAX_PASSES and RFAUTO_MAPES_M_MAX_PASSES from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does rfauto run?

It speaks stdio, so it runs as a local process your client starts. It is published on PyPI as {{ cookiecutter.project_slug }}.

How current is this page?

The grade is for one exact copy of the source (f35e25c57afb), read on 2026-10-13. The repository is watched and re-audited when it changes.

Advertisement