Skip to content
 
 

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

Tool Description
connect Connect to VPN, optionally specifying country/city/hostname
disconnect Disconnect from VPN
reconnect Reconnect, optionally to a new location

Status & Diagnostics

Tool Description
get_status Current connection state, server, protocol, IPs
check_leak Query am.i.mullvad.net to verify VPN protection

Server Selection

Tool Description
list_countries All available countries with server counts
list_cities Cities for a given country
list_servers Servers with filters (country, city, owned_only)
set_location Set preferred location by country, city, or hostname

Account Management

Tool Description
get_account_info Masked account number, expiry date
get_device_info Devices registered to the account

Settings

Tool Description
get_settings All current settings as a structured object
set_killswitch Enable/disable lockdown mode
set_daita Enable/disable DAITA (traffic analysis defence)
set_multihop Enable/disable multihop with optional entry location
set_dns Set DNS: default (with blocking options) or custom IPs
set_protocol Configure WireGuard options (quantum resistance, IPv6)
set_obfuscation Set 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

Variable Default Description
MULLVAD_CLI_PATH Auto-detected Override path to the mullvad binary
MULLVAD_CLI_TIMEOUT 10 CLI 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

About

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

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages