portveil-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PORTVEIL_API | No | Override the Portveil API base URL (default: https://api.portveil.com) | |
| PORTVEIL_TOKEN | Yes | Your Portveil API token (starts with clt_) | |
| PORTVEIL_ACCOUNT_ID | Yes | Your Portveil account ID (starts with acct_) |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_devicesA | List every device on the Portveil account, one line each: whether it's protected (connected AND confirmed by the exit server), which country it exits from, its live download/upload speed while connected, and whether it accepts remote control. Use this first to see what's there or to find a device's exact name; use get_device for one device. Read-only. |
| list_locationsA | List the exit locations (country, city and location ID) that devices can be moved to, with each one's timezone and language settings. Use it before move_device or start_rotation when you're unsure what's available, or to make a browser on a moved machine match its exit (sites compare the browser's timezone with its IP's country). Every plan can use every location. Read-only. |
| get_deviceA | Get one device's current state: online or offline, the location it exits from, whether that exit server confirms the tunnel, its live speed, any rotation schedule, whether an agent machine's clock matches its exit's timezone, and when it last reported. Use it to check a device before or after an action. Read-only. |
| get_accountA | Get the account's plan and how many devices it uses out of its limit. Use it when asked about the plan or before suggesting adding devices. Read-only. |
| list_activityA | List recent actions on the account (moves, reconnects, rotations, renames, tokens created), newest first, with the token that made each. Use it to answer "what changed?" or to audit an assistant's actions. Read-only. |
| move_deviceA | Move a device's traffic to exit from a chosen location. Waits until the device switches and the new exit server confirms it (usually 10–30 s), and says plainly if that didn't happen. Safe to repeat: moving to where it already is does nothing. Only works on machines running the Portveil agent with remote control on (phones using the WireGuard app switch on the device itself). Needs a control-scope token. To just go somewhere different, use rotate_device. |
| rotate_deviceA | Move a device once to the next location in the list, so its traffic exits from somewhere new. Same checks and waiting as move_device. Each call moves again, so it isn't idempotent. For repeated automatic moves use start_rotation instead. Needs a control-scope token. |
| start_rotationA | Make Portveil move a device to the next location automatically every N minutes, optionally cycling through chosen locations only. Portveil runs the schedule itself, so the assistant doesn't need to stay running. Calling it again replaces the schedule. Stop it with stop_rotation. Needs a control-scope token and a Portveil-agent device. |
| stop_rotationA | Turn off a device's automatic rotation. The device stays at its current location. Safe to call when no rotation is set. Needs a control-scope token. |
| reconnect_deviceA | Tell a device to re-establish its VPN tunnel at its current location, without moving it. Use when it shows connected but not confirmed, or traffic seems stuck. Traffic may pause for a few seconds. Needs a control-scope token and a Portveil-agent device. |
| disconnect_deviceA | Turn off a device's VPN tunnel. Its traffic stops going through Portveil (and loses VPN protection) until it reconnects. The device stays on the account. Confirm with the user first. Needs a control-scope token and a Portveil-agent device. |
| add_deviceA | Add a new device to the account. kind "phone_or_computer" (iPhone, Android, Mac, Windows using the WireGuard app): creates the device now and saves one WireGuard tunnel file per location, with a private key made locally, into a folder on the machine running this MCP server; the key is never shown in the reply. Import a file in the WireGuard app to connect. These devices are view-only: they can't be moved remotely. kind "linux_machine" (a server or the machine an agent runs on): returns the exact commands to run as root on that machine; it makes its own key and registers itself, and can then be moved, rotated and switched with the other tools. Uses one device slot (see get_account). Needs an admin-scope token for phone_or_computer. |
| update_deviceA | Rename a device and/or turn remote control on or off for it. Turning remote control off stops move, rotate, reconnect and disconnect for that device until it's turned back on. Change only what's given; safe to repeat. Needs an admin-scope token. |
| remove_deviceA | Permanently remove a device from the account: its VPN key stops working at every exit and its slot is freed. It can't be undone; the device would have to be set up again. Confirm with the user first, naming the device. Needs an admin-scope token. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 14 tools
Each tool targets a distinct device-management action (move vs rotate vs start/stop rotation vs reconnect/disconnect), and descriptions explicitly clarify boundaries, e.g. 'To just go somewhere different, use rotate_device.' list_devices vs get_device is also clearly separated.
All names follow a consistent snake_case verb_noun pattern (get_*, list_*, add_device, update_device, remove_device, move_device, rotate_device, start_rotation, stop_rotation, reconnect_device, disconnect_device). No mixed conventions or vague verbs.
14 tools is well within the 3–15 sweet spot for a VPN/device management server, and each tool covers a distinct operation (account, activity, device CRUD, locations, rotation, connection control). No obvious redundancy or filler.
Core device and rotation lifecycle is fully covered (add/list/get/update/remove, move/rotate/start/stop, reconnect/disconnect, locations, activity). Minor gap: token creation/management is referenced (control-scope, admin-scope tokens; 'tokens created' in activity) but no tool exposes it, and account plan changes are read-only.