
RadioChron
io.github.sergii-ziborovPublished by GitHub account sergii-ziborovv0.7.0Updated Oct 24, 2026
Local-first Wi-Fi incident diagnostics with native BLE scan, history, and risk evidence.
Overview
Local-first Wi-Fi and Bluetooth Low Energy diagnostics server that gives an assistant typed incident verdicts from native radio scans.
- What you can do
- Run one combined incident diagnosis covering Wi-Fi interfaces, RF analysis, connectivity stages, history and optional BLE evidence
- Inspect Wi-Fi state: interface status, nearby networks with signal and security detail, analysis findings, native rescans and cancelable sampling
- Diagnose connectivity stage by stage from radio through authentication, DHCP, gateway, DNS, TCP and Internet
- Record and read a local change-only chronicle of radio events
- Scan, identify, observe and evaluate BLE advertisements, with retained histories and disappearance findings
- When to use it
- Useful when an assistant has to explain why Wi-Fi or Bluetooth is misbehaving on the user's own machine and needs structured evidence rather than raw operating-system output. It suits desktop troubleshooting and local incident reports, not remote or fleet monitoring.
- Requirements
- Runs as a local stdio process, typically via npx radiochron-mcp or a cargo-installed binary; prebuilt npm binaries cover Windows x64, Linux x64/ARM64 and both Mac architectures. macOS 11+ needs Bluetooth permission for the launching app or terminal; Linux needs a running BlueZ service and D-Bus access. Building from source on Debian/Ubuntu needs libdbus-1-dev and pkg-config. No account or API key; RADIOCHRON_CHRONICLE_PATH optionally overrides the local data path.
Installation
In SourceWeft
- Open RadioChron in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
radiochron-mcp
radiochron.com · the chronicle of your radio.
A local-first Model Context Protocol server
and command line for Wi-Fi incident diagnosis and Bluetooth Low Energy
observation. It combines native radio collection with the
radiochron Rust core, then
returns typed conclusions instead of forcing an assistant to interpret raw
operating-system output.
The two front ends are not two implementations. radiochron analyze and the
wifi_analyze tool run the same handler with the same bounds and the same error
text, so a conclusion never depends on how you asked for it.
The preferred MCP revision is 2025-11-25; clients that request
2025-06-18 receive the compatible legacy tool shape. Every tool has input and
output schemas, structured content, safety annotations, explicit execution
semantics, cancellation where work is long-running, and actionable separation
between JSON-RPC protocol errors and tool execution errors.
RadioChron repositories remain independent:
radiochronis the Rust/IoT core.radiochron-jsis the Node/npm library; it does not ship MCP.radiochron-mcpis this pure-Rust MCP server and command line.radiochron-agentis the unattended durable collector/exporter and does not depend on MCP.radiochron-electronis the standalone desktop app and does not depend on MCP.
Install
The npm package carries verified native binaries for Windows x64, Linux x64/ARM64, Intel Mac, and Apple Silicon:
Or install the Rust binary from source:
Building on Debian/Ubuntu requires libdbus-1-dev and pkg-config for the
BlueZ adapter. Prebuilt npm users do not need a Rust toolchain.
Register an installed binary with any stdio MCP client:
RADIOCHRON_CHRONICLE_PATH optionally overrides the local chronicle path:
%LOCALAPPDATA%\RadioChron on Windows, ~/Library/Application Support/RadioChron on macOS, or the XDG state directory on Linux.
Command line
The same binary is a CLI. Nothing extra to install — npx radiochron status
works from the npm package, and cargo install puts radiochron on PATH.
Add --json to any command for the raw tool result, which is what a script
wants:
radiochron tool <name> [--args '<json>'] reaches any tool the catalogue
publishes, including ones with no friendly spelling:
Unknown flags are refused rather than ignored, so a mistyped --durations
fails loudly instead of silently running with a default.
Running with no arguments still serves MCP over stdio, exactly as before, so
every existing client configuration keeps working. A terminal on stdin means a
person typed the name, and prints help instead; a pipe means a client, and
speaks the protocol. radiochron mcp forces the server explicitly.
Two commands are CLI-only, because they have no session to live in:
chronicle record runs the recorder in the foreground until you stop it, and
chronicle path prints where the journal is kept.
MCP versus Node (radiochron-js)
They share one Rust core and one incident classifier. They are not stacked.
Desktop imports radiochron (npm) only. It must never spawn the MCP server for
diagnosis — that would duplicate collectors and let cause logic drift.
Same verdict, two entry points
An assistant that needs radio evidence should call MCP tools. An application
that already runs Node should call radiochron directly and skip the MCP
process entirely.
Start with one tool
Use diagnose_incident first (CLI alias: radiochron doctor). The tool
orchestrates collectors and asks the shared core classifier for one incident
verdict. The response keeps independent sections for:
- current Wi-Fi interfaces and association;
- RF/environment analysis;
- radio → authentication → DHCP → gateway → DNS → TCP → Internet stages;
- Windows WLAN event history when available;
- recent change-only chronicle entries;
- an optional native BLE advertisement scan, normalized identities, retained histories, and evidence-based findings.
One unavailable collector does not discard the rest of the incident. Each
section has ok, data, or an actionable error, and the top-level
problems list is compact enough for an assistant to explain directly.
Targets are never contacted unless the caller supplies them.
Tool surface
Seventeen tools are portable. Windows exposes an eighteenth,
wifi_history, backed by WLAN AutoConfig.
ble_scan uses WinRT on Windows, BlueZ on Linux, and CoreBluetooth on macOS.
It listens only for devices observed during the requested scan window, does
not perform GATT connections, and feeds the same privacy-minimized RadioChron
tracker used by explicit ble_observe calls. iBeacon and Eddystone UID data
can provide stronger protocol identity; generic private addresses remain
ephemeral.
On macOS 11+, the host application or terminal launching the MCP process must
have Bluetooth permission. An app bundle needs
NSBluetoothAlwaysUsageDescription; a terminal-launched server requires
Bluetooth access for that terminal in System Settings. Linux requires a
running BlueZ service and access to the system D-Bus.
MCP behavior
- Newline-delimited UTF-8 JSON-RPC 2.0 over stdio; stdout contains MCP frames only.
- Negotiates both
2025-11-25and2025-06-18, preferring the current revision. - Current tool definitions declare
execution.taskSupport: "forbidden"because this local stdio server uses normal cancelable requests rather than durable experimental tasks. - Unknown methods and malformed call envelopes use JSON-RPC errors.
- Tool input/radio/platform failures use
isError: trueso a model can correct arguments or explain the platform problem. - Structured results are also serialized into text content for older clients.
- Source files are architecture-gated at 300 lines; real stdio conformance tests cover current and legacy lifecycle/catalog/error behavior.
The tools and resource request paths use the Tokio-free mcport runtime and
its blazingly-json value/codec surface. RadioChron keeps only its strict
initialize/notification lifecycle locally. Native BLE collection uses the
separate radiochron-native-ble crate, which talks directly to WinRT, BlueZ
D-Bus, and CoreBluetooth without btleplug, Tokio, or futures. The portable
radiochron core remains independent of host Bluetooth APIs.
Safety and privacy
SSIDs, BSSIDs, Bluetooth addresses, advertisement payloads, and event logs can be sensitive. The server has no telemetry and sends nothing off the machine. The chronicle writes only its rotating local JSONL file. Saved Wi-Fi passwords are never read.
RSSI is signal evidence, not physical distance or direction. Private Bluetooth addresses can rotate, so clone/recurrence claims require protocol identity or caller-provided identity. Native BLE scanning never connects to peripherals.
The MCP surface intentionally excludes plaintext Wi-Fi keys, adapter MAC changes, adapter restarts, computer rename, active LAN sweeps, arbitrary shell execution, and external AI review.
Release
Releases are assembled from one green cross-platform CI run. The npm archive
must contain revision-matched binaries and provenance sidecars for all five
targets. An immutable version tag publishes the npm package through the
protected repository secret, then publishes the matching server.json to the
official MCP Registry through GitHub OIDC. The npm credential is the masked,
tag-gated NPM_TOKEN GitHub Actions secret; the MCP Registry uses no
long-lived token.
License
Licensed under the MIT License. The underlying radiochron Rust
core remains separately dual-licensed under MIT or Apache-2.0.
Source: README.md at commit 8e3d404
Tools
0Version history
1- v0.7.0LatestSep 16, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts