Skip to main content
Glama

Attach public address to server

attach_public_address_to_server
Destructive

Assign or move an owned paid public IP to a server's private port when the server has no public address. Reads need networking:read; changes need networking:manage and approval.

Instructions

Attach or move an owned paid public address to an eligible zero-public-IP server's private port. Read server_target_enabled and candidate state; movement affects the previous target. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
address_idYesExact lowercase UUID returned by an owned networking resource
private_port_idYesExact lowercase UUID returned by an owned networking resource

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv2.3.16

TDQS

A4.4/5.0
Behavior5/5

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

Goes well beyond the annotations: it discloses that movement affects the previous target, specifies the networking:read vs networking:manage permission split (and that full/read defaults do not grant networking), notes backend enforcement of ownership/feature/2FA locks, and fully documents the async model (accepted = pending, in_progress/reason_kind/reason_code semantics, no automatic retry). This is unusually rich behavioral context for a destructive mutation.

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-loads the core action in the first sentence, and nearly every clause carries behavioral information. It is dense and somewhat run-on in the polling/retry section, with a few fragments ('Preserve reason_code.'), but there is little pure filler.

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 destructive, non-idempotent mutation with annotations present and no output schema, the description covers permissions, pre-checks, side effects on the previous target, and the full async/error handling contract. An agent has everything needed to invoke and monitor it correctly.

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

Parameters3/5

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

Schema coverage is 100%, and both UUID parameters are fully described in the schema, so the baseline is 3. The description adds only indirect meaning (that address_id is an owned paid address and private_port_id belongs to the target server) but no formatting or lookup guidance beyond the schema.

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?

States a precise verb pair (attach or move), the exact resource (an owned paid public address), and the target (an eligible zero-public-IP server's private port). This distinguishes it immediately from siblings like attach_public_address_to_network and attach_private_network_port without needing to open either schema.

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 strong context: pre-read server_target_enabled and candidate state, obtain approval for the exact change, and the eligibility constraint (zero-public-IP server). It stops short of explicitly naming alternative sibling tools for non-server targets, so it is clear context rather than full when/when-not routing.

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

Deploy Server

Other Tools