Skip to main content
Glama

Add device

add_device

Creates a new Portveil device: saves WireGuard tunnel files to import on phones or laptops, or returns root commands so a Linux machine registers itself. Uses one device slot.

Instructions

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.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
kindYesphone_or_computer: WireGuard app on a phone or laptop. linux_machine: a Linux server or agent machine running the Portveil agent
nameYesDisplay name for the new device, e.g. "Miguel iPhone" or "scraper-box"
folderNophone_or_computer only: folder to save the tunnel files in. Default ~/Portveil/<name>
split_tunnelNolinux_machine only, advanced: default false (full tunnel), which sends everything the machine connects to through Portveil and keeps SSH and other incoming connections on their normal route, so remote servers stay reachable. true only reaches Portveil's own network: the machine's internet traffic would NOT go through Portveil
temporary_minutesNophone_or_computer only: delete the device automatically after this many minutes (5 to 43200, i.e. 30 days). Omit for a permanent device

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv0.4.3
    • changedInput schema / properties / split_tunnel / description
      Previous value: -"linux_machine only: default true, so a remote server keeps its SSH session. false sends all of its traffic through Portveil"New value: +"linux_machine only, advanced: default false (full tunnel), which sends everything the machine connects to through Portveil and keeps SSH and other incoming connections on their normal route, so remote servers stay reachable. true only reaches Portveil's own network: the machine's internet traffic would NOT go through Portveil"
  2. Addedv0.4.1

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations covering only the generic safety profile, the description carries rich behavioral detail: the private key is generated locally and never shown in the reply, one tunnel file is written per location to a folder, linux devices register themselves and return root commands, and phone_or_computer devices are view-only and cannot be moved remotely. It also discloses the admin-token requirement and slot consumption.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then organized by kind, with each sentence carrying distinct information (folder behavior, key handling, admin scope, slot usage). It is long for a single dense paragraph, but almost no sentence is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-parameter mutation tool with no output schema, the description compensates well: it explains what the tool returns (commands for linux, saved files for phone_or_computer) and the side effects (slot consumption, temp deletion, view-only constraint). An agent has enough to invoke it correctly for either kind.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, but the description adds meaning beyond the schema: it explains the practical consequence of each kind (files written vs commands returned), that temporary_minutes implies auto-deletion, and that the key is never displayed. This goes past a baseline 3 where the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Starts with a specific verb+resource ('Add a new device to the account') and then splits the resource into two named kinds (phone_or_computer vs linux_machine) with distinct behavior. It also signals relationship to siblings by noting linux devices 'can then be moved, rotated and switched with the other tools', letting an agent place it against move_device/rotate_device.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear operational guidance: which kind to pick for a phone/laptop vs a server, that the WireGuard app must import the file to connect, that phone_or_computer needs an admin-scope token, and that it consumes a device slot. It stops short of explicit exclusions (when NOT to use add_device) or naming a sibling alternative for a given scenario.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.