RadioChron

io.github.sergii-ziborov由 GitHub 帳號 sergii-ziborov 發布v0.7.0更新於 Oct 24, 2026

Local-first Wi-Fi incident diagnostics with native BLE scan, history, and risk evidence.

已驗證STDIO僅桌面位置與生活安全與監控

概覽

AI 產生的概覽

本地優先的 Wi-Fi 與低功耗藍牙診斷伺服器,讓助理根據本機原生無線電掃描取得結構化的故障結論。

可以做什麼
  • 一次完成綜合故障診斷,涵蓋 Wi-Fi 介面、射頻分析、連線各階段、歷史紀錄與可選的 BLE 證據
  • 檢查 Wi-Fi 狀態:介面關聯情形、鄰近網路的訊號與安全細節、分析發現、原生重新掃描與可取消的取樣
  • 依階段診斷連線,從無線電、驗證、DHCP、閘道、DNS、TCP 一路到網際網路
  • 啟動並讀取本機僅記錄變化的無線電事件日誌
  • 掃描、辨識、記錄並評估 BLE 廣播,保留歷史並提供消失類發現
適用情境
適合需要助理說明使用者本機 Wi-Fi 或藍牙為何異常,並希望取得結構化證據而非原始系統輸出的情境。適用於桌機排錯與本機故障報告,不適合遠端或大量裝置監控。
執行需求
以本機 stdio 程序執行,通常透過 npx radiochron-mcp 或 cargo 安裝的執行檔啟動;npm 預編譯套件涵蓋 Windows x64、Linux x64/ARM64 及兩種 Mac 架構。macOS 11 以上需為啟動它的應用程式或終端機授予藍牙權限;Linux 需執行 BlueZ 服務並可存取 D-Bus。在 Debian/Ubuntu 上從原始碼建置需 libdbus-1-dev 與 pkg-config。不需帳號或 API 金鑰;可用 RADIOCHRON_CHRONICLE_PATH 覆寫本機資料路徑。
安裝前請注意
SSID、BSSID、藍牙位址、廣播酬載與事件日誌都可能敏感,不過此伺服器聲明沒有遙測、不會把資料送出本機。事件日誌會寫入本機 JSONL 檔案。BLE 掃描只監聽,不連線周邊裝置。RSSI 僅是訊號證據,不代表距離或方向,藍牙私有位址會輪替,因此身分判斷有限。只有呼叫端提供目標時才會主動連線目標。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 RadioChron,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

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:

Install

The npm package carries verified native binaries for Windows x64, Linux x64/ARM64, Intel Mac, and Apple Silicon:

sh
claude mcp add radiochron -- npx -y radiochron-mcp

Or install the Rust binary from source:

sh
cargo install --git https://github.com/sergii-ziborov/radiochron-mcp

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:

json
{  "mcpServers": {    "radiochron": {      "command": "radiochron"    }  }}

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.

sh
radiochron status                  # association state of every adapterradiochron scan                    # look again, then list what is thereradiochron analyze                 # findings about the environmentradiochron report                  # the full Markdown diagnostic reportradiochron incident --ble          # one composite answer for "the Wi-Fi is broken"radiochron connectivity --dns example.com --tcp example.com:443radiochron ble scan --duration 4000radiochron chronicle recent --max 20radiochron --help                  # every command and flag

Add --json to any command for the raw tool result, which is what a script wants:

sh
radiochron networks --json | jq '.networks[] | select(.rssi_dbm > -60) | .ssid'

radiochron tool <name> [--args '<json>'] reaches any tool the catalogue publishes, including ones with no friendly spelling:

sh
radiochron tool ble_evaluate --args '{"now_ms":1717000000000}'

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.

SurfacePackageSpeaks MCP?Best for
MCP + CLIradiochron-mcpYes (stdio)Assistants, radiochron doctor, operator shell
Node/npmradiochronNoApps, Electron, services, CI probes

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

sh
# MCP / CLI — orchestrates collectors, then core::incident::classifyradiochron doctor --json
js
// Node — same classifier, in-process native bridgeimport { getRadioChronCoreClient } from 'radiochron';
const rc = getRadioChronCoreClient();const report = await rc.diagnose({ includeBle: false });console.log(report.assessment, report.causes);
js
// Optional: portable transfer matching MCP incident exportsimport { createIncidentBundle, readIncidentBundle } from 'radiochron';
const bytes = createIncidentBundle({  report,  producer: {    surface: 'node',    surface_version: '0.7.0',    core_version: '0.6.0'  }});// write bytes to a .rchron file, or round-trip:const again = readIncidentBundle(bytes);

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.

ToolPurpose
diagnose_incidentOrchestrate Wi-Fi, connectivity, history, chronicle, and optional native BLE evidence in one compact response
wifi_statusCurrent state of every WLAN interface
wifi_networksNearby BSS records with real dBm, security, width, and load; summary or full detail
wifi_analyzeSignal, contention, roaming, security, and scan-quality findings
wifi_history (Windows)Reconnect loops, key-exchange failures, and credential-mismatch evidence
wifi_sampleCancelable RSSI/rate/roaming sampling with progress
wifi_scanNative Wi-Fi refresh with per-interface completion/failure
connectivity_diagnoseSeparate radio, authentication, IP assignment, gateway, DNS, TCP, portal, TLS, quality, and Internet stages
chronicle_startStart the local rotating change-only JSONL recorder
chronicle_stopStop and flush the recorder
chronicle_statusRecorder state, path, counters, and latest error
chronicle_recentRecent entries from active and rotated files
ble_scanScan native adapters without connecting, normalize advertisements, update histories, and return risk evidence
ble_identifyIdentify a caller-supplied advertisement and hash its payload
ble_tracker_resetClear process-local BLE history and apply detector policy
ble_observeAdd an externally collected timed observation
ble_historiesFirst/last seen, recurrence, sensors, movement sessions, and RSSI summaries
ble_evaluateTime-based disappearance findings for expected identities

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-25 and 2025-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: true so 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.

來源:README.md,提交 8e3d404

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v0.7.0最新Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分