QNSQY
Linux only, local: post-quantum CBOM scan, encrypt to public keys, verify. Takes no secrets
Description from the maker (original English)
Cross-platform local-network diagnostics & security-posture MCP server — 31 tools.
These three are never merged into one score: opinions, measurements and popularity are different things.
We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.
Pick the AI app you use, then copy the settings.
NETEXPERT_MCP_CONFIG, NETEXPERT_HTTP_PORT, NETEXPERT_WIFI_IFYou need
Which app do you use?
Pick your app above. We remember it, so next time the button says “Install in …”.
Open Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json
{
"mcpServers": {
"netexpert": {
"command": "npx",
"args": [
"-y",
"netexpert-mcp"
],
"env": {
"NETEXPERT_MCP_CONFIG": "your-value",
"NETEXPERT_HTTP_PORT": "your-value",
"NETEXPERT_WIFI_IF": "your-value"
}
}
}
}Run this in your terminal
claude mcp add netexpert --env NETEXPERT_MCP_CONFIG=your-value --env NETEXPERT_HTTP_PORT=your-value --env NETEXPERT_WIFI_IF=your-value -- npx -y netexpert-mcpFill in the empty values before running it.
Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json
{
"mcpServers": {
"netexpert": {
"command": "npx",
"args": [
"-y",
"netexpert-mcp"
],
"env": {
"NETEXPERT_MCP_CONFIG": "your-value",
"NETEXPERT_HTTP_PORT": "your-value",
"NETEXPERT_WIFI_IF": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
Paste into .vscode/mcp.json in your project
{
"servers": {
"netexpert": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"netexpert-mcp"
],
"env": {
"NETEXPERT_MCP_CONFIG": "your-value",
"NETEXPERT_HTTP_PORT": "your-value",
"NETEXPERT_WIFI_IF": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
This one runs on your computer, and ChatGPT can only connect to servers on the internet. Pick another app.
Your choice stays on this device in a cookie; no account needed.
NETEXPERT_MCP_CONFIG envNETEXPERT_HTTP_PORT envNETEXPERT_WIFI_IF envThese settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.
Runs on your computer; the tool list appears in your AI app after you install it.
We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 8, 2026
The registry name was verified with the GitHub account Omodaka9375, which owns the repo
We have not read this repo from GitHub yet
We have not read this repo from GitHub yet
This one runs on your computer; there is no internet endpoint
Runs on your computer and uses local settings instead
Runs on your computer; we can only read tool lists from internet endpoints
Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.
It passed 1 of 1 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.
The registry does not list a required key, though some servers ask you to sign in on first use.
It runs on your computer. Your AI app starts it when needed, and data does not pass through the maker’s servers (unless it calls an online service itself).
The GitHub repo last changed –, and the latest version (0.1.3) reached the registry 21 days ago.
Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. You also need Node.js on your computer.
In the same category: QNSQY, EchelonGraph CVE & Exposure, WatchGuard MCP
Servers in the same category from other makers, sorted by stars.
Reading a card:★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi
Linux only, local: post-quantum CBOM scan, encrypt to public keys, verify. Takes no secrets
CVE, KEV, EPSS, SBOM and advisory lookups; per-CVE exposure from Shodan data (© Shodan). Keyless.
WatchGuard Cloud Firebox, Endpoint Security, ThreatSync, NDR and AuthPoint APIs for every customer
Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.
*"What's on my network, is my link healthy, is this machine safe, and why is X slow?"*
— answered by an AI, on your LAN, in one conversation.
netexpert is a cross-platform local-network diagnostics & security-posture MCP server for AI clients (Claude Desktop, Claude Code, or any client that speaks MCP). Windows, Linux, macOS — one normalized JSON envelope, 31 tools, zero config on first run, read-only by default.
It's the *local host + LAN* half of a home-lab toolkit — the NAS half already exists as ugnas-mcp, and the two compose.
Also listed in the MCP registry as io.github.Omodaka9375/netexpert-mcp.
The package is on npm — no clone, no build:
# run once, on demand (no install)
npx -y netexpert-mcp
npm install -g netexpert-mcp netexpert-mcp
Wire it into your MCP client (stdio):
{
"mcpServers": { "netexpert": { "command": "npx", "args": ["-y", "netexpert-mcp"] } } }
That's it — first run needs no config file, no environment variables, nothing. Ask your client *"what devices are on my network?"* and it has the tools to answer.
Optional HTTP transport (stateless, same JSON-RPC surface):
NETEXPERT_HTTP_PORT=3100 netexpert-mcp
Once wired into your client, try:
sec.exposure — listening ports × firewall state × a risky-port knowledge base, reported as Findings.lan.devices — ARP inventory enriched with IEEE-OUI vendor names and PTR hostnames.dns.hijackcheck — known-good domains via your system resolver vs trusted DoH; mismatch ⇒ Finding{severity:high}.wifi.health — RSSI quality bands, channel overlap, band mismatch — interpreted, with next steps.Existing network MCP servers are either deprecated Python packages, wrappers that demand Nmap, or router-config tools for enterprises. None of them answer the home-lab questions:
| Question | netexpert answer |
|---|---|
| *What devices are on my network — anything new?* | lan.devices builds an inventory (ARP ∪ sweep, OUI vendor, PTR hostname); lan.newdevices diffs it against snapshots and emits findings |
| *Is my WiFi actually good?* | wifi.health interprets RSSI bands, channel overlap, and band mismatch — with concrete next steps, not raw numbers |
| *Is this machine exposed?* | sec.exposure cross-references listening ports with firewall state and a risky-port knowledge base |
| *Is my DNS lying to me?* | dns.hijackcheck compares your system resolver against trusted DoH for known-good domains |
| *Why is X unreachable?* | Layered triage — link → ARP → routing/DNS → port → app (docs/persona.md) |
ok, backend, data, warnings / closed-set error.code + actionable hint) — no raw netsh or ip output ever reaches the model.execFile-style); all inputs are zod-validated before touching the OS. No raw sockets, no Npcap, no Python.lan.wol) uses a dry-run plan + single-use, 10-min-TTL confirmToken — parameters frozen at plan time.backend: "tcp-connect", not a fake "ping"); net.health self-describes what works on this host, with install hints for what doesn't.net.publicip, sec.speedtest, DoH in dns.hijackcheck), which you invoked explicitly.net.* — connectivity| Tool | What it does |
|---|---|
net.health | Version, platform, capability matrix (which backends exist on this host, with install hints) |
net.ping | ICMP loss/latency stats; honest TCP-connect fallback when ping is unavailable |
net.trace | Traceroute hops, normalized across tracert/traceroute/tracepath |
net.httpcheck | GET/HEAD with timing split: dns / connect / ttfb / total |
net.portcheck | Single TCP connect — open/closed + latency |
net.portscan | Bounded connect scan (≤256 ports, default top-20 common) |
net.ssl | TLS cert: subject, SANs, issuer, chain, days-left, expiry grade |
net.publicip | Your public IPv4 + ASN/org (ipify → ipinfo fallback) |
net.deepscan | Optional nmap adapter — opt-in only: requires the binary *and* nmap.enabled in config; RFC1918 targets only |
dns.* — name resolution| Tool | What it does |
|---|---|
dns.lookup | A/AAAA/CNAME/MX/TXT/NS/SRV/PTR with optional nameserver override |
dns.reverse | PTR names for an IP |
dns.resolvers | Which DNS servers the OS *actually* uses (per-platform) |
dns.propagation | Same record at system + trusted resolvers + DoH — diff table |
dns.hijackcheck | The killer check: known-good domains via system vs trusted DoH; mismatch or NXDOMAIN ⇒ Finding{sev:high} |
lan.* — devices & inventory| Tool | What it does |
|---|---|
lan.interfaces | NICs: name, MAC, addresses, type, virtual flag |
lan.gateway | Default gateway + interface + local subnet CIDR |
lan.arp | Parsed neighbor cache, stale entries filtered |
lan.sweep | Ping-probe an RFC1918 subnet (≤1024 hosts, rate-limited 1/30s) → live set |
lan.devices | Inventory: ARP ∩ RFC1918, enriched with vendor (40k-entry IEEE OUI db) + PTR hostname |
lan.hostname | All known names for an IP: PTR + NetBIOS (win) |
lan.snapshot | Save device inventory to dated snapshots; or list them |
lan.newdevices | Diff live vs baseline ⇒ findings (new MAC, MAC-changed-for-IP); first run auto-saves a baseline |
lan.wol | Wake-on-LAN magic packet — dry-run plan → confirmToken → one UDP broadcast |
wifi.* — link health| Tool | What it does |
|---|---|
wifi.status | Current link: SSID, BSSID, band, channel, RSSI, PHY rate, quality 0–100 |
wifi.networks | Nearby AP survey with band inference |
wifi.health | Interpretation: RSSI bands (≥−50 … <−78 unusable), 2.4 GHz channel overlap, band mismatch, low PHY rate — each a Finding with the next tool call |
sec.* — host posture| Tool | What it does |
|---|---|
sec.connections | Active sockets with owning PID |
sec.listening | Listeners per process; flags 0.0.0.0/:: exposures |
sec.firewall | Get-NetFirewallProfile / ufw→nft / socketfilterfw |
sec.exposure | Headline report: exposed listeners × firewall state × risky-port table (445, 3389, 23, 135–139, 5357, 5900) ⇒ Finding[] |
sec.speedtest | Bounded Cloudflare download; reports a lower bound instead of failing on slow links |
~/.netexpert-mcp/config.json — sane defaults, so zero-config first run:
{
"defaults": { "pingCount": 4, "traceMaxHops": 20 }, "resolvers": { "trusted": ["1.1.1.1", "8.8.8.8"], "dohUrl": "https://cloudflare-dns.com/dns-query" }, "caps": { "portscan": { "maxPorts": 256 }, "sweep": { "maxHosts": 1024 } }, "rate": { "sweep": 30, "portscan": 10, "speedtest": 60, "httpCheck": 2 }, "nmap": { "enabled": false } // deep scans are opt-in by design }
Invariants:
NETEXPERT_*: NETEXPERT_MCP_CONFIG (config path), NETEXPERT_HTTP_PORT, NETEXPERT_WIFI_IF (linux wlan iface)password/token/secret/credential is rejected at loadOptional extras:
winget install Insecure.Nmap / sudo apt install nmap), then set "nmap": { "enabled": true } in config. Absence just produces an install hint, never a crash.netexpert stays request/response; recurring checks are your MCP client's job:
New-device tripwire lan.newdevices every 15 min fire on Finding[] beyond the info baseline
Gateway reachability net.ping every 60 s fire on lossPct > 0 DNS integrity dns.hijackcheck hourly fire on sev=high WiFi degradation wifi.health every 10 min fire on severity ≥ med
docs/persona.mdThe server provides hands; the persona provides judgment. The rule pack in docs/persona.md gives your AI client:
git clone https://github.com/Omodaka9375/netexpert-mcp.git
cd netexpert-mcp pnpm install
pnpm typecheck # strict TS (Kai/Claude Code runs this after edits) pnpm test # 50 fixture-driven tests (fake runner, zero real network in units) pnpm build # → dist/ pnpm smoke # build → stdio → tools/list → net.health pnpm smoke:http # HTTP transport check node scripts/gen-oui.mjs # regenerate the OUI db (rarely needed)
Project layout:
src/
exec/ LocalExecutor (execFile, arg arrays) + per-platform CommandMaps (win32/linux/darwin) parse/ pure parsers (arp, ping, traceroute, netsh, iw, nmap -oG) — fixture-tested services/ coreService dnsService lanService wifiService secService nmapService safety/ caps.ts (bounds + token-bucket rate limiter) · confirm.ts (dry-run/confirmToken) data/ oui.json (40k IEEE OUI entries, committed) mcp/ toolset.ts (31 tools, zod inputs) · createServer.ts scripts/ gen-oui.mjs · smoke.mjs · http-smoke.mjs docs/ persona.md · index.html (the docs page) tests/ fixtures/ + 50 tests across 6 files
License: MIT — see LICENSE. npm: netexpert-mcp · MCP registry: io.github.Omodaka9375/netexpert-mcp Source & issues: GitHub