Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)
Administer wg-easy (WireGuard Easy) v15: manage VPN clients, configs, QR codes and server status
สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน
ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry
เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง
WG_EASY_URL, WG_EASY_USERNAME, WG_EASY_PASSWORD, WG_EASY_INSECURE_TLS, WG_EASY_READ_ONLY, WG_EASY_ALLOW_TOOLS, WG_EASY_DENY_TOOLSค่าที่ติดป้ายความลับคือกุญแจของบัญชีคุณ อย่าส่งให้ใคร และอย่าวางในแชต
ต้องเตรียมก่อน
คุณใช้แอปไหน
เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”
เปิด Claude Desktop → Settings → Developer → Edit Config แล้ววางค่านี้ในไฟล์ claude_desktop_config.json
{
"mcpServers": {
"wg-easy": {
"command": "npx",
"args": [
"-y",
"wg-easy-mcp"
],
"env": {
"WG_EASY_URL": "ใส่ค่าของคุณ",
"WG_EASY_USERNAME": "ใส่ค่าของคุณ",
"WG_EASY_PASSWORD": "ใส่ค่าของคุณ",
"WG_EASY_INSECURE_TLS": "ใส่ค่าของคุณ",
"WG_EASY_READ_ONLY": "ใส่ค่าของคุณ",
"WG_EASY_ALLOW_TOOLS": "ใส่ค่าของคุณ",
"WG_EASY_DENY_TOOLS": "ใส่ค่าของคุณ"
}
}
}
}พิมพ์คำสั่งนี้ใน Terminal
claude mcp add wg-easy --env WG_EASY_URL='ใส่ค่าของคุณ' --env WG_EASY_USERNAME='ใส่ค่าของคุณ' --env WG_EASY_PASSWORD='ใส่ค่าของคุณ' --env WG_EASY_INSECURE_TLS='ใส่ค่าของคุณ' --env WG_EASY_READ_ONLY='ใส่ค่าของคุณ' --env WG_EASY_ALLOW_TOOLS='ใส่ค่าของคุณ' --env WG_EASY_DENY_TOOLS='ใส่ค่าของคุณ' -- npx -y wg-easy-mcpเติมค่าที่เว้นว่างไว้ก่อนรัน
วางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json
{
"mcpServers": {
"wg-easy": {
"command": "npx",
"args": [
"-y",
"wg-easy-mcp"
],
"env": {
"WG_EASY_URL": "ใส่ค่าของคุณ",
"WG_EASY_USERNAME": "ใส่ค่าของคุณ",
"WG_EASY_PASSWORD": "ใส่ค่าของคุณ",
"WG_EASY_INSECURE_TLS": "ใส่ค่าของคุณ",
"WG_EASY_READ_ONLY": "ใส่ค่าของคุณ",
"WG_EASY_ALLOW_TOOLS": "ใส่ค่าของคุณ",
"WG_EASY_DENY_TOOLS": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
วางในไฟล์ .vscode/mcp.json ของโปรเจกต์
{
"servers": {
"wg-easy": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"wg-easy-mcp"
],
"env": {
"WG_EASY_URL": "ใส่ค่าของคุณ",
"WG_EASY_USERNAME": "ใส่ค่าของคุณ",
"WG_EASY_PASSWORD": "ใส่ค่าของคุณ",
"WG_EASY_INSECURE_TLS": "ใส่ค่าของคุณ",
"WG_EASY_READ_ONLY": "ใส่ค่าของคุณ",
"WG_EASY_ALLOW_TOOLS": "ใส่ค่าของคุณ",
"WG_EASY_DENY_TOOLS": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
ตัวนี้รันในเครื่องคุณ แต่ ChatGPT ต่อได้เฉพาะ server บนอินเทอร์เน็ต ลองเลือกแอปอื่น
ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี
WG_EASY_INSECURE_TLS envWG_EASY_READ_ONLY envWG_EASY_ALLOW_TOOLS envWG_EASY_DENY_TOOLS envค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 8 พ.ย. 2569
ชื่อใน registry ยืนยันด้วยบัญชี GitHub ni-c ซึ่งเป็นเจ้าของ repo
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต
ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน
รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
ต้องใส่ค่าเหล่านี้: WG_EASY_URL, WG_EASY_USERNAME, WG_EASY_PASSWORD
รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)
repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (0.6.0) เข้า registry 2 เดือนที่ผ่านมา
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Node.js, Docker ในเครื่องด้วย
ในหมวดเดียวกันมี Spec Driven Development, Remote Desktop Commander, Commonly
server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว
อ่านการ์ด:↓ ดาวน์โหลดต่อสัปดาห์i★ ดาว 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.
Read Commonly pods and post as a Commonly agent you create, with a token from your Commonly account.
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ
A Model Context Protocol (MCP) server for administering wg-easy (WireGuard Easy) instances.
Lets MCP clients like Claude Code, Claude Desktop or Codex manage your WireGuard VPN: list, create, update, enable/disable and delete clients, fetch configuration files and QR codes, and inspect the server status — all through the wg-easy v15 REST API.
Eleven tools is the ceiling, not the floor: WG_EASY_ALLOW_TOOLS=essential registers a curated six instead, and a model picks the right tool far more reliably from six than from eleven — see choosing which tools load.
The full client lifecycle over the wg-easy v15 REST API, including .conf files, QR codes and one-time download links.
Partial updates merge. An update reads the current client state and changes only the fields you named, instead of overwriting the rest with defaults.
`disable_client` stays ungated on purpose. Every other write asks a person first through MCP elicitation; that one only ever withdraws access, and making it harder would be making the safe move the slow one.
Note: The wg-easy REST API is not yet declared stable and may change between releases. This server targets wg-easy v15.
Configuration is provided via environment variables:
| Variable | Required | Description |
|---|---|---|
WG_EASY_URL | yes | Base URL of the wg-easy web UI, e.g. https://vpn.example.com:51821 |
WG_EASY_USERNAME | yes | Username of a wg-easy admin account |
WG_EASY_PASSWORD | yes | Password of that account |
WG_EASY_INSECURE_TLS | no | Set to true to accept self-signed TLS certificates (scoped to the wg-easy connection) |
WG_EASY_ALLOW_TOOLS | no | Comma-separated tool names, list_* prefixes, or essential for a curated preset |
WG_EASY_DENY_TOOLS | no | Same syntax; removed from whatever WG_EASY_ALLOW_TOOLS left |
ELICITATION | no | false replaces the approval dialog with the two-call token. Not prefixed |
Use `https://`. With a plain-
httpURL the Basic Auth credentials and all
WireGuard private keys travel unencrypted; the server prints a warning unless
the host is local. For self-signed certificates prefer a proper internal CA
over
WG_EASY_INSECURE_TLS.
Without credentials the server still starts and lists its tools (so registries and inspectors can introspect it), but every tool call fails with setup instructions instead of reaching the wg-easy API.
WG_EASY_ALLOW_TOOLS and WG_EASY_DENY_TOOLS take comma-separated tool names; a trailing * matches a whole family. essential is a curated preset of six: get_server_info, list_clients, get_client, create_client, enable_client, disable_client.
get_client_config, get_client_qrcode and generate_one_time_link are not in it, and neither is delete_client: all four either destroy something irreversibly or hand out a peer's private key. Name them where you want them.
WG_EASY_ALLOW_TOOLS=essential
WG_EASY_ALLOW_TOOLS=essential,get_client_config WG_EASY_ALLOW_TOOLS=list_clients,get_client_config WG_EASY_DENY_TOOLS=delete_client,create_client
An entry that matches no tool aborts startup and names it, so a typo cannot silently hide a tool — an absent tool is not something anyone traces back to an environment variable. A filtered tool is never registered, so it is absent from tools/list and unknown to tools/call alike, exactly like a write tool under WG_EASY_READ_ONLY.
If you run several of these servers at once, mcp-hub is the other answer — its /hub endpoint replaces every server's tools with six meta-tools.
claude mcp add wg-easy -s user \
-e WG_EASY_URL=https://vpn.example.com:51821 \ -e WG_EASY_USERNAME=admin \ -e WG_EASY_PASSWORD=your-password \ -- npx -y wg-easy-mcp
Add to your claude_desktop_config.json:
{
"mcpServers": { "wg-easy": { "command": "npx", "args": ["-y", "wg-easy-mcp"], "env": { "WG_EASY_URL": "https://vpn.example.com:51821", "WG_EASY_USERNAME": "admin", "WG_EASY_PASSWORD": "your-password" } } } }
Add to your ~/.codex/config.toml:
[mcp_servers.wg-easy]
command = "npx" args = ["-y", "wg-easy-mcp"] env = { WG_EASY_URL = "https://vpn.example.com:51821", WG_EASY_USERNAME = "admin", WG_EASY_PASSWORD = "your-password" }
git clone https://github.com/ni-c/wg-easy-mcp.git
cd wg-easy-mcp npm install npm run build
node /path/to/wg-easy-mcp/dist/index.js as the command
A multi-arch image (linux/amd64, linux/arm64) with an SBOM and build provenance is published to GitHub Container Registry:
docker run -i --rm \
-e WG_EASY_URL=https://vpn.example.com:51821 \ -e WG_EASY_USERNAME=admin \ -e WG_EASY_PASSWORD=your-password \ ghcr.io/ni-c/wg-easy-mcp:latest
The image talks MCP over stdio, so clients need docker run -i (no port is exposed):
{
"mcpServers": { "wg-easy": { "command": "docker", "args": [ "run", "-i", "--rm", "-e", "WG_EASY_URL", "-e", "WG_EASY_USERNAME", "-e", "WG_EASY_PASSWORD", "ghcr.io/ni-c/wg-easy-mcp:latest" ], "env": { "WG_EASY_URL": "https://vpn.example.com:51821", "WG_EASY_USERNAME": "admin", "WG_EASY_PASSWORD": "your-password" } } } }
A client that cannot spawn a local process — ChatGPT connectors, Claude on the web, Cursor, LibreChat — reaches wg-easy-mcp through mcp-hub: one container serves many stdio MCP servers over Streamable HTTP, with an OAuth 2.1 login behind a single password and long-lived tokens for the clients that cannot do OAuth. Its /hub endpoint puts every server behind six meta-tools, so one connector reaches all of them without N×tool schemas in the model's context, and it speaks both protocol revisions — a question this server asks travels through it to the person at the far end.
Its /config/mcp.json uses Claude Code's format, so the entry is the one you already have:
{
"mcpServers": { "wg-easy": { "command": "npx", "args": ["-y", "wg-easy-mcp"], "env": { "WG_EASY_ALLOW_TOOLS": "essential" }, "denyTools": ["delete_client"] } } }
allowTools and denyTools there are the hub's own per-server filter, which is not the same thing as *_ALLOW_TOOLS in env — the difference, and the mistake it invites, are in the client guide.
| Tool | Description |
|---|---|
list_clients | List all WireGuard clients with status and traffic statistics |
get_client | Get the full details of a single client |
create_client 👤 | Create a new client (name, optional expiresAt) |
update_client 👤 | Update a client; only the provided fields are changed |
enable_client 👤 | Let a client connect again — re-arms a key pair already installed on the peer |
disable_client | Block a client; it keeps its configuration and keys |
delete_client 👤 | Permanently delete a client |
get_client_config | Get the client's WireGuard .conf file |
get_client_qrcode | Get the client configuration as a QR code (SVG) |
generate_one_time_link 👤 | Generate a one-time config download link, valid five minutes |
get_server_info | Release/update status, general settings and interface configuration (secrets redacted) |
👤 asks a person through MCP elicitation · falls back to a two-call confirm_token where the client cannot show a dialog.
Every tool declares an outputSchema and answers with structuredContent alongside the text block, so a client can use the result without parsing prose:
{
"untrusted": true, "source": "wg-easy", "count": 2, "clients": [{ "id": 1, "name": "laptop", "enabled": true }], }
The untrusted marker is a field and not only a sentence in the text, because a client that reads th
ตัดมาแค่ช่วงต้น อ่านต่อใน repo