Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)
Cross-platform local-network diagnostics & security-posture MCP server — 31 tools.
สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน
ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry
เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง
NETEXPERT_MCP_CONFIG, NETEXPERT_HTTP_PORT, NETEXPERT_WIFI_IFต้องเตรียมก่อน
คุณใช้แอปไหน
เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”
เปิด Claude Desktop → Settings → Developer → Edit Config แล้ววางค่านี้ในไฟล์ claude_desktop_config.json
{
"mcpServers": {
"netexpert": {
"command": "npx",
"args": [
"-y",
"netexpert-mcp"
],
"env": {
"NETEXPERT_MCP_CONFIG": "ใส่ค่าของคุณ",
"NETEXPERT_HTTP_PORT": "ใส่ค่าของคุณ",
"NETEXPERT_WIFI_IF": "ใส่ค่าของคุณ"
}
}
}
}พิมพ์คำสั่งนี้ใน Terminal
claude mcp add netexpert --env NETEXPERT_MCP_CONFIG='ใส่ค่าของคุณ' --env NETEXPERT_HTTP_PORT='ใส่ค่าของคุณ' --env NETEXPERT_WIFI_IF='ใส่ค่าของคุณ' -- npx -y netexpert-mcpเติมค่าที่เว้นว่างไว้ก่อนรัน
วางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json
{
"mcpServers": {
"netexpert": {
"command": "npx",
"args": [
"-y",
"netexpert-mcp"
],
"env": {
"NETEXPERT_MCP_CONFIG": "ใส่ค่าของคุณ",
"NETEXPERT_HTTP_PORT": "ใส่ค่าของคุณ",
"NETEXPERT_WIFI_IF": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
วางในไฟล์ .vscode/mcp.json ของโปรเจกต์
{
"servers": {
"netexpert": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"netexpert-mcp"
],
"env": {
"NETEXPERT_MCP_CONFIG": "ใส่ค่าของคุณ",
"NETEXPERT_HTTP_PORT": "ใส่ค่าของคุณ",
"NETEXPERT_WIFI_IF": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
ตัวนี้รันในเครื่องคุณ แต่ ChatGPT ต่อได้เฉพาะ server บนอินเทอร์เน็ต ลองเลือกแอปอื่น
ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี
NETEXPERT_MCP_CONFIG envNETEXPERT_HTTP_PORT envNETEXPERT_WIFI_IF envค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 7 พ.ย. 2569
ชื่อใน registry ยืนยันด้วยบัญชี GitHub Omodaka9375 ซึ่งเป็นเจ้าของ repo
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต
ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน
รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
registry ไม่ได้ระบุว่าต้องใช้กุญแจ แต่บางตัวจะขอให้ล็อกอินตอนใช้ครั้งแรก
รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)
repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (0.1.3) เข้า registry 20 วันที่ผ่านมา
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Node.js ในเครื่องด้วย
ในหมวดเดียวกันมี Spec Driven Development, Remote Desktop Commander, Kanal Varna — drains, leaks & plumbing (Varna, BG)
server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว
อ่านการ์ด:★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Drain unblocking, leak detection & plumbing in Varna, Bulgaria: services, prices, areas, contact
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ
*"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