mcpField
N
netexpert-mcp

netexpert-mcp

本地服务
github.com/Omodaka9375安全15 天前更新

关于 netexpert-mcp

netexpert-mcp 是面向家庭实验室用户和 AI 客户端的跨平台 MCP 服务,用于本地网络诊断与主机安全检查。它在 Windows、Linux 和 macOS 上提供统一结果,工具有调用上限且默认只读。

主要功能

  1. 0131 种网络与安全工具
  2. 02局域网设备清单与变更检测
  3. 03Wi-Fi 与 DNS 健康检查
  4. 04主机暴露面与防火墙检查
  5. 05跨平台统一 JSON 结果
  6. 06操作限界且默认只读

适用场景

  1. 01查找局域网设备及新出现的主机
  2. 02诊断 Wi-Fi 质量或 DNS 不一致
  3. 03排查连接与服务可达性问题
  4. 04检查监听端口和防火墙暴露

MCP 相关

向 MCP 客户端提供网络、局域网、Wi-Fi、DNS 和安全工具。支持 stdio,也可选用无状态 HTTP 传输。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"omodaka9375-netexpert": {
"command": "npx",
"args": [
"-y",
"netexpert-mcp"
],
"env": {
"NETEXPERT_MCP_CONFIG": "<NETEXPERT_MCP_CONFIG>",
"NETEXPERT_HTTP_PORT": "<NETEXPERT_HTTP_PORT>",
"NETEXPERT_WIFI_IF": "<NETEXPERT_WIFI_IF>"
}
}
}
}
启动命令npx -y netexpert-mcp
需要配置的环境变量
NETEXPERT_MCP_CONFIGPath to the config JSON (default: ~/.netexpert-mcp/config.json). Zero-config: every key is optional. See the README for the schema.
NETEXPERT_HTTP_PORTIf set (>0), also expose a stateless streamable HTTP transport at that port: POST /mcp (JSON-RPC) + GET /health. Loopback by default.
NETEXPERT_WIFI_IFLinux only: the wlan interface for iw-based WiFi status (default wlan0).

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmnetexpert-mcp0.1.3

工具

31

收录的工具列表 · 更新于 2 周前

此工具无需参数。

详细介绍

netexpert-mcp

“我的网络上有哪些设备?连接正常吗?这台机器安全吗?为什么 X 这么慢?” — AI 在你的局域网中,通过一次对话给出答案。

netexpert 是一款跨平台的本地网络诊断与安全态势 MCP 服务,面向 AI 客户端(Claude Desktop、Claude Code,或任何支持 MCP 的客户端)。支持 Windows、Linux 和 macOS——使用统一的 JSON 封装,提供 31 个工具,首次运行无需配置,默认只读。

它是家庭实验室工具包中面向本地主机 + 局域网的部分——NAS 部分已有 ugnas-mcp,两者可组合使用。

它也已作为 io.github.Omodaka9375/netexpert-mcp 列入 MCP 注册表。


安装

此软件包已发布到 npm——无需克隆或构建:

# run once, on demand (no install)
npx -y netexpert-mcp

# or install globally
npm install -g netexpert-mcp
netexpert-mcp

将其接入你的 MCP 客户端(stdio):

{
  "mcpServers": {
    "netexpert": {
      "command": "npx",
      "args": ["-y", "netexpert-mcp"]
    }
  }
}

就是这么简单——首次运行无需配置文件、环境变量或其他设置。询问客户端*“我的网络上有哪些设备?”*,它就能调用相应工具给出答案。

可选的 HTTP 传输(无状态,使用相同的 JSON-RPC 接口):

NETEXPERT_HTTP_PORT=3100 netexpert-mcp
# POST http://127.0.0.1:3100/mcp     (tools/list, tools/call)
# GET  http://127.0.0.1:3100/health  (liveness)

30 秒快速体验

接入客户端后,试着问:

  1. “我的设备暴露在网络上了吗?” → 客户端调用 sec.exposure——结合监听端口、防火墙状态和高风险端口知识库进行检查,并以 Finding 报告结果。
  2. “我的网络上有哪些设备?” → lan.devices——通过 ARP 清单补充 IEEE-OUI 厂商名称和 PTR 主机名。
  3. “我的 DNS 是否在欺骗我?” → dns.hijackcheck——通过系统解析器与可信 DoH 分别查询已知正常的域名;不匹配时会产生 Finding{severity:high}。
  4. “我的 WiFi 信号好吗?” → wifi.health——解读 RSSI 质量等级、信道重叠和频段不匹配情况,并提供后续操作建议。

项目缘起

现有的网络 MCP 服务要么是已弃用的 Python 软件包,要么是要求安装 Nmap 的封装,要么是面向企业的路由器配置工具。它们都无法回答家庭实验室用户关心的问题:

问题netexpert 的回答
我的网络上有哪些设备?有没有新设备?lan.devices 会构建设备清单(ARP ∪ 扫描、OUI 厂商、PTR 主机名);lan.newdevices 会将其与快照进行比较,并生成发现结果
我的 WiFi 信号到底好不好?wifi.health 会解读 RSSI 等级、信道重叠和频段不匹配情况,并给出具体的后续操作建议,而不只是提供原始数字
这台机器暴露在网络上了吗?sec.exposure 会交叉检查监听端口、防火墙状态和高风险端口知识库
我的 DNS 是否在欺骗我?dns.hijackcheck 会将系统解析器与可信 DoH 的查询结果进行比较,检查已知正常的域名
为什么无法访问 X?分层诊断——链路 → ARP → 路由/DNS → 端口 → 应用(docs/persona.md)

设计保证

  • 统一封装。 所有工具都返回相同的 JSON 结构(ok、backend、data、warnings / 固定集合中的 error.code + 可执行的 hint)——netsh 或 ip 的原始输出绝不会传给模型。
  • 平台归一化。 Windows、Linux 和 macOS 使用相同的字段名称;平台分派逻辑位于服务层之下。
  • 所有操作都有边界。 端口数、主机数、字节数上限、超时和令牌桶速率限制均由代码强制执行——绝不交由模型自行判断。
  • 绝不调用 shell。 所有子进程都通过参数数组启动(execFile 风格);所有输入在访问操作系统前都经过 zod 验证。不使用原始套接字、Npcap 或 Python。
  • 默认只读。 唯一会修改状态的工具(lan.wol)采用试运行计划 + 单次使用、有效期为 10 分钟的 confirmToken——参数在生成计划时即被冻结。
  • 如实说明能力。 工具会报告数据由哪个后端生成(backend: "tcp-connect",而非虚构的“ping”);net.health 会说明此主机上哪些功能可用,并为不可用的功能提供安装提示。
  • 无遥测。 不会主动向外发送数据——但明确用于访问互联网的三个工具除外(net.publicip、sec.speedtest,以及 dns.hijackcheck 中的 DoH);只有在你主动调用时才会使用它们。

工具目录(31)

net.* — 连通性
工具功能
net.health版本、平台、能力矩阵(此主机上有哪些后端,以及安装提示)
net.pingICMP 丢包率/延迟统计;ping 不可用时,诚实地回退到 TCP 连接测试
net.trace路由跟踪跳数,并在 tracert/traceroute/tracepath 之间统一格式
net.httpcheckGET/HEAD,细分计时:dns/connect/ttfb/total
net.portcheck单次 TCP 连接测试 — 开放/关闭状态及延迟
net.portscan有界连接扫描(≤256 个端口,默认扫描最常见的前 20 个)
net.sslTLS 证书:主题、SAN、颁发者、证书链、剩余天数、到期等级
net.publicip你的公网 IPv4 + ASN/组织(先用 ipify,失败时回退到 ipinfo)
net.deepscan可选的 nmap 适配器 — 仅主动启用:必须安装二进制文件,且在配置中设置 nmap.enabled;仅限 RFC1918 目标
dns.* — 名称解析
工具功能
dns.lookupA/AAAA/CNAME/MX/TXT/NS/SRV/PTR 查询,可选覆盖名称服务器
dns.reverse查询 IP 的 PTR 名称
dns.resolvers操作系统实际使用的 DNS 服务器(按平台区分)
dns.propagation对比系统、可信解析器和 DoH 上的同一记录 — 差异表
dns.hijackcheck关键检查:通过系统与可信 DoH 查询已知正常的域名;不匹配或 NXDOMAIN ⇒ Finding{sev:high}
lan.* — 设备与资产清单
工具功能
lan.interfaces网卡:名称、MAC、地址、类型、是否为虚拟网卡
lan.gateway默认网关 + 接口 + 本地子网 CIDR
lan.arp解析后的邻居缓存,并过滤过期条目
lan.sweep对 RFC1918 子网进行 Ping 探测(≤1024 台主机,每 30 秒限速 1 次)→ 在线设备集合
lan.devices资产清单:ARP ∩ RFC1918,补充厂商信息(4 万条记录的 IEEE OUI 数据库)+ PTR 主机名
lan.hostnameIP 的所有已知名称:PTR + NetBIOS(win)
lan.snapshot将设备资产清单保存到带日期的快照;或列出快照
lan.newdevices比较实时数据与基线 ⇒ 发现项(新 MAC、IP 对应的 MAC 已更改);首次运行时自动保存基线
lan.wolWake-on-LAN 魔术包 — 先生成演练计划 → confirmToken → 发送一次 UDP 广播
wifi.* — 链路健康状况
工具功能
wifi.status当前链路:SSID、BSSID、频段、信道、RSSI、PHY 速率、0–100 的质量评分
wifi.networks扫描附近的 AP,并推断频段
wifi.health状况解读:RSSI 区间(≥−50 … <−78 时不可用)、2.4 GHz 信道重叠、频段不匹配、PHY 速率过低 — 每项均为一个 Finding,并附带下一步工具调用
sec.* — 主机安全状况
工具功能
sec.connections带所属 PID 的活动套接字
sec.listening按进程列出监听端口;标记 0.0.0.0/:: 暴露
sec.firewallGet-NetFirewallProfile / ufw→nft / socketfilterfw
sec.exposure概览报告:暴露的监听端口 × 防火墙状态 × 高风险端口表(445、3389、23、135–139、5357、5900)⇒ Finding[]
sec.speedtest有界 Cloudflare 下载;网速较慢时报告下限,而非失败

配置(均为可选)

~/.netexpert-mcp/config.json — 使用合理默认值,因此首次运行无需配置:

{
  "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
}

不变条件:

  • 限制值均为上限 — 工具输入可以更低,但不能更高
  • 通过 NETEXPERT_* 环境变量覆盖:NETEXPERT_MCP_CONFIG(配置路径)、NETEXPERT_HTTP_PORT、NETEXPERT_WIFI_IF(Linux wlan 接口)
  • 绝不使用凭据 — 加载时会拒绝任何包含 password/token/secret/credential 的配置键

可选扩展:

  • nmap 深度扫描 — 安装 nmap(winget install Insecure.Nmap / sudo apt install nmap),然后在配置中设置 "nmap": { "enabled": true }。未安装时只会提供安装提示,绝不会导致崩溃。
  • OUI 厂商数据库 — 随软件包提供;运行时不会获取。

无需守护进程的监控

netexpert 保持请求/响应模式;定期检查由你的 MCP 客户端负责:

New-device tripwire   lan.newdevices    every 15 min   fire on Finding[] beyond the info baseline
Gateway reachability  net.ping <gw>    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

AI 使用 — docs/persona.md

服务提供双手,角色提供判断。docs/persona.md 中的规则包为你的 AI 客户端提供:

  1. 分诊阶梯(链路 → ARP → IP/DNS → 端口 → 应用 — 始终说明哪个层级排除了问题或指出了问题),
  2. “可疑”基准(没有匹配厂商的新 MAC、不是 NAS 的 RFC1918 主机在 445/3389 端口上、解析器 ≠ DoH、ARP 抖动),
  3. 发现格式——每个回答都以具体的下一步工具调用结尾,绝不倾倒数据。

开发

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)

项目结构:

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

许可证: MIT — 参见 LICENSE。 npm: netexpert-mcp · MCP 注册表: io.github.Omodaka9375/netexpert-mcp 源代码与问题反馈: GitHub

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。