mcpField
M

Mullvad VPN MCP Server

Local
github.com/oregansamuel3Security0Updated 30w ago

About Mullvad VPN MCP Server

Mullvad VPN MCP Server exposes Mullvad VPN controls to MCP-compatible clients. It runs commands through the local Mullvad CLI, without direct API calls or credentials.

Key features

  1. 01Connect, disconnect, and reconnect VPN
  2. 02Check connection status and traffic leaks
  3. 03Browse and select VPN servers
  4. 04View account and device information
  5. 05Configure lockdown, DAITA, and multihop
  6. 06Adjust DNS, protocol, and obfuscation

Use cases

  1. 01Change VPN server location from an MCP client
  2. 02Check connection state and VPN protection
  3. 03Enable lockdown mode or DNS blocking
  4. 04Review account devices and expiry

MCP support

This MCP server provides tools for VPN control, diagnostics, server selection, account details, and settings. Operations run through the local Mullvad CLI.

Configuration

Local server config is the same for every client. Copy it into your client’s MCP config file.

No install method listed yet

We haven’t collected a package or remote endpoint for this server. Follow the instructions in the project README.

Repository

Tools

No tool list yet

Local servers expose tools only once running on your machine, and the maintainer has not provided a tool list.

Details

From the project README

mullvad-mcp

An MCP (Model Context Protocol) server for controlling Mullvad VPN through any MCP-compatible client — Claude Desktop, Cursor, Windsurf, and more.

All VPN interaction goes through the mullvad CLI. No direct API calls, no config file parsing, no credentials needed.

Prerequisites

  • Mullvad VPN app installed with the CLI available in your PATH
  • Python 3.11+
  • uv package manager — install uv

Installation

git clone https://github.com/your-username/mullvad-mcp.git
cd mullvad-mcp
uv sync

Client Configuration

Claude Desktop

Add to ~/.config/claude-desktop/claude_desktop_config.json (Linux) or ~/Library/Application Support/Claude/claude_desktop_config.json (macOS):

{
  "mcpServers": {
    "mullvad": {
      "command": "uv",
      "args": ["--directory", "/path/to/mullvad-mcp", "run", "mullvad-mcp"]
    }
  }
}
Cursor

Add to .cursor/mcp.json in your project or ~/.cursor/mcp.json globally:

{
  "mcpServers": {
    "mullvad": {
      "command": "uv",
      "args": ["--directory", "/path/to/mullvad-mcp", "run", "mullvad-mcp"]
    }
  }
}
Generic MCP Client (stdio)
{
  "mcpServers": {
    "mullvad": {
      "command": "uv",
      "args": ["--directory", "/path/to/mullvad-mcp", "run", "mullvad-mcp"],
      "transport": "stdio"
    }
  }
}

Available Tools

Connection Control
ToolDescription
connectConnect to VPN, optionally specifying country/city/hostname
disconnectDisconnect from VPN
reconnectReconnect, optionally to a new location
Status & Diagnostics
ToolDescription
get_statusCurrent connection state, server, protocol, IPs
check_leakQuery am.i.mullvad.net to verify VPN protection
Server Selection
ToolDescription
list_countriesAll available countries with server counts
list_citiesCities for a given country
list_serversServers with filters (country, city, owned_only)
set_locationSet preferred location by country, city, or hostname
Account Management
ToolDescription
get_account_infoMasked account number, expiry date
get_device_infoDevices registered to the account
Settings
ToolDescription
get_settingsAll current settings as a structured object
set_killswitchEnable/disable lockdown mode
set_daitaEnable/disable DAITA (traffic analysis defence)
set_multihopEnable/disable multihop with optional entry location
set_dnsSet DNS: default (with blocking options) or custom IPs
set_protocolConfigure WireGuard options (quantum resistance, IPv6)
set_obfuscationSet anti-censorship mode (auto/off/udp2tcp/shadowsocks/etc)

Example Interactions

Connection

"Connect me to Sweden"

→ Calls connect(country="se") — sets relay to Sweden and connects.

Status Check

"Am I leaking?"

→ Calls check_leak() — queries am.i.mullvad.net and reports whether traffic exits through Mullvad.

Server Selection

"What cities are available in Germany?"

→ Calls list_cities(country="de") — returns Berlin, Frankfurt, etc. with server counts.

Settings

"Enable the kill switch and block ads"

→ Calls set_killswitch(enabled=True) then set_dns(block_ads=True).

Environment Variables

VariableDefaultDescription
MULLVAD_CLI_PATHAuto-detectedOverride path to the mullvad binary
MULLVAD_CLI_TIMEOUT10CLI command timeout in seconds

How It Works

All tools call the mullvad CLI via subprocess. The CLI handles authentication natively — no API keys or secrets are needed. Output is parsed into structured dicts so LLMs can reason about the results.

Resources

License

MIT

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.