Atlas / MCP servers / sbrunner-atx / fldigi-mcp

fldigi-mcpSAFE

mcp/sbrunner-atx/fldigi-mcp

Operate fldigi by chatting with an AI — read, tune, log, and transmit ham-radio digital modes through the Model Context Protocol.

Verdict
SAFE
Grade
B
Trust score
89 /100
Exposed tools
22 17r · 5w · 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.

An MCP server for controlling fldigi, the popular amateur-radio digital-modem application, from MCP-aware clients such as Claude Desktop.

fldigi ships a built-in XML-RPC control interface. fldigi-mcp connects to it and exposes the whole API as a small set of logically-grouped MCP tools, so an assistant can read the radio's state and drive the modem, rig, log, and transmitter through plain language.

Status: beta. Signal hunting (find, name and tune to a station from the receiver audio, 0.2.0) and full API coverage (every one of fldigi's 174 XML-RPC methods is reachable through a named operation, enforced by a test), callsign-gated transmit, and an optional experimental Band Guidance feature. Supports the current fldigi release, 4.2.13, verified live on 2026-09-09.

📻 A field-tested fldigi XML-RPC API reference (free community resource)

Building this server meant mapping fldigi's entire XML-RPC interface and verifying every method against a live build — so we've written it all up and are sharing it freely, whether or not you ever use this MCP server:

  • docs/fldigi-api.md — a clean, complete, human-readable

reference organized by namespace, with transport details, types, worked examples, a transmit-safety section, and field-tested gotchas.

  • docs/fldigi-api.pdf — the same, as a printable PDF.
  • docs/fldigi-api-spec.md — a terse,

machine-readable catalog of all 174 methods (args, return type, read/write/keying).

Verified live against fldigi 4.2.13 via fldigi.list on 2026-09-09 (the method list is identical to 4.2.11, first verified 2026-06-23). It's more complete and current than the public wiki (it documents methods the wiki omits, e.g. TxID, and flags deprecated ones). **Independent project — not affiliated

Read from source at commit 42fd6665b30bOBSERVED · 2026-10-12
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.

claude-code (pypi)
claude mcp add fldigi-mcp -- None fldigi-mcp==0.4.0
03

Exposed tools (22)

17 read · 5 write · 0 destructive.

ToolRiskDescription
applicationreadThe fldigi program and its process.
band_guidancereadAdvisory band guidance (experimental, region-aware) — informational / QSY help only.
browserreadfldigi
controlsreadfldigi operating controls (the AFC / SQL / Rev / Lock / RxID / TxID buttons) and status.
diagnosticsreadHost + network diagnostics for troubleshooting connectivity.
fldigi_callreadEscape hatch: call ANY fldigi XML-RPC method by dotted name (e.g.
flmsgwriteflmsg (message forms) interworking. operations: online, available, transfer,
frequencywriteRF frequency and waterfall sideband. operations: get, set (value=Hz),
ioreadARQ / KISS I/O port. operations: in_use (which port is active), enable_kiss,
legacyreadDeprecated fldigi methods, kept so the whole catalog is reachable. Each has a
logwriteLogbook (QSO / contest) fields. operations: get (field=...), set (field=..., value=...),
modemreadOperating mode (the fldigi
navtexreadNAVTEX / SitorB mode. operations: get_message (value=timeout seconds),
rigreadRig (CAT) control via flrig/Hamlib/RigCAT. operations: get/set_name,
rsidreadRSID bursts the detector heard: which modes were announced in the passband and
signal_huntreadFind and name the signals in the receiver audio and rank them the way a contest
spotreadSpotting / PSK Reporter. operations: get_auto, set_auto (value=bool),
statusreadSnapshot: version, modem, frequency (Hz), TX/RX state, transmit gate, region, band.
textwriteRX/TX text and data. operations: read (decoded RX text; start/length),
transmitreadTransmitter control. operations: tx, tune, rx, abort, disable_tx, enable_tx,
tune_towriteSet fldigi to a signal_hunt candidate: modem by fldigi name (e.g.
wefaxreadWEFAX (weather fax) mode. operations: state, skip_apt, skip_phasing, tx_abort,
04

Trust audit

SAFEgrade B · trust 89/100 Nothing in the source contradicts what it says it does. Grade A is reserved for packages that have also passed the behavioural sandbox.

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

What the source does

Filesystem
declared (1 observation(s))
Network
declared (2 observation(s))
Shell
none-observed
Dependencies
pinned
Secrets in source
none-found

Findings (7)

MEDIUMFilesystem / path · fs.system_paths · CWE-22, CWE-59
src/fldigi_mcp/process.py:32
"/usr/local/bin/fldigi",
LOWInventory / provenance · inv.hidden_file · CWE-1104
.mcpbignore
.mcpbignore
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
README.md:191
| `FLDIGI_HUNT_URL` | _(empty)_ | URL of a `fldigi-mcp-tap` running beside fldigi, e.g. `http://127.0.0.1:7365`, for when this server cannot open the sound card (sandbox, or fldigi on another machine)
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
docs/INSTALL.md:132
| somewhere without the sound card (Cowork sandbox, a container, or fldigi on a VM via mcp-host-bridge) | run `fldigi-mcp-tap --device iMic` beside fldigi and set **Signal-hunt tap URL** = `http://127
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
docs/fldigi-api.md:25
- **Endpoint:** `http://127.0.0.1:7362/` by default.
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
docs/fldigi-api.md:39
fldigi = xmlrpc.client.ServerProxy("http://127.0.0.1:7362/", allow_none=True)
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
docs/fldigi-api.md:390
f = xmlrpc.client.ServerProxy("http://127.0.0.1:7362/", allow_none=True)

Gates applied: no_behavioural_pass.

Audited 2026-10-12 · audit v0.4.1 · source sha 42fd6665b30bfull audit observations/trust-audit/mcp-server/sbrunner-atx__fldigi-mcp.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-1242fd6665b30bSAFEB89first audit
06

Questions

What is the fldigi-mcp MCP server?

Operate fldigi by chatting with an AI — read, tune, log, and transmit ham-radio digital modes through the Model Context Protocol.

What tools does fldigi-mcp expose?

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

Is fldigi-mcp safe to connect to an agent?

The audit found nothing in the source that contradicts what it says it does, and graded it B (89/100). Grade A is held back for packages that have also passed a sandboxed behavioural run, which is why a clean server reads B.

What credentials does fldigi-mcp need?

No credential environment variables were found in its source, so it appears to need none.

How does fldigi-mcp run?

It speaks stdio, so it runs as a local process your client starts. It is published on PyPI as fldigi-mcp.

How current is this page?

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

Advertisement