Atlas / MCP servers / ni-c / wg-easy-mcp

wg-easy-mcpBLOCK

mcp/ni-c/wg-easy-mcp

MCP server for administering wg-easy (WireGuard Easy) instances

Verdict
BLOCK
Grade
D
Trust score
69 /100
Exposed tools
12 7r · 4w · 1d
Transport
stdio
License
MIT
Stars
0
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

[](https://github.com/ni-c/wg-easy-mcp/actions/workflows/ci.yml) [](https://scorecard.dev/viewer/?uri=github.com/ni-c/wg-easy-mcp) [](https://socket.dev/npm/package/wg-easy-mcp) [](https://glama.ai/mcp/servers/ni-c/wg-easy-mcp)

[](https://www.npmjs.com/package/wg-easy-mcp) [](https://github.com/ni-c/wg-easy-mcp/pkgs/container/wg-easy-mcp) [](https://mcp-hub.ni-c.de)

[](https://wg-easy-mcp.ni-c.de) [](https://github.com/sponsors/ni-c)

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](#choosing-which-tools-lo

Read from source at commit 58d63016f144OBSERVED · 2026-10-12
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code (npm)
claude mcp add wg-easy-mcp --env WG_EASY_PASSWORD=${WG_EASY_PASSWORD} --env WG_EASY_PASSWORD=${WG_EASY_PASSWORD} -- npx -y [email protected]
claude-code (oci)
claude mcp add wg-easy-mcp:0.3.0 --env WG_EASY_PASSWORD=${WG_EASY_PASSWORD} --env WG_EASY_PASSWORD=${WG_EASY_PASSWORD} -- docker run -i --rm ghcr.io/ni-c/wg-easy-mcp:0.3.0:None
03

Exposed tools (12)

7 read · 4 write · 1 destructive. Blast radius: 1 tool can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.

ToolRiskDescription
create_clientwrite
delete_clientdestructive
disable_clientwrite
enable_clientwrite
generate_one_time_linkread
get_clientread
get_client_configread
get_client_qrcoderead
get_server_inforead
list_clientsread
update_clientwrite
wg-easy-mcpreadAdminister wg-easy (WireGuard Easy) v15: manage VPN clients, configs, QR codes and server status
04

Trust audit

BLOCKgrade D · trust 69/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)FAIL
L3Class-specific surfaceWARN
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (2 observation(s))
Network
declared (2 observation(s))
Shell
none-observed
Dependencies
not all pinned
Secrets in source
found

Findings (16)

HIGHNetwork egress · net.tls_off · CWE-200, CWE-319
src/api.ts:209
connect: { rejectUnauthorized: false },
Why it matters. certificate verification is disabled
Fix. leave verification on
HIGHPrompt injection · prompt.override · CWE-94, CWE-1427
docs/guide/approval.md:67
client called “ignore previous instructions” would read as the server speaking.
Why it matters. asks the agent to drop prior instructions or safety
Fix. remove the instruction
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
test/integration/bootstrap.ts:18
export const PASSWORD = 'integration-not-a-secret-12';
MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
delete_client
Why it matters. 1 tool(s) can delete or overwrite
Fix. prefer a read-only mode or scoped tokens; the page states the blast radius
LOWInventory / provenance · inv.hidden_file · CWE-1104
.oxlintrc.json
.oxlintrc.json
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.prettierignore
.prettierignore
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
docs/public/.nojekyll
.nojekyll
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
docs/.vitepress/config.ts:9
fileURLToPath(new URL('../../package.json', import.meta.url)),
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
test/docs.test.ts:238
'<!--@include: ../../CHANGELOG.md#changelog-->'
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
test/integration/tools.integration.test.ts:11
import { ALL_TOOLS } from '../../src/tools/catalogue.js';
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
CONTRIBUTING.md:66
WG_EASY_URL=http://127.0.0.1:51821 WG_EASY_USERNAME=integration \
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
test/config.test.ts:243
loadConfig(env({ WG_EASY_URL: 'http://127.0.0.1:51821' }));
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
test/integration/bootstrap.ts:40
url = 'http://127.0.0.1:51821'
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
package.json
@modelcontextprotocol/server, mcp-approval, mcp-internal-hosts, mcp-tool-allowlist, undici, zod, @modelcontextprotocol/client, @types/node
Why it matters. 15 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
SECURITY.md:5
Please use [GitHub private vulnerability reporting](https://github.com/ni-c/wg-easy-mcp/security/advisories/new). Do not open a public issue for an unpatched vulnerability and do not include real cred
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine
INFOPrompt injection · prompt.credential_read · CWE-94, CWE-1427
docs/guide/getting-started.md:15
## 1. Collect the credentials
Why it matters. asks the agent to read credentials

Gates applied: instruction_override, no_behavioural_pass.

Audited 2026-10-12 · audit v0.4.1 · source sha 58d63016f144full audit observations/trust-audit/mcp-server/ni-c__wg-easy-mcp.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-1258d63016f144BLOCKD69first audit
06

Questions

What is the wg-easy-mcp MCP server?

MCP server for administering wg-easy (WireGuard Easy) instances

What tools does wg-easy-mcp expose?

12 in total: 7 read-only, 4 that write, and 1 that can delete or overwrite (delete_client). Every one is listed on this page with its risk.

Is wg-easy-mcp safe to connect to an agent?

No — not without reading the findings first. The audit graded it D (69/100) and found 2 critical or high issues in the source. Each one is listed on this page with the file and line it is on. Separately from the audit: 1 of its tools can destroy data, so scope the token you give it to what you actually need.

What credentials does wg-easy-mcp need?

It reads NODE_TLS_REJECT_UNAUTHORIZED and WG_EASY_PASSWORD from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does wg-easy-mcp run?

It speaks stdio, so it runs as a local process your client starts. It is published on npm as wg-easy-mcp at 0.6.0.

How current is this page?

The grade is for one exact copy of the source (58d63016f144), read on 2026-10-12. The repository is watched and re-audited when it changes.

Advertisement