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
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
使っている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": "your-value",
"WG_EASY_USERNAME": "your-value",
"WG_EASY_PASSWORD": "your-value",
"WG_EASY_INSECURE_TLS": "your-value",
"WG_EASY_READ_ONLY": "your-value",
"WG_EASY_ALLOW_TOOLS": "your-value",
"WG_EASY_DENY_TOOLS": "your-value"
}
}
}
}ターミナルでこれを実行します
claude mcp add wg-easy --env WG_EASY_URL=your-value --env WG_EASY_USERNAME=your-value --env WG_EASY_PASSWORD=your-value --env WG_EASY_INSECURE_TLS=your-value --env WG_EASY_READ_ONLY=your-value --env WG_EASY_ALLOW_TOOLS=your-value --env WG_EASY_DENY_TOOLS=your-value -- 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": "your-value",
"WG_EASY_USERNAME": "your-value",
"WG_EASY_PASSWORD": "your-value",
"WG_EASY_INSECURE_TLS": "your-value",
"WG_EASY_READ_ONLY": "your-value",
"WG_EASY_ALLOW_TOOLS": "your-value",
"WG_EASY_DENY_TOOLS": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
プロジェクトの .vscode/mcp.json に貼り付けます
{
"servers": {
"wg-easy": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"wg-easy-mcp"
],
"env": {
"WG_EASY_URL": "your-value",
"WG_EASY_USERNAME": "your-value",
"WG_EASY_PASSWORD": "your-value",
"WG_EASY_INSECURE_TLS": "your-value",
"WG_EASY_READ_ONLY": "your-value",
"WG_EASY_ALLOW_TOOLS": "your-value",
"WG_EASY_DENY_TOOLS": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
これはパソコンで動くサーバーですが、ChatGPTがつなげるのはインターネット上のサーバーだけです。ほかのアプリを選んでください。
選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。
WG_EASY_INSECURE_TLS envWG_EASY_READ_ONLY envWG_EASY_ALLOW_TOOLS envWG_EASY_DENY_TOOLS envこの設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月10日にチェック
レジストリ名は、リポジトリを所有するGitHubアカウント ni-c で確認済みです
このリポジトリはまだGitHubから読み取っていません
このリポジトリはまだGitHubから読み取っていません
これはパソコンで動くため、インターネット上のエンドポイントはありません
パソコンで動き、代わりにローカルの設定を使います
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
入力が必要なもの:WG_EASY_URL, WG_EASY_USERNAME, WG_EASY_PASSWORD
あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。
GitHubリポジトリの最終更新は–、最新バージョン(0.6.0)がレジストリに届いたのは2 か月前です。
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにNode.js, Dockerも必要です。
同じカテゴリには:Spec Driven Development, Remote Desktop Commander, KEVAREMESH Agent Discovery MCP
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:↓ 週あたりのダウンロードi★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
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.
Discover 25 owned APIs and 11 rights-scoped external operations via 15 MCP tools and x402.
作者のリポジトリから書かれたとおりにコピーしたものです。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
冒頭だけを表示しています。続きはリポジトリで読めます