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 分