Commit Graph
3 Commits
Author SHA1 Message Date
Jon BenistonandClaude Opus 5 c40770a172 MCP: discard a failed call's device set only if it is still the same one, and catch dotted Codex keys
The guard that removes a device set a failed listen or scan created compared only the index,
so a set another request had replaced at that index would have gone instead. The engine's UID
and the object's address are recorded at creation and checked before removal.

The Codex config writer now recognises sdrangel.url = "..." under [mcp_servers] as the server
already being defined, and refuses rather than adding a [mcp_servers.sdrangel] table a TOML
parser would reject as defined twice.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-14 10:36:40 +01:00
Jon BenistonandClaude Opus 5 a7330d6d13 MCP: review fixes across the tools, capture, streams, config writer and bridge
Tools: listen and scan reclaim their earlier channels before retuning the device, so a scanner
left running cannot move it in between; scan counts a range before building it; booleans are
read from JSON booleans, numbers and strings alike, so replace "false" is false and freeze 1
freezes; a MIMO device set takes receive and transmit channel types; deletion is serialised
from lookup to completion so two concurrent reclaims cannot take a third channel; tune_gain
refuses a gain or AGC key the device lacks; start_iq_recording checks the name first and cleans
up by UID; describe_settings emits a definition matched by name; remove_last_deviceset reports
a timeout; a device set a failed listen or scan created is removed again.

Capture: a name resolving to the capture directory itself is refused, a drive root works, and
files are listed by prefix rather than wildcard. The audio clock starts before the wait for the
sample rate. Subscriptions are capped per session, device set URIs checked, and absent device
sets skipped by the poll. The Codex writer drops dotted managed keys and refuses a spelling it
cannot rewrite rather than adding a duplicate table.

Bridge: one session at a time when SDRangel comes back, the stream socket is shut down rather
than closed from the other thread, SIGPIPE cannot end the process, and a failed notification
gets no reply.

Also: tool calls and audio captures give up when the server stops, so stopping the feature
cannot deadlock on a call waiting for the main thread; channels are held by UID throughout;
socket timeouts in the bridge; ResourceNotFound for a resources/read of a URI that is not there.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-14 10:09:13 +01:00
Jon Beniston 90c7952956 Add Codex & Claude Desktop top installation in the GUI 2026-09-12 09:04:13 +01:00