MCP on 127.0.0.1:8931
Let an agent drive the radio
An SDR receiver an LLM can operate: tune it, open channels, read what arrived, rewire the signal chain, and watch it happen in the window in front of you.
Every run of WaveShark serves the receiver over the Model Context Protocol at http://127.0.0.1:8931/mcp. It is the receiver on the screen rather than a headless second one, so what the agent tunes, opens or switches on appears in the window, and it can take a picture of that window to check what it did.
It reads the spectrum, the packets, the calls, the transcript and the tracker. It changes anything in the signal chain and draws the chain itself: add stages, wire them, delete them, undo, and go back to the automatic graph. It reaches the settings too, so it can add a scanner, store a memory, pick a voice, turn on a feed or manage the cached datasets.
The default listens on loopback only, because a socket that drives a radio should not be handed to a network by leaving a host out. --mcp-listen off stops it entirely, and a host:port puts it somewhere else deliberately.
On a radio that can transmit, a channel’s transmit source can be the agent itself. Give it a name and it answers when called: it hears the over, replies in its own voice through a local speech model, and keeps the conversation going for half a minute without being named again.
$ waveshark --headless --mcp-listen 8931 --print-log
$ waveshark --mcp-listen offWhy it drives the visible receiver
An agent with its own hidden radio is an agent whose mistakes are invisible. Driving the window means every tune, every channel and every edit to the chain is on the screen while it happens, and the screenshot tool means the model can see the same thing you can.
The read me has the full tool list, and the use case is the shorter version.
Run it with no window at all
--headless scans and logs exactly as the interface would, which is what belongs on the machine at the antenna.
The command line