Skip to main content
Glama

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

Related MCP server: Proton-MCP

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

Install Server
A
license - permissive license
A
quality
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/oresam-xyz/mullvad-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server