Skip to main content
Glama

VMware NSX

Author: Wei Zhou, VMware by Broadcom — wei-wz.zhou@broadcom.com This is a community-driven project by a VMware engineer, not an official VMware product. For official VMware developer tools see developer.broadcom.com.

English | 中文

VMware NSX networking management: segments, gateways, NAT, routing, IPAM — 33 MCP tools, domain-focused.

NSX Policy API skill for NSX-T 3.0+ and NSX 4.x.

License: MIT

Companion Skills

Skill

Scope

Tools

Install

vmware-aiops ⭐ entry point

VM lifecycle, deployment, guest ops, clusters

49

uv tool install vmware-aiops

vmware-monitor

Read-only monitoring, alarms, events, VM info

27

uv tool install vmware-monitor

vmware-storage

Datastores, iSCSI, vSAN

11

uv tool install vmware-storage

vmware-vks

Tanzu Namespaces, TKC cluster lifecycle

20

uv tool install vmware-vks

vmware-nsx-security

DFW microsegmentation, security groups, Traceflow

21

uv tool install vmware-nsx-security

vmware-aria

Aria Ops metrics, alerts, capacity planning

28

uv tool install vmware-aria

vmware-avi

AVI/NSX ALB load balancing, AKO

28

uv tool install vmware-avi

vmware-harden

Compliance baselines, drift detection

6

uv tool install vmware-harden

Related MCP server: vmware-vks

Quick Install

# Via PyPI
uv tool install vmware-nsx-mgmt

# Or pip
pip install vmware-nsx-mgmt

Offline / Air-Gapped Install (from source)

This project uses the modern PEP 517 build system (hatchling), so there is no setup.py by design — that is expected, not a missing file. If you cloned the source and hit ERROR: File "setup.py" or "setup.cfg" not found ... editable mode currently requires a setuptools-based build, your pip is older than 21.3 and cannot do an editable (-e) install with a non-setuptools backend. Editable mode is a developer convenience, not needed to run the tool — do one of:

# From the source tree — a normal (non-editable) install builds a wheel:
pip install .              # NOT  pip install -e .

# ...or upgrade pip first, and editable works too:
pip install --upgrade pip && pip install -e .

For a truly air-gapped host, build the wheels on a connected machine and copy them over — the target then needs no network:

# On a connected machine, collect this package + its dependencies as wheels:
pip wheel . -w dist        # → dist/*.whl   (or: uv build, for just this package)

# Copy dist/ to the air-gapped host, then install offline:
pip install --no-index --find-links dist vmware-nsx-mgmt

Configuration

mkdir -p ~/.vmware-nsx
cp config.example.yaml ~/.vmware-nsx/config.yaml
# Edit with your NSX Manager credentials

echo "VMWARE_NSX_NSX_PROD_PASSWORD=your_password" > ~/.vmware-nsx/.env
chmod 600 ~/.vmware-nsx/.env

# Verify
vmware-nsx doctor

What This Skill Does

Category

Tools

Count

Read / Write

Segments

list, get, create, update, delete

5

2R / 3W

Tier-0 Gateways

list, get, BGP neighbors, configure BGP

4

3R / 1W

Tier-1 Gateways

list, get, create, update, delete

5

2R / 3W

NAT

list, create, delete

3

1R / 2W

Static Routes

list, create, delete

3

1R / 2W

IP Pools

list, usage, create, delete

4

2R / 2W

Fabric Inventory

transport zones, transport nodes, edge clusters

3

3R / 0W

Health & Troubleshooting

alarms, transport node status, edge cluster status, manager status, port status, VM-to-segment

6

6R / 0W

Total: 33 tools (20 read-only + 13 write)

Common Workflows

Create an App Network (Segment + T1 Gateway + NAT)

  1. Create gateway: vmware-nsx gateway create-t1 app-t1 --edge-cluster edge-cluster-01 --tier0 tier0-gw

  2. Create segment: vmware-nsx segment create app-web-seg --gateway app-t1 --subnet 10.10.1.1/24 --transport-zone tz-overlay

  3. Add SNAT: vmware-nsx nat create app-t1 --action SNAT --source 10.10.1.0/24 --translated 172.16.0.10

  4. Verify: vmware-nsx segment list and vmware-nsx nat list app-t1

Use --dry-run to preview any write command first.

Check Network Health

  1. Manager status: vmware-nsx health manager-status

  2. Transport nodes: vmware-nsx health transport-nodes

  3. Edge clusters: vmware-nsx health edge-clusters

  4. Alarms: vmware-nsx health alarms --severity HIGH (exact-match filter; query each severity separately)

Troubleshoot VM Connectivity

  1. Find VM's segment: vmware-nsx troubleshoot vm-segment <vm-display-name>

  2. Check port realized state: vmware-nsx troubleshoot port-status <segment-id> (all ports on the segment: attachment, realized bindings, transport nodes)

  3. Check routes: vmware-nsx gateway routes-t1 app-t1

  4. Check BGP: vmware-nsx gateway bgp-neighbors tier0-gw

MCP Tools (33 — 20 read, 13 write)

Category

Tools

Type

Segments

list_segments, get_segment, create_segment, update_segment, delete_segment

Read/Write

Tier-0 GW

list_tier0_gateways, get_tier0_gateway, get_bgp_neighbors, configure_tier0_bgp

Read/Write

Tier-1 GW

list_tier1_gateways, get_tier1_gateway, create_tier1_gateway, update_tier1_gateway, delete_tier1_gateway

Read/Write

NAT

list_nat_rules, create_nat_rule, delete_nat_rule

Read/Write

Static Routes

list_static_routes, create_static_route, delete_static_route

Read/Write

IP Pools

list_ip_pools, get_ip_pool_usage, create_ip_pool, delete_ip_pool

Read/Write

Fabric

list_transport_zones, list_transport_nodes, list_edge_clusters

Read

Health

list_nsx_alarms (per-severity, exact match), get_transport_node_status, get_edge_cluster_status, get_nsx_manager_status

Read

Troubleshoot

get_logical_port_status (realized state of all ports on a segment), get_segment_port_for_vm (lookup by VM display name)

Read

Full per-tool endpoints and methods: skills/vmware-nsx/references/capabilities.md.

CLI

# Segments
vmware-nsx segment list
vmware-nsx segment get app-web-seg
vmware-nsx segment create app-web-seg --gateway app-t1 --subnet 10.10.1.1/24 --transport-zone tz-overlay
vmware-nsx segment delete app-web-seg

# Gateways
vmware-nsx gateway list-t0
vmware-nsx gateway list-t1
vmware-nsx gateway create-t1 app-t1 --edge-cluster edge-cluster-01 --tier0 tier0-gw
vmware-nsx gateway bgp-neighbors tier0-gw
vmware-nsx gateway routes-t1 app-t1

# NAT
vmware-nsx nat list app-t1
vmware-nsx nat create app-t1 --action SNAT --source 10.10.1.0/24 --translated 172.16.0.10
vmware-nsx nat delete app-t1 rule-01

# Static Routes
vmware-nsx route list app-t1
vmware-nsx route create app-t1 --network 192.168.100.0/24 --next-hop 10.10.1.254

# IP Pools
vmware-nsx ippool list
vmware-nsx ippool create tep-pool
vmware-nsx ippool add-subnet tep-pool --start 192.168.100.10 --end 192.168.100.50 --cidr 192.168.100.0/24

# Health & Troubleshooting
vmware-nsx health alarms --severity HIGH   # exact match: LOW | MEDIUM | HIGH | CRITICAL
vmware-nsx health transport-nodes
vmware-nsx health manager-status
vmware-nsx troubleshoot vm-segment my-vm-01          # VM display name
vmware-nsx troubleshoot port-status app-web-seg      # segment ID

# Diagnostics
vmware-nsx doctor

MCP Server

After uv tool install vmware-nsx-mgmt, start the MCP server with one command (v1.5.15+):

# Recommended — single command, no network re-resolve
vmware-nsx mcp

# Or via Docker
docker compose up -d

Agent Configuration

Add to your AI agent's MCP config:

{
  "mcpServers": {
    "vmware-nsx": {
      "command": "vmware-nsx",
      "args": ["mcp"],
      "env": {
        "VMWARE_NSX_CONFIG": "~/.vmware-nsx/config.yaml"
      }
    }
  }
}
# Run without installing (requires PyPI access each launch)
uvx --from vmware-nsx-mgmt vmware-nsx mcp

# Legacy entry point (still works, kept for backward compatibility)
vmware-nsx-mcp

Behind a corporate TLS proxy? uvx may fail with invalid peer certificate: UnknownIssuer. Use the recommended vmware-nsx mcp form above (no network needed), or set UV_NATIVE_TLS=true.

More agent config templates (Claude Code, Cursor, Goose, Continue, etc.) in examples/mcp-configs/.

Version Compatibility

NSX Version

Support

Notes

NSX 9.1

Full

Policy API supported. Note: VDS 7.0+ required (N-VDS removed in NSX 9).

NSX 9.0

Full

Policy API supported. Note: bare-metal agent / physical-server L2 overlay removed.

NSX 4.x

Full

Latest Policy API, all features

NSX-T 3.2

Full

All features work

NSX-T 3.1

Full

Minor route table format differences

NSX-T 3.0

Compatible

IP pool subnet API introduced here

NSX-T 2.5

Limited

Policy API incomplete; some tools may fail

NSX-V (6.x)

Not supported

Different API (SOAP-based)

VCF Compatibility

VCF Version

Bundled NSX

Support

VCF 9.1

NSX 9.1

Full

VCF 9.0

NSX 9.0

Full

VCF 5.x

NSX 4.x

Full

VCF 4.3-4.5

NSX-T 3.1-3.2

Full

Official Broadcom References

Safety

Feature

Description

Read-heavy

20/33 tools are read-only

Double confirmation

CLI write commands require two prompts

Dry-run mode

All write commands support --dry-run preview

Dependency checks

Delete operations validate no connected resources

Input validation

CIDR, IP, VLAN IDs, gateway existence validated

Audit logging

All operations logged to ~/.vmware-nsx/audit.log

No firewall ops

Cannot create/modify DFW rules or security groups

Credential safety

Passwords only from environment variables

Prompt injection defense

NSX object names sanitized before output

Troubleshooting

Problem

Cause & Fix

"Segment not found"

Policy API uses segment id, not display_name. Run segment list to get the exact ID.

NAT creation fails "gateway not found"

NAT requires a Tier-1 (or Tier-0) gateway. Verify with gateway list-t1. Gateway must have an edge cluster.

BGP neighbor stuck in Connect/Active

Peer unreachable, ASN mismatch, TCP 179 blocked, or MD5 password mismatch.

Transport node "degraded"

TEP unreachable (check MTU >= 1600), NTP sync issues, or host switch config mismatch.

"Password not found"

Variable naming: VMWARE_NSX_<TARGET_UPPER>_PASSWORD (hyphens to underscores). Check ~/.vmware-nsx/.env.

Connection timeout

Use vmware-nsx doctor --skip-auth to bypass auth checks on high-latency networks.

License

MIT

Available Tools

33 tools
configure_tier0_bgpA

[WRITE] Configure BGP settings on a Tier-0 gateway's locale-service.

Use get_tier0_gateway first to confirm the tier0_id. Sets BGP settings only (local AS, ECMP, inter-SR iBGP); neighbor creation is a separate Policy API object not exposed here, so peering will not come up from this call alone. Returns the updated BGP config dict, else {"error", "hint"}. Then check get_bgp_neighbors for session state.

ParametersJSON Schema
NameRequiredDescriptionDefault
ecmpNoEnable ECMP for BGP routes (default True).
targetNoNSX Manager target from config (default if omitted).
enabledNoEnable or disable BGP on the locale-service (default True).
tier0_idYesTier-0 gateway ID, as returned by list_tier0_gateways.
local_as_numYesLocal AS number as a string, e.g. "65001".
inter_sr_ibgpNoEnable inter-SR iBGP (default True).
locale_service_idNoLocale-service identifier (default "default").default

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already mark the call as non-read-only, but the description adds context: it is a write that only changes BGP settings, will not establish peering, and returns the updated config dict or an error/hint. This goes beyond the annotations by clarifing the exact scope of side effects and follow-up behavior.

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

Conciseness5/5

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

Three sentences, front-loaded with [WRITE] and the core action, with no redundant phrasing. Every sentence earns its place: what it does, prerequisite workflow, and follow-up.

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 multi-step BGP configuration tool with no output schema, the description covers prerequisite, scope, return shape, and follow-up check. The openWorldHint/idempotent annotations plus reference to siblings complete the picture, so no critical missing guidance.

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%, so the schema already documents all parameter names, types, defaults, and descriptions. The desdescription adds only light context, such as confirming tier0_id via get_tier0_gateway and naming the settings fields, which matches the baseline of 3.

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?

Description states a specific operation: configure BGP settings on a Tier-0 gateway's locale-service, and immediately distinguishes itself by noting it sets BGP settings only, not neighbor creation. The verb 'configure' plus resource clearly separates it from read-only siblings like get_tier0_gateway and get_bgp_neighbors.

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

Usage Guidelines5/5

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

Explicitly presribes a workflow: confirm tier0_id with get_tier0_gateway first, then configure, then check get_bgp_neighbors for session state. It also states when not to rely on it—neighbor creation is separate and peering will not come up from this call alone—so the agent can choose alternatives appropriately.

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

create_ip_poolA

[WRITE] Create an IP address pool with one static subnet and allocation range.

IP pools supply addresses to NSX consumers such as tunnel endpoints. Run list_ip_pools first to avoid overlapping ranges; start_ip and end_ip must both fall inside cidr. The same pool_id overwrites (PUT). Returns the created pool dict, else {"error", "hint"}. Then verify with get_ip_pool_usage; delete_ip_pool is the inverse.

ParametersJSON Schema
NameRequiredDescriptionDefault
cidrYesSubnet containing the range, e.g. "192.168.1.0/24".
end_ipYesLast allocatable IPv4 address, e.g. "192.168.1.100".
targetNoNSX Manager target from config (default if omitted).
pool_idYesUnique id (alphanumerics, hyphens, underscores only); becomes /infra/ip-pools/<pool_id>.
start_ipYesFirst allocatable IPv4 address, e.g. "192.168.1.10".
gateway_ipNoSubnet default gateway, e.g. "192.168.1.1".
display_nameYesUI display name.

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the annotations, the description discloses the write semantics explicitly with '[WRITE]', explains PUT overwrite behavior, describes the return value ('created pool dict, else {"error", "hint"}'), and states the validation constraint between parameters. This adds meaningful behavioral context that annotations alone do not provide.

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

Conciseness5/5

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

The description is front-loaded with the operation type and purpose, then gives concise workflow instructions. Every sentence adds value: prerequisite, constraint, behavior, return value, verification step, and inverse operation. No filler or redundancy.

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 7-parameter tool with no output schema and limited annotations, the description is remarkably complete. It covers prerequisites, operational behavior, validation rules, return shape, post-verification step, and inverse relationship. An agent has enough context to use and verify this tool correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the schema already documents every parameter with examples. The description adds important cross-parameter semantics: start_ip and end_ip must both fall inside cidr, and the same pool_id overwrites. This justifies a score above the baseline 3, though not a 5 since most parameter meaning already lives in 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?

The description states a specific action ('Create an IP address pool'), a specific resource ('IP address pool'), and its scope ('with one static subnet and allocation range'). It also differentiates from related tools by naming list_ip_pools, get_ip_pool_usage, and delete_ip_pool, making the tool's role in the workflow clear.

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

Usage Guidelines5/5

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

The description gives explicit usage guidance: run list_ip_pools first to avoid overlaps, ensure start_ip and end_ip fall inside cidr, be aware that same pool_id overwrites (PUT), verify with get_ip_pool_usage, and use delete_ip_pool as the inverse. This is strong practical routing and sequencing guidance.

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

create_nat_ruleA

[WRITE] Create a NAT rule on a Tier-1 gateway's USER NAT section.

Run list_tier1_gateways for tier1_id and list_nat_rules to avoid an id clash — the same rule_id overwrites. The gateway must have an edge cluster (see create_tier1_gateway) or NAT cannot be realized, and TIER1_NAT advertisement must be set via update_tier1_gateway for the translated address to be reachable from outside. Returns the created rule dict, else {"error", "hint"}. Then confirm with list_nat_rules; delete_nat_rule is the inverse.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionNo"DNAT" (default), "SNAT", "REFLEXIVE", "NO_SNAT", "NO_DNAT", or "NAT64".DNAT
targetNoNSX Manager target from config (default if omitted).
rule_idYesUnique ID for the NAT rule.
tier1_idYesGateway ID, as returned by list_tier1_gateways.
source_networkNoSource CIDR (required for SNAT).
translated_networkNoTranslated network/IP (required for all three).
destination_networkNoDestination CIDR (required for DNAT).

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only convey write and non-idempotent hints; the description adds meaningful behavior: the same rule_id overwrites, the gateway must have an edge cluster and TIER1_NAT advertisement for NAT to be realized, and returns the created rule dict or an error shape. This is exactly the kind of context that helps an agent anticipate side effects.

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

Conciseness5/5

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

The description is front-loaded with the purpose, then provides operational warnings, prerequisites, return expectations, and follow-up steps. Every sentence earns its place, and the length is appropriate for a tool with 7 parameters.

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 create tool with no output schema, it is complete: it explains prerequisites, id-clash behavior, return/error shape, and confirmation step. An agent can confidently invoke and verify the result. Nothing critical is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds value beyond the schema by warning that reusing a rule_id overwrites the existing rule, and by pointing to list_tier1_gateways as the source of tier1_id. That extra meaning justifies a 4.

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?

The description opens with 'Create a NAT rule on a Tier-1 gateway's USER NAT section', which is a specific verb, resource, and scope. It clearly distinguishes itself from sibling create tools like create_static_route and create_segment, and from list_nat_rules/delete_nat_rule.

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?

It gives concrete prerequisites and workflow: run list_tier1_gateways for tier1_id, run list_nat_rules to avoid an id clash, verify with list_nat_rules, and delete_nat_rule is the inverse. It lacks an explicit 'when not to use' exclusion, but the context is clear.

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

create_segmentA

[WRITE] Create an overlay or VLAN-backed NSX network segment.

Run list_transport_zones first for transport_zone_path; it decides whether subnet or vlan_ids applies — the wrong one is rejected. The same segment_id overwrites (PUT). Returns the created segment dict, else {"error", "hint"}. A segment with no gateway is isolated: link it with create_tier1_gateway, then verify with get_segment.

ParametersJSON Schema
NameRequiredDescriptionDefault
subnetNoGateway IP in CIDR for an overlay zone, e.g. "192.168.1.1/24" — the gateway address, not the network address.
targetNoNSX Manager target from config (default if omitted).
vlan_idsNoVLAN ID(s) for a VLAN-backed zone, e.g. "100,200".
segment_idYesUnique id (alphanumerics, hyphens, underscores only); becomes /infra/segments/<segment_id>.
display_nameYesUI display name.
transport_zone_pathYesFull path, e.g. "/infra/sites/default/enforcement-points/default/transport-zones/<tz-id>".

TDQS

A3.9/5.0
Behavior1/5

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

The description discloses useful behavior: it is a write operation, same segment_id overwrites via PUT, it returns the created segment dict or an error/hint, and a gateway-less segment is isolated. However, it contradicts the annotation idempotentHint=false by describing a PUT-style overwrite with the same segment_id, which implies idempotent upsert behavior.

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

Conciseness5/5

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

The description is compact and front-loaded: it states the action first, then packs prerequisites, parameter selection, overwrite behavior, return shape, and follow-up workflow into a few sentences. Every sentence contributes an operational fact with no 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 write operation with no output schema, the description covers the return contract (created segment dict, otherwise error/hint), the required precondition, the key parameter disambiguation, and the post-creation gateway workflow. It is appropriately complete for an agent to invoke the tool correctly.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds cross-parameter meaning not in the schema: transport_zone_path decides whether subnet or vlan_ids applies, and the wrong one is rejected. It also reinforces that segment_id becomes the /infra/segments/<segment_id> path.

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?

The description states a specific verb and resource: 'Create an overlay or VLAN-backed NSX network segment.' It also opens with [WRITE], making the operation's nature explicit. It clearly distinguishes this from sibling tools like list_segments, get_segment, update_segment, and delete_segment.

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?

It gives a concrete prerequisite ('Run list_transport_zones first for transport_zone_path'), explains the conditional parameter choice ('subnet or vlan_ids applies — the wrong one is rejected'), and outlines the follow-up workflow ('link it with create_tier1_gateway, then verify with get_segment'). It does not explicitly contrast with update_segment, but the guidance is otherwise clear and actionable.

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

create_static_routeA

[WRITE] Create a static route on a Tier-0 or Tier-1 gateway via the Policy API.

Use this for destinations not covered by connected or advertised routes, e.g. a VPN or external subnet. Run list_static_routes first to avoid an id clash — the same route_id overwrites (PUT). For the Tier-0 to advertise a Tier-1's static route upstream, the gateway needs TIER1_STATIC_ROUTES advertisement, set via update_tier1_gateway. Returns the created route dict, else {"error", "hint"}. Then confirm with list_static_routes; delete_static_route is the inverse.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNoNSX Manager target from config (default if omitted).
networkYesDestination network in CIDR notation, e.g. "10.0.0.0/8".
next_hopYesNext-hop IPv4 address, e.g. "192.168.1.254".
route_idYesUnique id (alphanumerics, hyphens, underscores only).
tier1_idYesGateway ID (Tier-0 or Tier-1, per gateway_type), from list_tier0_gateways / list_tier1_gateways.
gateway_typeNoEither "tier0" or "tier1" (default "tier1").tier1

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations, the description discloses important behavioral details: the same route_id overwrites via PUT, the risk of an id clash, the advertisement prerequisite for Tier-0 route propagation, the return shape (created route dict or error/hint), and the recommended confirmation via list_static_routes. This goes well beyond what readOnlyHint/idempotentHint/destructiveHint provide.

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

Conciseness5/5

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

The description is well-structured and front-loaded with the core purpose, then packs critical caveats and workflow guidance into a few purposeful sentences. No sentence is redundant; each one adds operational value.

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?

Given that there is no output schema, the description compensates by telling the agent what to expect in return. It covers when to use the tool, what to check before calling, overwrite behavior, an advertisement prerequisite, and how to verify the result, making the call sequence complete.

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 description coverage is 100%, so the schema already documents all six parameters. The description adds operational context around route_id because it warns about overwriting with the same id, but it does not add substantially new parameter-level semantics 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?

The description opens with a specific verb and resource: 'Create a static route on a Tier-0 or Tier-1 gateway via the Policy API.' This clearly identifies the tool's purpose and distinguishes it from sibling tools like create_nat_rule, create_segment, and list_static_routes.

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

Usage Guidelines5/5

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

The description explicitly says when to use the tool ('for destinations not covered by connected or advertised routes') and provides a precondition: run list_static_routes first to avoid an id clash. It also references update_tier1_gateway for advertisement settings and delete_static_route as the inverse, giving clear routing among siblings.

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

create_tier1_gatewayA

[WRITE] Create a Tier-1 gateway to route segments, optionally uplinked to a Tier-0.

Use this before create_segment when the segment needs routing; get tier0_path from list_tier0_gateways and edge_cluster_path from list_edge_clusters first. Without route_advertisement, connected subnets stay unreachable from outside until it is set here or via update_tier1_gateway. The same tier1_id overwrites (PUT). Returns the created gateway dict, else {"error", "hint"}; verify with get_tier1_gateway.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNoNSX Manager target from config (default if omitted).
tier1_idYesUnique id (alphanumerics, hyphens, underscores); becomes /infra/tier-1s/<tier1_id>.
tier0_pathNoParent Tier-0 path, e.g. "/infra/tier-0s/<t0-id>"; omit for a standalone gateway.
display_nameYesUI display name.
edge_cluster_pathNoRequired for NAT and other stateful services.
route_advertisementNoComma-separated: TIER1_CONNECTED, TIER1_STATIC_ROUTES, TIER1_NAT, TIER1_LB_VIP, TIER1_LB_SNAT, TIER1_DNS_FORWARDER_IP, TIER1_IPSEC_LOCAL_ENDPOINT.

TDQS

A4.1/5.0
Behavior1/5

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

The description discloses useful behavior: write semantics, reachability caveat without route_advertisement, PUT-style overwrite for the same tier1_id, return shape, and verification via get_tier1_gateway. However, it contradicts the annotations: the description calls the operation a PUT overwrite, implying idempotency, while idempotentHint is false. Per rules, a contradiction forces a score of 1.

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

Conciseness5/5

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

The description is information-dense and scannable: the [WRITE] tag is front-loaded, followed by purpose, usage prerequisites, behavioral caveat, overwrite semantics, return value, and verification. Every sentence earns its place; there is no filler or repetition of schema content.

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 mutating tool with 6 parameters and no output schema, the description covers prerequisites, failure return shape, verification via get_tier1_gateway, overwrite behavior, and route advertisement side effects. This is complete enough for an agent to select and invoke the tool correctly, aside from the annotation contradiction already flagged.

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

Parameters4/5

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

Schema coverage is 100%, so the schema already documents each parameter. The description adds value beyond the schema by explaining where to obtain tier0_path and edge_cluster_path, and by describing the connectivity consequence of omitting route_advertisement. That extra context lifts it above the baseline of 3.

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?

The description states a specific verb (Create) and resource (Tier-1 gateway to route segments, optionally uplinked to Tier-0). It clearly differentiates from create_segment by saying to use it before create_segment when routing is needed, and from update_tier1_gateway by noting route advertisement can be set later via that sibling.

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

Usage Guidelines5/5

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

Explicitly provides when-to-use guidance: use before create_segment when the segment needs routing. It also names prerequisites (get tier0_path from list_tier0_gateways, edge_cluster_path from list_edge_clusters) and identifies update_tier1_gateway as an alternative for setting route advertisement later.

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

delete_ip_poolA
Destructive

[WRITE] Permanently delete an IP address pool.

Irreversible: consumers such as transport endpoints can no longer allocate, and NSX rejects the delete if the pool still has active allocations. Run get_ip_pool_usage on the same pool_id first to confirm it is unused, and confirm with the user before deleting. Returns a confirmation string, or an "Error: ..." string — not a dict.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNoNSX Manager target from config (default if omitted).
pool_idYesIP pool ID to delete, as returned by list_ip_pools.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already mark the tool as destructive and not read-only, but the description adds crucial behavior: deletion is irreversible, consumers can no longer allocate, NSX rejects deletion if allocations are active, and the return value is a string rather than a dict. This goes well beyond the annotations.

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

Conciseness5/5

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

The description is compact and front-loaded with the core action, then adds necessary warnings and return-type details. Every sentence serves a purpose, and there is no 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 tool, the description fully covers the essential context: irreversibility, failure conditions, required precheck, user confirmation, and return format. The annotations and schema cover the rest, so nothing important is missing.

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?

The input schema already provides 100% parameter coverage, including pool_id and target descriptions. The description adds a small amount of extra meaning by linking pool_id to get_ip_pool_usage, but the schema does the primary documentation work.

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?

The description states a specific verb and resource: 'Permanently delete an IP address pool.' It is immediately distinguishable from sibling tools like create_ip_pool, list_ip_pools, and get_ip_pool_usage through its focus on deletion.

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

Usage Guidelines5/5

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

The description gives explicit preconditions: run get_ip_pool_usage on the same pool_id first to confirm the pool is unused, and confirm with the user before deleting. This tells the agent exactly when and under what conditions to invoke the tool.

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

delete_nat_ruleA
Destructive

[WRITE] Permanently delete a NAT rule from a Tier-1 gateway's USER NAT section.

Irreversible: traffic matched by the rule stops being translated immediately, which can break inbound (DNAT) or outbound (SNAT) connectivity. Run list_nat_rules on the same tier1_id first to confirm the rule_id and review its action and networks, and confirm with the user before deleting. Returns a confirmation string, or an "Error: ..." string — not a dict.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNoNSX Manager target from config (default if omitted).
rule_idYesNAT rule ID to delete, as returned by list_nat_rules.
tier1_idYesGateway that owns the rule, as returned by list_tier1_gateways.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

The description discloses irreversible consequences, immediate traffic translation stoppage, and potential DNAT/SNAT connectivity breakage, which is rich behavioral context beyond the destructiveHint and idempotentHint annotations. It also clarifies the return format ('confirmation string, or an Error string — not a dict'), a useful trait not present in any annotation.

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

Conciseness5/5

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

The description is compact and front-loaded with the action marker '[WRITE]' and the primary verb. Each sentence earns its place: scope, irreversibility, prerequisite steps, user confirmation, and return type. There is no redundant wording or restatement of the schema.

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 mutation tool, the description covers what is deleted, why it is dangerous, how to verify before deleting, what to do before calling, and what the response looks like. The output schema is indicated as present, and the description itself communicates the return behavior, so nothing critical is missing.

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 description coverage is 100%, so the baseline is 3. The schema already explains rule_id and tier1_id, and the description reinforces the relationship between them by advising to run list_nat_rules on the same tier1_id. The optional target parameter is not elaborated, but the schema documents its default. Thus the description adds only marginal value 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?

The description states a specific verb and resource: 'Permanently delete a NAT rule from a Tier-1 gateway's USER NAT section.' This clearly distinguishes the tool from siblings like create_nat_rule and list_nat_rules, and the qualifier 'USER NAT section' adds precision beyond the name alone.

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

Usage Guidelines5/5

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

The description provides explicit sequential guidance: run list_nat_rules on the same tier1_id first, confirm the rule_id, review its action and networks, and confirm with the user before deleting. This goes beyond vague context to actionable when-to-use instructions that reduce the risk of accidental deletions.

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

delete_segmentA
Destructive

[WRITE] Delete a network segment. WARNING: this disconnects all attached VMs.

Irreversible. Run get_segment on the same segment_id first and check port_count — NSX refuses to delete a segment that still has attached ports — and confirm with the user before deleting. Returns a confirmation string, or an "Error: ..." string — not a dict.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNoNSX Manager target from config (default if omitted).
segment_idYesSegment ID to delete, as returned by list_segments.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

The description richly discloses behavior beyond the destructiveHint annotation: it is irreversible, disconnects all attached VMs, requires a pre-check via get_segment, and returns a confirmation string or an error string rather than a dict. This fully prepares the agent for side effects and failure modes.

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

Conciseness5/5

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

The description is front-loaded with the operation and warning, then provides concise, high-value procedural steps. Every sentence earns its place, and the length is justified given the destructive nature of the operation.

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?

Despite having an output schema, the description explicitly clarifies the return format (confirmation string or error string), which is useful. It covers prerequisites, irreversibility, user confirmation, and failure behavior, making it complete for a destructive tool.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds meaningful semantic guidance for segment_id by instructing the agent to run get_segment first and check port_count, which goes beyond the schema's simple 'Segment ID to delete' explanation.

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?

The description states a specific verb and resource: 'Delete a network segment.' It clearly differentiates from siblings like delete_tier1_gateway and get_segment by naming the target resource and the warning about attached VMs.

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?

The description gives clear usage context: run get_segment first, check port_count, and confirm with the user before deleting. It explains the precondition (NSX refuses deletion when ports are attached) but does not explicitly compare against alternative tools for different deletion scenarios.

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

delete_static_routeA
Destructive

[WRITE] Permanently delete a static route from a Tier-0 or Tier-1 gateway.

Irreversible: traffic to the route's destination CIDR immediately falls back to remaining routes or is dropped. Run list_static_routes on the same tier1_id first to confirm the route_id, destination and next hops, and confirm with the user before deleting. gateway_type must match where the route lives. Returns a confirmation string, or an "Error: ..." string — not a dict.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNoNSX Manager target from config (default if omitted).
route_idYesStatic route ID to delete, as returned by list_static_routes.
tier1_idYesGateway that owns the route (Tier-0 or Tier-1, per gateway_type), from list_tier0_gateways / list_tier1_gateways.
gateway_typeNoEither "tier0" or "tier1" (default "tier1").tier1

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations (destructiveHint=true, readOnlyHint=false), the description adds meaningful behavioral context: the operation is irreversible, traffic immediately falls back or gets dropped, one must confirm with the user, and the return value is a confirmation string or an 'Error: ...' string rather than a dict. This materially improves agent calibration.

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

Conciseness5/5

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

The description is compact and front-loaded with the operation type, followed by necessary warnings, preconditions, and return behavior. Every sentence contributes: irreversibility, traffic impact, prerequisite list, user confirmation, type constraint, and response format. No 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 4-parameter tool with annotations and full schema coverage, the description is complete. It covers prerequisites, destructive side effects, parameter consistency, user confirmation, and return shape. An agent has everything needed to safely invoke this tool and interpret the result.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds value by tying route_id to list_static_routes output, clarifying that tier1_id must be the owning gateway according to gateway_type, and emphasizing that gateway_type must match where the route lives. This goes beyond the raw schema descriptions.

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?

The description opens with a specific verb and resource — 'Permanently delete a static route from a Tier-0 or Tier-1 gateway' — which precisely identifies the operation and distinguishes it from sibling tools like delete_tier1_gateway, delete_nat_rule, and create_static_route. No ambiguity about what is acted on.

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?

The tool tells the agent to first run list_static_routes on the same tier1_id to confirm the route_id, destination, and next hops, and instructs user confirmation before deleting. It also requires gateway_type to match where the route lives. It does not explicitly name alternatives or when-not-to-use scenarios, but for a destructive route deletion the workflow guidance is clear enough.

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

delete_tier1_gatewayA
Destructive

[WRITE] Delete a Tier-1 gateway. WARNING: removes attached segments and NAT rules.

Irreversible. Run get_tier1_gateway and list_nat_rules on the same tier1_id first to see what goes with it, and confirm with the user before deleting. Also removes the gateway's "default" locale-service first (the Policy API refuses to delete a Tier-1 that still has children); a missing locale-service is ignored. Returns a confirmation string, or an "Error: ..." string — not a dict.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNoNSX Manager target from config (default if omitted).
tier1_idYesGateway ID to delete, as returned by list_tier1_gateways.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already mark destructiveHint=true, and the description substantially expands on this by detailing exact side effects: removes attached segments and NAT rules, irreversibly deletes, removes the default locale-service first, explains the Policy API constraint, and clarifies error/return behavior. No contradiction with annotations.

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

Conciseness5/5

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

The description is compact and front-loaded with the most critical warning, then expands into prerequisites, API behavior, and return type. Every sentence contributes meaningful information without redundancy.

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 write operation, the description covers side effects, irreversibility, required pre-checks, confirmation need, API-specific locale-service handling, and return format. The output schema is also present, so nothing needed to invoke the tool correctly is missing.

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 description coverage is 100%, with tier1_id described as 'Gateway ID to delete, as returned by list_tier1_gateways' and target explained as an override. The description adds no new parameter-level details beyond reinforcing that the same tier1_id should be used for pre-checks, so the baseline 3 is appropriate.

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?

The description begins with '[WRITE] Delete a Tier-1 gateway', clearly identifying the verb and resource. It distinguishes this from sibling create/update tools by emphasizing removal and irreversible side effects.

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?

The description gives clear pre-use guidance: run get_tier1_gateway and list_nat_rules on the same tier1_id first, and confirm with the user before deleting. It does not explicitly contrast with alternatives like delete_nat_rule or update_tier1_gateway, but the destructive context makes the appropriate usage clear.

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

get_bgp_neighborsA
Read-onlyIdempotent

[READ] Get BGP configuration and neighbor status for a Tier-0 gateway.

Use this to verify dynamic routing after configure_tier0_bgp, or when troubleshooting north-south connectivity. Returns one dict (not the list envelope): tier0_id, locale-service info, BGP config (local AS, enabled, ECMP), neighbors (peer IP, remote ASN, timers) and realized session status (connection_state, in/out prefix counts). Only the gateway's FIRST locale-service is read; a gateway with none returns a hint, not an error.

If sessions are down, check get_edge_cluster_status — BGP runs on the edge members. Static routes are listed separately by list_static_routes.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNoNSX Manager target from config (default if omitted).
tier0_idYesTier-0 gateway ID, as returned by list_tier0_gateways.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description goes further by disclosing the return shape ('one dict, not the list envelope'), the first-locale-service limitation, and that a gateway with none 'returns a hint, not an error.' This is valuable behavioral context beyond the annotations.

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

Conciseness5/5

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

The description is well-structured and front-loaded: a one-sentence purpose, a usage sentence, return details, edge-case behavior, and cross-references to related tools. Every sentence earns its place and none are 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?

There is no output schema, so the description compensates by listing the returned fields (tier0_id, locale-service info, BGP config, neighbors, session status). It also covers edge cases and provides fallback guidance to related tools. Given the simple two-parameter schema and rich annotations, nothing important is missing.

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 description coverage is 100%, so the schema already documents tier0_id and target. The description does not add new parameter details beyond what the schema provides; it only references the tier0_id source ('as returned by list_tier0_gateways'), which is also in the schema. Thus baseline 3 is appropriate.

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?

The description opens with a specific verb and resource: 'Get BGP configuration and neighbor status for a Tier-0 gateway.' It clearly distinguishes this from sibling tools like configure_tier0_bgp (write operation), get_tier0_gateway (general gateway info), and list_static_routes (static route listing).

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

Usage Guidelines5/5

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

The description explicitly states when to use the tool: 'verify dynamic routing after configure_tier0_bgp, or when troubleshooting north-south connectivity.' It also routes to alternatives: 'check get_edge_cluster_status' if sessions are down and notes static routes are covered by list_static_routes.

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

get_edge_cluster_statusA
Read-onlyIdempotent

[READ] Check status of an edge cluster (member health, overall status).

Use this after list_edge_clusters when north-south traffic, NAT or BGP looks broken — Tier-0/Tier-1 stateful services run on these members. Returns one dict (not the list envelope): cluster_id, edge_cluster_status, member_count and members (transport_node_id, transport_node_name, status). Member status only — why a member is degraded comes from get_transport_node_status.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNoNSX Manager target from config (default if omitted).
cluster_idYesEdge cluster UUID, as returned by list_edge_clusters.

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the read_only/destructive/idempotent annotations, the description discloses the return shape ('Returns one dict (not the list envelope)'), the exact fields, and the important limitation that it reports member status only, routing degradation reasoning to another tool. The '[READ]' label also matches the read-only annotation.

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

Conciseness5/5

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

The description is four sentences, front-loaded with purpose and usage, then the output contract, then a boundary against a sibling. Every sentence earns its place with no filler or repetition.

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?

With only two parameters, full schema coverage, read-only annotations, and no output schema, the description provides sufficient context: when to call, what it returns, and where to get related information. No essential detail for invoking it correctly is missing.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds meaningful context beyond the schema by indicating that cluster_id is obtained from list_edge_clusters and by clarifying the output is a dict rather than a list. This is a slight enhancement over the schema, though not critical.

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?

The description opens with '[READ] Check status of an edge cluster (member health, overall status)', which names a specific verb and resource. It clearly distinguishes this tool from siblings like get_transport_node_status and list_edge_clusters by stating its scope and explicitly noting what it does not cover.

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

Usage Guidelines5/5

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

Gives explicit conditions for use: 'Use this after list_edge_clusters when north-south traffic, NAT or BGP looks broken — Tier-0/Tier-1 stateful services run on these members.' It also points to the alternative for deeper diagnostics: 'why a member is degraded comes from get_transport_node_status.' This is direct, actionable guidance for tool selection.

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

get_ip_pool_usageA
Read-onlyIdempotent

[READ] Get current IP allocations for one IP address pool.

Use this after list_ip_pools to see how much of a pool is consumed — e.g. diagnosing TEP address exhaustion, or before delete_ip_pool, which cannot proceed while allocations remain. Returns a single dict (not the list envelope): pool_id, allocation_count and allocations (id, display_name, allocation_ip). An empty allocations list means the pool is unused, not that the query failed. On failure returns {"error", "hint"}.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNoNSX Manager target from config (default if omitted).
pool_idYesIP pool ID, as returned by list_ip_pools.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already provide readOnly/idempotent safety, and the description adds valuable behavioral context: return shape is a single dict (not a list envelope), empty allocations list means unused rather than failure, and failure returns a specific {'error', 'hint'} structure. This goes well beyond the annotations.

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

Conciseness5/5

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

The description is well-structured and front-loaded with the core purpose, followed by usage context, return format, and error semantics. Every sentence adds meaningful information with no filler or repetition.

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?

With no output schema, the description compensates by specifying the returned dict fields (pool_id, allocation_count, allocations with id/display_name/allocation_ip), the meaning of an empty list, and the error format. It also covers the prerequisite list_ip_pools and the delete_ip_pool interaction, making it fully actionable.

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 description coverage is 100%, with both target and pool_id documented in the input schema. The tool description does not add parameter-specific meaning beyond what the schema already provides, so the baseline score of 3 applies.

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?

Description states a specific verb ('Get') and resource ('IP allocations for one IP address pool'), clearly distinguishing this from listing all pools. It explicitly says it returns a single dict, not the list envelope, which differentiates it from sibling list_ip_pools.

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

Usage Guidelines5/5

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

The description gives explicit when-to-use guidance: 'Use this after list_ip_pools' to check consumption, for diagnosing TEP address exhaustion, or before delete_ip_pool. It also explains the prerequisite relationship and why it matters, making the invocation context unambiguous.

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

get_logical_port_statusA
Read-onlyIdempotent

[READ] Check realized state of all ports on a segment (first 50 ports).

Use this after get_segment_port_for_vm has told you which segment a VM sits on, or before delete_segment to see whether ports are still attached. Returns per-port admin_state, attachment (type/id) and realized state: attached, realized_bindings_count, transport_node_ids. NSX does not expose a single UP/DOWN flag per segment port — an attached port with realized bindings on at least one transport node is healthy. Only the first 50 ports are returned.

If bindings are missing everywhere, check get_transport_node_status.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNoNSX Manager target from config (default if omitted).
segment_idYesSegment ID whose ports to inspect, as returned by list_segments.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already mark this as readOnly, idempotent, and non-destructive, but the description adds important behavioral context beyond them: it explains the returned fields, the 50-port limit, the lack of a single UP/DOWN flag in NSX, and the health criterion of realized bindings on at least one transport node. This meaningfully helps the agent interpret results correctly.

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

Conciseness5/5

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

The description is front-loaded with the action, then a usage paragraph, a return-value paragraph, a critical NSX semantic clarification, and a fallback pointer. Every sentence earns its place and there is minimal redundancy.

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?

With no output schema, the description carries the burden of explaining return values, and it does so explicitly: admin_state, attachment, realized_bindings_count, transport_node_ids, and the health interpretation. It also flags the 50-port truncation and provides a next-step tool when bindings are missing, making the definition complete for a read-only inspection tool.

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 description coverage is 100%, so the schema already documents both segment_id and target. The description confirms segment_id is the port-inspection scope but adds no additional parameter-level syntax or format details, matching the baseline for fully covered schemas.

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?

Description opens with a specific verb and resource: 'Check realized state of all ports on a segment', and immediately scopes it to the first 50 ports. It distinguishes itself from siblings by explaining when to use it relative to get_segment_port_for_vm and delete_segment, and contrasts with get_transport_node_status for the binding-missing case.

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

Usage Guidelines5/5

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

Explicit guidance covers both when to use and when not to use: 'Use this after get_segment_port_for_vm' and 'before delete_segment to see whether ports are still attached.' It also names the alternative path: 'If bindings are missing everywhere, check get_transport_node_status.' This is strong routing behavior for an agent.

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

get_nsx_manager_statusA
Read-onlyIdempotent

[READ] Get NSX Manager cluster status (node health, control/management plane).

Start any NSX health check here: if the manager cluster is degraded, every other reading is suspect. Returns one dict (not the list envelope): cluster_id, overall_status, control_cluster_status, mgmt_cluster_status, online_node_count and nodes. Only online nodes are listed, so a node missing from nodes is down rather than absent. Then list_nsx_alarms for what is actually firing.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNoNSX Manager target from config (default if omitted).

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the readOnlyHint/idempotentHint annotations, the description discloses important behavior: the return shape is a single dict rather than the typical list envelope, and it explicitly states that only online nodes are listed, so a missing node means down. This is critical non-obvious context that helps an agent interpret results correctly.

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

Conciseness5/5

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

The description is compact, front-loaded with the purpose and usage directive, and every sentence adds value. It includes return fields, a behavioral caveat, and a pointer to the next logical tool without any filler or repetition of schema details.

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?

With no output schema, the description fully compensates by enumerating the returned fields and explaining the meaning of missing nodes. It also provides the recommended invocation context and follow-up action. Nothing essential is missing for an agent to call and interpret this tool 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 description coverage is 100% for the single optional target parameter, so the schema already explains it adequately. The description adds nothing about parameters, but none is needed given one optional parameter with a clear default. This matches the baseline score for high schema coverage.

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?

The description names a specific verb and resource: 'Get NSX Manager cluster status', specifying node health and control/management plane health. The '[READ]' prefix reinforces the operation's nature. This clearly distinguishes it from sibling status tools like get_edge_cluster_status or get_transport_node_status by targeting the manager cluster specifically.

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

Usage Guidelines5/5

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

The description explicitly instructs to 'Start any NSX health check here' and explains why: if the manager cluster is degraded, other readings are suspect. It also names a sibling tool, list_nsx_alarms, as the follow-up for actual firing alarms, giving a clear when-to-use and when-to-move-on path.

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

get_segmentA
Read-onlyIdempotent

[READ] Get full details for one network segment, including its attached ports.

Use after list_segments to inspect one segment. Returns one dict (not the list envelope): id, display_name, type, admin_state, subnets, transport_zone_path, connectivity_path (linked gateway), vlan_ids, port_count, and the first 50 ports only. A segment with attached ports cannot be deleted — check port_count before calling delete_segment. For per-port realized state use get_logical_port_status; to change the segment use update_segment.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNoNSX Manager target from config (default if omitted).
segment_idYesSegment ID — final component of /infra/segments/<id>, as returned by list_segments.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already indicate read-only, idempotent, and non-destructive behavior. The description adds valuable context beyond that: it states the exact return shape ('one dict, not the list envelope'), enumerates returned fields, discloses a truncation boundary ('first 50 ports only'), and warns that attached ports affect deletion. This is rich behavioral disclosure that helps an agent predict consequences.

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

Conciseness5/5

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

The description is compact but information-dense. Every sentence serves a purpose: scoping the operation, specifying the return contract, describing output fields, noting the truncation limit, and routing to related tools. It is front-loaded with the core purpose and does not waste words.

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?

Despite having no output schema, the description fully compensates by enumerating return fields and the response style. It covers usage sequence, related tools, deletion implications, and behavioral limits. For a simple read-by-id tool with strong annotations, nothing essential is missing.

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 description coverage is 100%, so the schema already documents segment_id and target. The description reinforces that segment_id comes from list_segments, but this is largely already present in the schema. It does not add substantial new parameter-level semantics beyond that, so the baseline of 3 is appropriate.

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?

The description opens with a specific verb and resource: 'Get full details for one network segment, including its attached ports.' It clearly distinguishes this tool from list_segments by scoping it to a single segment, and the title/name are not merely restated.

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

Usage Guidelines5/5

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

It explicitly says 'Use after list_segments to inspect one segment' and provides direct routing to alternatives: 'For per-port realized state use get_logical_port_status; to change the segment use update_segment.' It also gives a practical precondition involving delete_segment, so an agent knows exactly when to use this tool versus siblings.

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

get_segment_port_for_vmA
Read-onlyIdempotent

[READ] Find which segment(s) a VM is attached to via its VIF attachments.

Start here for "why can this VM not reach the network?" — it is the only tool mapping a VM name onto NSX topology. Looks the VM up in the fabric inventory, fetches its VIFs, and matches segment ports by lport_attachment_id. Returns one dict (not the list envelope): VM info (external_id, host, power state) and matched_ports (segment id/name, port id/name). Matching is on exact display name, and empty matched_ports means no VIF is attached, not that the VM is missing.

Then get_logical_port_status on the segment it names. VM power and placement are not managed here — use vmware-aiops.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNoNSX Manager target from config (default if omitted).
vm_display_nameYesVM display name as shown in vCenter/NSX inventory.

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the read-only annotations, the description discloses the return shape ('one dict, not the list envelope'), the exact-looking matching on display name, and the important empty-result semantics: empty matched_ports means no VIF is attached, not that the VM is missing. It also outlines the lookup/fetch/match mechanics.

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

Conciseness5/5

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

The description is dense but every sentence earns its place: the READ label, usage trigger, uniqueness claim, return format, matching rule, empty-result caveat, next step, and explicit exclusion. It is front-loaded with the core purpose and avoids 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?

Despite having no output schema, the description tells the agent what the returned dict contains and its structure. It also covers common interpretation pitfalls and routes the agent to the right follow-up tool, making the description complete for correct invocation and result handling.

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

Parameters4/5

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

The input schema already covers vm_display_name and target with 100% coverage, so the baseline is 3 from the schema. The description adds meaningful semantic value by emphasizing exact display-name matching and explaining what a missing match means, which helps the agent interpret the parameter's output behavior.

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?

The description states a specific action and resource: exactly which segment port(s) a VM maps to via VIF attachments. It also differentiates itself from siblings by calling itself 'the only tool mapping a VM name onto NSX topology.'

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

Usage Guidelines5/5

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

It explicitly frames when to start: 'Start here for "why can this VM not reach the network?"' It also tells the agent what to do next with get_logical_port_status, and explicitly excludes VM power/placement concerns by directing to vmware-aiops.

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

get_tier0_gatewayA
Read-onlyIdempotent

[READ] Get configuration details for one Tier-0 gateway (north-south edge router).

Use after list_tier0_gateways to inspect HA configuration, or to build the tier0_path ("/infra/tier-0s/") that create_tier1_gateway needs. For BGP peering state use get_bgp_neighbors instead. Returns one dict (not the list envelope): id, display_name, ha_mode, failover_mode, transit_subnets, internal_transit_subnets, rd_admin_field. Static config only — it does not say whether the gateway is currently forwarding.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNoNSX Manager target from config (default if omitted).
tier0_idYesTier-0 gateway ID, as returned by list_tier0_gateways.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, and the description adds meaningful behavioral detail beyond that: it returns a single dict rather than a list envelope, enumerates the returned fields, and explicitly notes that current forwarding state is not included. There is no contradiction with annotations.

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

Conciseness5/5

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

The description is compact and efficiently front-loaded with the core purpose, followed by usage context, a sibling alternative, and return-shape details. Every sentence adds actionable information with no 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?

Given the tool has no output schema, the description compensates well by listing the exact returned fields and the response shape. It also covers the key operational context: when to call it, how it relates to sibling tools, and its static-config limitation. An agent has enough information to invoke and interpret the result correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds extra meaning by explaining why tier0_id matters (it is needed to construct tier0_path for create_tier1_gateway) and reinforces that the ID comes from list_tier0_gateways. This goes slightly beyond the schema's own parameter descriptions.

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?

The description starts with a specific verb and resource: 'Get configuration details for one Tier-0 gateway', and adds the clarifying parenthetical 'north-south edge router'. It clearly distinguishes this from list_tier0_gateways (plural listing) and get_tier1_gateway (different resource).

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

Usage Guidelines5/5

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

The description gives explicit usage guidance: use after list_tier0_gateways, use it to inspect HA configuration or build the tier0_path for create_tier1_gateway, and use get_bgp_neighbors instead for BGP peering state. It also states the limitation that this is static config only, so an agent knows not to use it for forwarding status.

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

get_tier1_gatewayA
Read-onlyIdempotent

[READ] Get detailed info for one Tier-1 gateway.

Use after list_tier1_gateways, and always before update_tier1_gateway — update is a PATCH, so you need the current values to know what you are changing. Returns a single detail dict (not the list envelope): id, display_name, tier0_path, failover_mode, route_advertisement_types, type. Attached segments are not listed here — use list_segments for those.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNoNSX Manager target from config (default if omitted).
tier1_idYesTier-1 gateway ID, as returned by list_tier1_gateways.

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the readOnlyHint/idempotentHint annotations, the description discloses return format (single dict not list envelope), the exact fields returned, and what is deliberately omitted. It also explains the update workflow dependency, providing meaningful behavioral context an agent cannot derive from annotations alone.

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

Conciseness5/5

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

The description is compact and well-structured: a READ marker, a one-line purpose, usage ordering, return details, and a pointer to a sibling tool. Every sentence earns its place and no unnecessary filler is present.

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 simple two-parameter, no-output-schema tool with rich annotations, the description covers purpose, ordering, return shape, included fields, and exclusions. Nothing an agent needs to invoke it correctly is missing.

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 description coverage is 100%, so the schema fully documents both target and tier1_id. The description reiterates that tier1_id comes from list_tier1_gateways, which the schema already says, so it adds little semantic value beyond the structured definition.

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?

Clearly states a specific verb and resource: 'Get detailed info for one Tier-1 gateway.' It distinguishes itself from list_tier1_gateways by specifying a single detail dict rather than the list envelope, and from list_segments by noting attached segments are not included. The purpose is unambiguous and differentiates from siblings.

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

Usage Guidelines5/5

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

Explicitly provides a usage sequence: use after list_tier1_gateways and always before update_tier1_gateway, with the rationale that update is a PATCH requiring current values. It also names list_segments for attached segments, giving clear when-to-use and alternative guidance.

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

get_transport_node_statusA
Read-onlyIdempotent

[READ] Get realized runtime status of one transport node (ESXi host or Edge node).

Use after list_transport_nodes when a node looks degraded or overlay tunnels are suspect; for cluster-wide edge health use get_edge_cluster_status instead. Returns one dict (not the list envelope): node_id, status (UP, DEGRADED, DOWN, UNKNOWN), control_connection_status, mgmt_connection_status, tunnel_status (up/down/degraded counts, BFD counters) and pnic_status. Point-in-time only — no history.

If tunnels are down on one segment only, follow up with get_logical_port_status rather than blaming the node.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNoNSX Manager target from config (default if omitted).
node_idYesTransport node UUID, as returned by list_transport_nodes.

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the safely annotations, the description discloses that it returns one dict rather than a list envelope, enumerates the status fields, and warns that the data is 'Point-in-time only — no history'. This goes well beyond what readOnlyHint and idempotentHint already communicate.

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

Conciseness5/5

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

The description is front-loaded with the core operation, then compactly covers when to use it, what it returns, and when to switch to a sibling tool. Every sentence earns its place and nothing repeats the schema.

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?

Even though no output schema exists, the description tells the agent exactly what the return dict contains, that it is point-in-time, and which sibling tools cover broader or segment-specific diagnossis. Given the annotations and 100% schema coverage, an agent has everything needed to invoke it correctly.

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

Parameters4/5

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

The schema already covers both parameters at 100%, so the baseline is strong. The description adds useful meaning by clarifying that node_id refers to an ESXi host or Edge node and by directing the agent to list_transport_nodes as the source of valid IDs. The default target parameter needs no extra explanation.

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?

The description names a specific operation and resource: 'Get realized runtime status of one transport node (ESXi host or Edge node)'. It also distinguishes itself from get_edge_cluster_status and get_logical_port_status, so an agent can select it without opening schemas.

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

Usage Guidelines5/5

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

It gives explicit triggers ('Use after list_transport_nodes when a node looks degraded or overlay tunnels are suspect'), an explicit alternative ('for cluster-wide edge health use get_edge_cluster_status instead'), and a follow-up instruction for segment-local tunnel failures. Usage guidance is complete.

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

list_edge_clustersA
Read-onlyIdempotent

[READ] List all edge clusters with member count and deployment type.

Returns the result envelope; check truncated before calling it complete. Page it: limit is the page size (1-1000, default 50; 0 or negative is rejected), offset is how many rows to skip, and the response carries next_offset — pass that back as offset and stop when it is null. Do not loop on truncated: that says this page is not the whole collection, so it stays true on the last page of a walk.

Use this first to resolve a cluster_id, then get_edge_cluster_status for member health. The id is also what create_tier1_gateway's edge_cluster_path is built from — a Tier-1 without an edge cluster cannot run NAT.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoPage size, 1-1000 (default 50).
offsetNoRows to skip; pass the previous response's `next_offset`.
targetNoNSX Manager target from config (default if omitted).

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the readOnly/idempotent annotations, the description discloses pagination mechanics: check truncated, pass next_offset back as offset, stop when next_offset is null, and do not loop on truncated. It also warns that limit values 0 or negative are rejected, adding operational behavior not visible in annotations.

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

Conciseness5/5

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

The description is detailed but every sentence serves a purpose: purpose, pagination, truncated semantics, workflow, and a dependency warning. It is front-loaded with the core read operation and then layers protocol details without repetition or 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?

With no output schema, the description compensates by explaining the result envelope, truncated, next_offset, and the stop condition for pagination. It also provides the cross-tool context about cluster_id and Tier-1 NAT, making the tool's role in a multi-step workflow clear.

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

Parameters4/5

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

The schema already covers limit, offset, and target with useful descriptions, so the baseline is 3. The description adds the '0 or negative is rejected' constraint and clarifies the offset walk pattern with next_offset and the null stop condition, which is extra semantic value 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?

The description opens with '[READ] List all edge clusters with member count and deployment type,' naming a specific verb, resource, and output fields. It clearly differentiates from get_edge_cluster_status and other sibling tools by framing this as the collection-listing entry point.

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

Usage Guidelines5/5

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

It explicitly says to use this tool first to resolve a cluster_id and then call get_edge_cluster_status for health, and it explains the relationship to create_tier1_gateway's edge_cluster_path. This gives the agent concrete routing guidance among siblings rather than leaving usage to inference.

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

list_ip_poolsA
Read-onlyIdempotent

[READ] List all IP address pools with subnets and usage summary.

Returns the result envelope; check truncated before calling it complete. Page it: limit is the page size (1-1000, default 50; 0 or negative is rejected), offset is how many rows to skip, and the response carries next_offset — pass that back as offset and stop when it is null. Do not loop on truncated: that says this page is not the whole collection, so it stays true on the last page of a walk.

Use this first to resolve a pool_id, then get_ip_pool_usage for the actual allocations — the summary here does not tell you which addresses are taken. Run it before create_ip_pool to avoid overlapping ranges.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoPage size, 1-1000 (default 50).
offsetNoRows to skip; pass the previous response's `next_offset`.
targetNoNSX Manager target from config (default if omitted).

TDQS

A5/5.0
Behavior5/5

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

Beyond the readOnly/idempotent annotations, it discloses pagination semantics: checking truncated, passing next_offset back as offset, stopping when null, and why not to loop on truncated. It also notes the summary does not reveal individual address allocations, which is a material behavioral limitation.

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

Conciseness5/5

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

The description is front-loaded with the core purpose, then structured into pagination and workflow guidance. Each sentence carries operational value and there is no filler or repetition.

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?

With no output schema, the description still covers the essential return envelope fields (truncated, next_offset), pagination, and the relationship to sibling tools. An agent has everything needed to call it correctly and interpret the response.

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%, and the description adds operational meaning: limit is the page size with rejection of 0/negative values, offset is rows to skip, and next_offset should be passed back. This is more than the schema's field descriptions provide.

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?

The description opens with '[READ] List all IP address pools with subnets and usage summary,' giving a specific verb, resource, and scope. It later contrasts with get_ip_pool_usage and create_ip_pool, so an agent can distinguish it from the closest siblings.

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

Usage Guidelines5/5

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

It explicitly says to use this first to resolve a pool_id before get_ip_pool_usage, and to run it before create_ip_pool to avoid overlapping ranges. This provides clear when-to-use guidance and names alternatives.

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

list_nat_rulesA
Read-onlyIdempotent

[READ] List NAT rules on a Tier-1 gateway (USER section).

Returns the result envelope; check truncated before calling it complete. Page it: limit is the page size (1-1000, default 50; 0 or negative is rejected), offset is how many rows to skip, and the response carries next_offset — pass that back as offset and stop when it is null. Do not loop on truncated: that says this page is not the whole collection, so it stays true on the last page of a walk.

Get tier1_id from list_tier1_gateways first. Use this before create_nat_rule to avoid an id clash, and before delete_nat_rule to confirm what a rule does. Only the USER section is listed — NSX-internal NAT is not shown.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoPage size, 1-1000 (default 50).
offsetNoRows to skip; pass the previous response's `next_offset`.
targetNoNSX Manager target from config (default if omitted).
tier1_idYesGateway ID, as returned by list_tier1_gateways.

TDQS

A5/5.0
Behavior5/5

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

Annotations already mark this as read-only, idempotent, and non-destructive. The description goes further by disclosing the result envelope, the meaning of `truncated`, the pagination contract via `next_offset`, and the caution not to loop on `truncated`. This is exactly the kind of behavioral context that structured fields cannot convey.

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

Conciseness5/5

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

The description is dense but every sentence earns its place: purpose, envelope note, pagination instructions, and workflow guidance. The most critical usage information is front-loaded, and the formatting separates distinct concerns for easy parsing.

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?

Given there is no output schema, the description compensates by explaining the result envelope and pagination fields. It also provides the required prerequisite (`tier1_id` from list_tier1_gateways) and situates the tool among its siblings. Nothing an agent needs to call it correctly is missing.

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?

The schema already covers every parameter with descriptions (100% coverage), so the baseline is 3. The description adds substantial meaning beyond the schema by explaining the pagination loop: pass response `next_offset` back as `offset`, stop when it is null, and do not use `truncated` as a loop condition. It also documents edge cases like 0/negative limit rejection.

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?

The description states a specific verb and resource: list NAT rules on a Tier-1 gateway, and scopes it to the USER section. It also distinguishes itself from create_nat_rule and delete_nat_rule by referencing their placement in the workflow.

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

Usage Guidelines5/5

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

It explicitly tells the agent when to use the tool: after obtaining tier1_id from list_tier1_gateways, before create_nat_rule to avoid id clashes, and before delete_nat_rule to confirm rule behavior. It also states a clear exclusion: only the USER section is listed, not NSX-internal NAT.

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

list_nsx_alarmsA
Read-onlyIdempotent

[READ] Get active NSX alarms at one severity, with feature, description, and entity.

Returns the result envelope; check truncated before calling it complete. Note: the NSX severity filter is an EXACT match — "MEDIUM" returns only MEDIUM alarms, not MEDIUM-and-above, so call it once per severity to build a full picture.

Page it: limit is the page size (1-1000, 0 or negative is rejected), offset is how many rows to skip, and the response carries next_offset — pass that back as offset and stop when it is null. Do not loop on truncated: that says this page is not the whole set, so it stays true on the last page of a walk. Unlike the other list tools this one defaults to the full 1000, because a health sweep that silently showed the first fifty alarms would be worse than a long one.

Start a health check at get_nsx_manager_status, then come here, then drill into the entity the alarm names with get_transport_node_status or get_edge_cluster_status.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoPage size, 1-1000 (default 1000 — every alarm at the severity).
offsetNoAlarms to skip; pass the previous response's `next_offset`.
targetNoNSX Manager target from config (default if omitted).
severityNoExact severity: LOW, MEDIUM, HIGH or CRITICAL (default MEDIUM).MEDIUM

TDQS

A5/5.0
Behavior5/5

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

Annotations already mark this read-only, idempotent, and non-destructive; the description goes beyond them with the exact-match severity behavior, pagination semantics, the warning not to loop on `truncated`, and the default-of-1000 tradeoff. This gives an agent critical operational knowledge it could not infer from annotations or schema.

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

Conciseness5/5

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

The description is long but every sentence serves a purpose: purpose, envelope caveat, exact-match caveat, paging rules, default rationale, and the health-check workflow. It is front-loaded with the intent and then layered with operational warnings in logical order.

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?

There is no output schema, so the description compensates by disclosing the envelope, `truncated` field, `next_offset`, and the fields returned (feature, description, entity). It also ties the tool into the health-check workflow, making it complete enough for an agent to call and interpret it correctly.

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 100%, so the baseline would be 3, but the description adds meaning beyond the schema: 0/negative `limit` is rejected, `offset` receives the prior `next_offset`, stop when `next_offset` is null, and `severity` must be called per exact value. This directly impkeys correct invocation.

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?

The description states the exact verb, resource, and scope: 'Get active NSX alarms at one severity, with feature, description, and entity.' It also clarifies the severity filter is exact-match, which distinguishes the behavior from a typical 'severity or higher' list without needing to inspect the schema.

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

Usage Guidelines5/5

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

It gives explicit orchestration guidance: start at get_nsx_manager_status, then call this tool, then drill into the entity with get_transport_node_status or get_edge_cluster_status. It also tells the agent to call once per severity to build a full picture, and explains how to page with `next_offset`, so there is no ambiguity about when or how to use it.

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

list_segmentsA
Read-onlyIdempotent

[READ] List all NSX network segments with type, subnet, admin state, and port count.

Returns the result envelope: rows under items, plus returned, limit, total (the collection's result_count, null when the API omits it), truncated and hint. Check truncated before calling this the complete set — when true, more rows exist. Every list tool here returns that shape.

Page it: limit is the page size (1-1000, default 50; 0 or negative is rejected), offset is how many rows to skip, and the response carries next_offset — pass that back as offset and stop when it is null. Do not loop on truncated: that says this page is not the whole collection, so it stays true on the last page of a walk.

Use this first to resolve a segment_id, then get_segment for its ports and linked gateway, or get_logical_port_status for realized state. Distributed firewall rules are not here — use vmware-nsx-security.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoPage size, 1-1000 (default 50).
offsetNoRows to skip; pass the previous response's `next_offset`.
targetNoNSX Manager target from config (default if omitted).

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already cover read-only, open-world, idempotent, and non-destructive nature, so the bar is lower, but the description adds substantial behavioral context beyond annotations: the result envelope shape (items, returned, limit, total, truncated, hint), the meaning of `truncated`, and the `next_offset` pagination walk including the warning 'Do not loop on `truncated`'. This materially changes how an agent interprets results.

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

Conciseness5/5

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

Front-loaded with the READ marker and core purpose, then the envelope contract, then pagination details, then routing guidance. Every sentence earns its place; the pagination warnings prevent real misuse. Despite the length, it is tightly organized and readable.

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?

With no output schema, the description fully documents the return envelope and the critical `truncated` semantics. It covers pagination, stop conditions, parameter defaults, and relationships to sibling tools. For a list/pagination tool with this complexity, nothing an agent needs to call it correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds meaningful behavior beyond the schema: how `offset` should be fed from the previous response's `next_offset`, that `limit` is the page size with rejection of 0/negative values, and the termination condition for a paginated walk. It doesn't just repeat property names; it explains the lifecycle of these parameters.

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?

The description states a specific verb ('List') and resource ('all NSX network segments') with the exact fields returned: type, subnet, admin state, and port count. The [READ] prefix and naming of sibling tools like get_segment and get_logical_port_status distinguish it from alternatives. No ambiguity remains about what this tool does.

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

Usage Guidelines5/5

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

Explicitly says 'Use this first to resolve a segment_id, then get_segment...' and clarifies that distributed firewall rules belong in vmware-nsx-security. It also tells when not to use it and names the exact sibling alternatives. This is model guidance for tool selection.

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

list_static_routesA
Read-onlyIdempotent

[READ] List static routes on a Tier-0 or Tier-1 gateway.

Returns the result envelope; check truncated before calling it complete. Page it: limit is the page size (1-1000, default 50; 0 or negative is rejected), offset is how many rows to skip, and the response carries next_offset — pass that back as offset and stop when it is null. Do not loop on truncated: that says this page is not the whole collection, so it stays true on the last page of a walk.

Use this before create_static_route to avoid an id clash, and before delete_static_route to confirm the destination and next hops. gateway_type must match where the route actually lives — querying the wrong tier returns an empty list, not an error. BGP-learned routes are not here; use get_bgp_neighbors.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoPage size, 1-1000 (default 50).
offsetNoRows to skip; pass the previous response's `next_offset`.
targetNoNSX Manager target from config (default if omitted).
tier1_idYesGateway ID (Tier-0 or Tier-1, per gateway_type), as returned by list_tier0_gateways / list_tier1_gateways.
gateway_typeNoEither "tier0" or "tier1" (default "tier1").tier1

TDQS

A5/5.0
Behavior5/5

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

Annotations already mark readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false. The description adds substantial behavioral detail: pagination semantics, truncated's meaning, how to stop on null next_offset, the empty-list-not-error behavior for wrong tier, and the exclusion of BGP-learned routes. There is no contradiction with annotations.

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

Conciseness5/5

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

The description is front-loaded with the core purpose and then delivers dense, non-redundant guidance about pagination, usage context, tier matching, and BGP exclusion. Every sentence earns its place; there is no 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?

Despite having no output schema, the description explains the result envelope and key fields like truncated and next_offset. It also covers edge cases, provides usage context relative to sibling tools, and leaves no ambiguity an agent would need resolved before calling it.

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?

Even though schema coverage is 100%, the description adds meaning beyond the schema: it explains the pagination contract for limit/offset/next_offset, states that zero or negative limit is rejected, clarifies that tier1_id may be a Tier-0 or Tier-1 ID depending on gateway_type, and warns about wrong-tier behavior. This is genuinely useful parameter guidance.

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?

The description opens with '[READ] List static routes on a Tier-0 or Tier-1 gateway,' giving a specific verb, resource, and scope. It clearly distinguishes itself from sibling create/delete route tools and from get_bgp_neighbors by noting BGP-learned routes are not included.

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

Usage Guidelines5/5

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

The description explicitly says when to use this tool: before create_static_route to avoid ID clashes and before delete_static_route to confirm destination and next hops. It also warns that gateway_type must match where the route lives and directs users to get_bgp_neighbors for BGP routes.

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

list_tier0_gatewaysA
Read-onlyIdempotent

[READ] List all Tier-0 gateways with HA mode and transit subnets.

Returns the result envelope; check truncated before calling it complete. Page it: limit is the page size (1-1000, default 50; 0 or negative is rejected), offset is how many rows to skip, and the response carries next_offset — pass that back as offset and stop when it is null. Do not loop on truncated: that says this page is not the whole collection, so it stays true on the last page of a walk.

Use this first to resolve a tier0_id, then get_tier0_gateway for HA detail and the tier0_path that create_tier1_gateway needs, or get_bgp_neighbors for peering state. Tier-0s are not created by this skill — only Tier-1s are.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoPage size, 1-1000 (default 50).
offsetNoRows to skip; pass the previous response's `next_offset`.
targetNoNSX Manager target from config (default if omitted).

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint, openWorldHint, idempotentHint, destructiveHint), the description discloses important runtime behavior: the response is a result envelope, `truncated` must be checked, and `next_offset` drives pagination. It warns not to loop on `truncated`, which is a subtle and valuable behavioral detail not visible in the schema or annotations.

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

Conciseness5/5

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

The description is dense but every sentence earns its place: purpose is front-loaded, pagination rules are grouped, and sibling routing is in the final paragraph. No content is redundant with the schema or annotations, and the structure makes the operational contract easy to follow.

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?

With no output schema, this description fully compensates by explaining the result envelope, `truncated`, `next_offset`, and how to detect the end of a paginated walk. It also tells the agent what fields are available (HA mode, transit subnets) and how the result connects to downstream tool calls, making the tool callable correctly without external knowledge.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds value by explaining pagination semantics clearly: `limit` is page size, 0 or negative is rejected, `offset` is rows to skip, and `next_offset` should be passed back as the next `offset`. It also clarifies when to stop paging, which goes beyond the schema descriptions.

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?

The description opens with '[READ] List all Tier-0 gateways with HA mode and transit subnets', which names a specific verb, resource, and returned fields. It also clearly distinguishes itself from get_tier0_gateway by positioning list_tier0_gateways as the first step to resolve a tier0_id.

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

Usage Guidelines5/5

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

The description explicitly tells the agent when to use this tool: use it first to resolve a tier0_id, then use get_tier0_gateway for HA detail and the tier0_path needed by create_tier1_gateway, or get_bgp_neighbors for peering state. It also states a key constraint: Tier-0s are not created by this skill, only Tier-1s are.

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

list_tier1_gatewaysA
Read-onlyIdempotent

[READ] List all Tier-1 gateways with linked Tier-0 path and route advertisement.

Returns the result envelope; check truncated before calling it complete. Page it: limit is the page size (1-1000, default 50; 0 or negative is rejected), offset is how many rows to skip, and the response carries next_offset — pass that back as offset and stop when it is null. Do not loop on truncated: that says this page is not the whole collection, so it stays true on the last page of a walk.

Use this first to resolve a tier1_id — create_nat_rule, create_static_route, list_nat_rules and update_tier1_gateway all take one. A row with an empty tier0_path is standalone and cannot reach north-south. Then get_tier1_gateway for detail.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoPage size, 1-1000 (default 50).
offsetNoRows to skip; pass the previous response's `next_offset`.
targetNoNSX Manager target from config (default if omitted).

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, and the description adds substantial behavioral detail: pagination via next_offset, the meaning of truncated, the warning 'Do not loop on truncated,' and the semantic rule that an empty tier0_path means the gateway is standalone. This is beyond what annotations convey.

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

Conciseness5/5

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

The description is organized into three tight paragraphs: purpose, pagination contract, and usage context. Every sentence earns its place, especially the truncated/next_offset warning, which prevents a real pagination bug without adding bloat.

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?

There is no output schema, so the description appropriately explains the result envelope, truncated, next_offset, and stop condition—everything needed to consume the response correctly. It also covers prerequisite relationships with sibling tools and the standalone-gateway semantic, making the tool usable without external documentation.

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

Parameters4/5

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

Schema coverage is 100% and already documents limit, offset, and target with defaults and descriptions. The description adds operational semantics beyond the schema: '0 or negative is rejected,' the exact page-size range/default, and the pattern of passing next_offset back as offset until null. It doesn't mention target, but the schema fully covers that parameter.

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?

The description opens with '[READ] List all Tier-1 gateways with linked Tier-0 path and route advertisement,' naming the exact verb, resource, and scope. It also distinguishes itself from get_tier1_gateway by saying 'Then get_tier1_gateway for detail,' and from tier-0 listing tools by explicitly targeting Tier-1 gateways.

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

Usage Guidelines5/5

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

It explicitly says 'Use this first to resolve a tier1_id' and lists the sibling tools that require it: create_nat_rule, create_static_route, list_nat_rules, and update_tier1_gateway. It also explains when to move to get_tier1_gateway for detail and notes the standalone-tier0_path caveat, giving an agent clear decision criteria.

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

list_transport_nodesA
Read-onlyIdempotent

[READ] List all transport nodes (ESXi hosts and Edge nodes) with type and status.

Returns the result envelope; check truncated before calling it complete. Page it: limit is the page size (1-1000, default 50; 0 or negative is rejected), offset is how many rows to skip, and the response carries next_offset — pass that back as offset and stop when it is null. Do not loop on truncated: that says this page is not the whole collection, so it stays true on the last page of a walk.

Use this first to resolve a node_id, then get_transport_node_status for that node's tunnels, controller connectivity and pNICs — the summary status here does not explain why a node is degraded.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoPage size, 1-1000 (default 50).
offsetNoRows to skip; pass the previous response's `next_offset`.
targetNoNSX Manager target from config (default if omitted).

TDQS

A4.9/5.0
Behavior5/5

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

The description goes well beyond the readOnlyHint/idempotentHint annotations by disclosing pagination mechanics: limit validation, offset skipping, next_offset passing, and the subtle warning that truncated stays true on the last page of a walk. It also clarifies that the summary status does not explain why a node is degraded.

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

Conciseness5/5

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

The description is efficiently organized: a one-line READ summary, then pagination rules, then usage guidance. Each paragraph earns its place, and critical warnings like the truncated behavior are explicitly stated rather than implied.

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?

Given no output schema, the description adequately covers return envelope handling, pagination, and the distinction from get_transport_node_status. An agent can correctly invoke and walk the results without additional inference.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds meaningful semantics: limit values 1-1000 with rejection of 0/negative, offset meaning 'rows to skip', and the response carrying next_offset to feed back. Only the target parameter is left to the schema, which already documents it sufficiently.

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?

The description opens with a clear verb and resource: 'List all transport nodes (ESXi hosts and Edge nodes) with type and status.' It defines exactly what the tool returns and later distinguishes it from get_transport_node_status, which provides deeper per-node details.

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

Usage Guidelines5/5

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

It explicitly says 'Use this first to resolve a node_id, then get_transport_node_status for that node's tunnels, controller connectivity and pNICs.' This tells an agent when to choose this tool over the sibling status tool and what not to expect from it.

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

list_transport_zonesA
Read-onlyIdempotent

[READ] List all NSX transport zones — the overlay/VLAN boundaries segments attach to.

Page it: limit is the page size (1-1000, default 50; 0 or negative is rejected), offset is how many rows to skip, and the response carries next_offset — pass that back as offset and stop when it is null. Do not loop on truncated: that says this page is not the whole collection, so it stays true on the last page of a walk.

Use this first when building a segment: create_segment requires a transport_zone_path of "/infra/sites/default/enforcement-points/default/transport-zones/" built from the id returned here. Returns the result envelope; each row has id, display_name and transport_type (OVERLAY_STANDARD, VLAN_BACKED, …). A VLAN-backed zone needs create_segment's vlan_ids, an overlay zone needs its subnet — passing the wrong one is rejected.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoPage size, 1-1000 (default 50).
offsetNoRows to skip; pass the previous response's `next_offset`.
targetNoNSX Manager target from config (default if omitted).

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already mark this as read-only, idempotent, and non-destructive, so the description focuses on valuable behavioral details: pagination semantics, how to use next_offset, when to stop, and the warning not to loop on truncated. It also discloses response row fields and the VLAN-versus-overlay dependency, which goes well beyond annotation coverage.

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

Conciseness5/5

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

The description is front-loaded with the core purpose, then organized into pagination behavior, integration with create_segment, and expected result fields. Every sentence adds distinct value with no filler or repetition of schema defaults.

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?

With no output schema, the description compensates by explaining the result envelope and key row fields. It also covers pagination mechanics, required path construction, VLAN vs overlay parameter requirements, and error rejection behavior, making the tool self-sufficient for an agent to call correctly.

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?

Although the schema already documents all three parameters with good descriptions, the tool description adds meaningful operational semantics: 0 or negative limit is rejected, next_offset should be passed back as offset, stop when it is null, and truncated must not be used as a loop condition. This materially improves correct parameter usage beyond what the JSON schema alone provides.

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?

The description clearly states 'List all NSX transport zones' with a specific resource and scope, and immediately disambiguates what transport zones are in the NSX context. It is distinct from sibling tools like list_transport_nodes or list_segments because the resource and domain are explicit.

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?

The description gives concrete guidance: 'Use this first when building a segment' and explains how create_segment depends on the transport_zone_path returned here. It does not explicitly name alternatives to avoid, but it provides a clear usage context and practical downstream integration that an agent can act on.

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

update_segmentA

[WRITE] Update an existing network segment (partial update via PATCH).

Only the fields you pass change. Use get_segment first, and prefer this over create_segment for an existing segment: create is a PUT and overwrites everything. Changing subnet re-addresses the gateway and can drop traffic for attached VMs, so check port_count first. Returns the updated segment dict, else {"error", "hint"}.

ParametersJSON Schema
NameRequiredDescriptionDefault
subnetNoNew gateway CIDR, e.g. "192.168.1.1/24". Optional.
targetNoNSX Manager target from config (default if omitted).
segment_idYesSegment ID to update, as returned by list_segments.
display_nameNoNew display name. Optional.

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the annotations, the description discloses partial-update semantics ('Only the fields you pass change'), the significant side effect of subnet changes (gateway re-address and potential traffic drop), and the return/error contract. This gives the agent the behavioral awareness needed to use the tool safely. The traffic-drop warning is a side-effect disclosure, not a contradiction of destructiveHint=false.

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

Conciseness5/5

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

The description is compact and front-loaded: action and method first, then usage guidance, then risk warning, then return format. Every sentence carries essential information with no filler or repetition of schema contents.

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 4-parameter mutation tool with no output schema, the description is complete enough for an agent to select and invoke it correctly. It covers preconditions, alternative behavior, side effects, and the return/error shape, leaving no critical operational gap.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds meaningful parameter-level context by explaining partial-update behavior and warning specifically about the subnet parameter's network impact. It doesn't add detail for target or display_name, but those are already well described in 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?

The description clearly states the action ('Update an existing network segment'), the resource, and the method ('partial update via PATCH'). It explicitly distinguishes itself from create_segment and delete_segment, so an agent can tell exactly what this tool does relative to its siblings.

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

Usage Guidelines5/5

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

The description gives concrete guidance: call get_segment first, prefer this over create_segment for existing segments, and check port_count before changing the subnet. It also explains why create_segment is the wrong choice (PUT overwrites everything). This is explicit when-to-use and when-not-to-use context.

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

update_tier1_gatewayA

[WRITE] Partially update an existing Tier-1 gateway via PATCH.

Only the fields you pass change. Use get_tier1_gateway first — route_advertisement is sent as a whole list, so include every type you want kept. Prefer this over create_tier1_gateway for an existing gateway: create is a PUT and overwrites everything. Re-applying identical values is harmless. Returns the updated gateway dict, else {"error", "hint"}.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNoNSX Manager target from config (default if omitted).
tier1_idYesGateway ID to update, as returned by list_tier1_gateways.
tier0_pathNoNew parent Tier-0 path, e.g. "/infra/tier-0s/<t0-id>".
display_nameNoNew display name. Optional.
route_advertisementNoComma-separated types: TIER1_CONNECTED, TIER1_STATIC_ROUTES, TIER1_NAT, TIER1_LB_VIP, TIER1_LB_SNAT, TIER1_DNS_FORWARDER_IP, TIER1_IPSEC_LOCAL_ENDPOINT.

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the annotations, the description reveals important behavior: only passed fields change, route_advertisement is replaced as a whole list, re-applying identical values is harmless, and the return value is the updated gateway dict or an error dict. This adds meaningful context about partial-update semantics and edge-case behavior.

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

Conciseness5/5

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

The description is well-structured with the operation tag front-loaded, followed by key behavioral rules, a comparison with create, and return behavior. Every sentence carries useful information without redundancy.

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 tool with no output schema, the description covers partial-update semantics, the tricky route_advertisement parameter, sibling differentiation, idempotency nuance, and return format. No critical gaps remain for an agent to call the tool correctly.

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

Parameters4/5

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

Schema coverage is 100% and each parameter already has a helpful description. The tool description adds critical semantic value beyond the schema by explaining that route_advertisement is sent as a whole list and that include every type you want kept, which is essential for correct invocation.

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?

The description states a specific verb ('partially update'), a clear resource ('existing Tier-1 gateway'), and the HTTP method (PATCH). It clearly distinguishes itself from create_tier1_gateway by noting that create is a PUT that overwrites everything.

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

Usage Guidelines5/5

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

The description gives explicit guidance: use get_tier1_gateway first, prefer this over create_tier1_gateway for existing gateways, and handle route_advertisement as a whole list. This clearly tells an agent when to use this tool and when not to.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 33 tool updatesv1.8.16
    • Changedconfigure_tier0_bgp8 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / ecmp / description
        Added value: +"Enable ECMP for BGP routes (default True)."
      • addedInput schema / properties / enabled / description
        Added value: +"Enable or disable BGP on the locale-service (default True)."
      • addedInput schema / properties / inter_sr_ibgp / description
        Added value: +"Enable inter-SR iBGP (default True)."
      • addedInput schema / properties / local_as_num / description
        Added value: +"Local AS number as a string, e.g. \"65001\"."
      • addedInput schema / properties / locale_service_id / description
        Added value: +"Locale-service identifier (default \"default\")."
      • addedInput schema / properties / target / description
        Added value: +"NSX Manager target from config (default if omitted)."
      • addedInput schema / properties / tier0_id / description
        Added value: +"Tier-0 gateway ID, as returned by list_tier0_gateways."
    • Changedcreate_ip_pool8 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / cidr / description
        Added value: +"Subnet containing the range, e.g. \"192.168.1.0/24\"."
      • addedInput schema / properties / display_name / description
        Added value: +"UI display name."
      • addedInput schema / properties / end_ip / description
        Added value: +"Last allocatable IPv4 address, e.g. \"192.168.1.100\"."
      • addedInput schema / properties / gateway_ip / description
        Added value: +"Subnet default gateway, e.g. \"192.168.1.1\"."
      • addedInput schema / properties / pool_id / description
        Added value: +"Unique id (alphanumerics, hyphens, underscores only); becomes /infra/ip-pools/<pool_id>."
      • addedInput schema / properties / start_ip / description
        Added value: +"First allocatable IPv4 address, e.g. \"192.168.1.10\"."
      • addedInput schema / properties / target / description
        Added value: +"NSX Manager target from config (default if omitted)."
    • Changedcreate_nat_rule9 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / action / description
        Added value: +"\"DNAT\" (default), \"SNAT\", \"REFLEXIVE\", \"NO_SNAT\", \"NO_DNAT\", or \"NAT64\"."
      • addedInput schema / properties / action / enum
        Added value: +[
        +  "SNAT",
        +  "DNAT",
        +  "REFLEXIVE",
        +  "NO_SNAT",
        +  "NO_DNAT",
        +  "NAT64"
        +]
      • addedInput schema / properties / destination_network / description
        Added value: +"Destination CIDR (required for DNAT)."
      • addedInput schema / properties / rule_id / description
        Added value: +"Unique ID for the NAT rule."
      • addedInput schema / properties / source_network / description
        Added value: +"Source CIDR (required for SNAT)."
      • addedInput schema / properties / target / description
        Added value: +"NSX Manager target from config (default if omitted)."
      • addedInput schema / properties / tier1_id / description
        Added value: +"Gateway ID, as returned by list_tier1_gateways."
      • addedInput schema / properties / translated_network / description
        Added value: +"Translated network/IP (required for all three)."
    • Changedcreate_segment7 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / display_name / description
        Added value: +"UI display name."
      • addedInput schema / properties / segment_id / description
        Added value: +"Unique id (alphanumerics, hyphens, underscores only); becomes /infra/segments/<segment_id>."
      • addedInput schema / properties / subnet / description
        Added value: +"Gateway IP in CIDR for an overlay zone, e.g. \"192.168.1.1/24\" — the gateway address, not the network address."
      • addedInput schema / properties / target / description
        Added value: +"NSX Manager target from config (default if omitted)."
      • addedInput schema / properties / transport_zone_path / description
        Added value: +"Full path, e.g. \"/infra/sites/default/enforcement-points/default/transport-zones/<tz-id>\"."
      • addedInput schema / properties / vlan_ids / description
        Added value: +"VLAN ID(s) for a VLAN-backed zone, e.g. \"100,200\"."
    • Changedcreate_static_route8 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / gateway_type / description
        Added value: +"Either \"tier0\" or \"tier1\" (default \"tier1\")."
      • addedInput schema / properties / gateway_type / enum
        Added value: +[
        +  "tier0",
        +  "tier1"
        +]
      • addedInput schema / properties / network / description
        Added value: +"Destination network in CIDR notation, e.g. \"10.0.0.0/8\"."
      • addedInput schema / properties / next_hop / description
        Added value: +"Next-hop IPv4 address, e.g. \"192.168.1.254\"."
      • addedInput schema / properties / route_id / description
        Added value: +"Unique id (alphanumerics, hyphens, underscores only)."
      • addedInput schema / properties / target / description
        Added value: +"NSX Manager target from config (default if omitted)."
      • addedInput schema / properties / tier1_id / description
        Added value: +"Gateway ID (Tier-0 or Tier-1, per gateway_type), from list_tier0_gateways / list_tier1_gateways."
    • Changedcreate_tier1_gateway7 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / display_name / description
        Added value: +"UI display name."
      • addedInput schema / properties / edge_cluster_path / description
        Added value: +"Required for NAT and other stateful services."
      • addedInput schema / properties / route_advertisement / description
        Added value: +"Comma-separated: TIER1_CONNECTED, TIER1_STATIC_ROUTES, TIER1_NAT, TIER1_LB_VIP, TIER1_LB_SNAT, TIER1_DNS_FORWARDER_IP, TIER1_IPSEC_LOCAL_ENDPOINT."
      • addedInput schema / properties / target / description
        Added value: +"NSX Manager target from config (default if omitted)."
      • addedInput schema / properties / tier0_path / description
        Added value: +"Parent Tier-0 path, e.g. \"/infra/tier-0s/<t0-id>\"; omit for a standalone gateway."
      • addedInput schema / properties / tier1_id / description
        Added value: +"Unique id (alphanumerics, hyphens, underscores); becomes /infra/tier-1s/<tier1_id>."
    • Changeddelete_ip_pool3 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / pool_id / description
        Added value: +"IP pool ID to delete, as returned by list_ip_pools."
      • addedInput schema / properties / target / description
        Added value: +"NSX Manager target from config (default if omitted)."
    • Changeddelete_nat_rule4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / rule_id / description
        Added value: +"NAT rule ID to delete, as returned by list_nat_rules."
      • addedInput schema / properties / target / description
        Added value: +"NSX Manager target from config (default if omitted)."
      • addedInput schema / properties / tier1_id / description
        Added value: +"Gateway that owns the rule, as returned by list_tier1_gateways."
    • Changeddelete_segment3 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / segment_id / description
        Added value: +"Segment ID to delete, as returned by list_segments."
      • addedInput schema / properties / target / description
        Added value: +"NSX Manager target from config (default if omitted)."
    • Changeddelete_static_route6 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / gateway_type / description
        Added value: +"Either \"tier0\" or \"tier1\" (default \"tier1\")."
      • addedInput schema / properties / gateway_type / enum
        Added value: +[
        +  "tier0",
        +  "tier1"
        +]
      • addedInput schema / properties / route_id / description
        Added value: +"Static route ID to delete, as returned by list_static_routes."
      • addedInput schema / properties / target / description
        Added value: +"NSX Manager target from config (default if omitted)."
      • addedInput schema / properties / tier1_id / description
        Added value: +"Gateway that owns the route (Tier-0 or Tier-1, per gateway_type), from list_tier0_gateways / list_tier1_gateways."
    • Changeddelete_tier1_gateway3 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / target / description
        Added value: +"NSX Manager target from config (default if omitted)."
      • addedInput schema / properties / tier1_id / description
        Added value: +"Gateway ID to delete, as returned by list_tier1_gateways."
    • Changedget_bgp_neighbors3 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / target / description
        Added value: +"NSX Manager target from config (default if omitted)."
      • addedInput schema / properties / tier0_id / description
        Added value: +"Tier-0 gateway ID, as returned by list_tier0_gateways."
    • Changedget_edge_cluster_status3 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / cluster_id / description
        Added value: +"Edge cluster UUID, as returned by list_edge_clusters."
      • addedInput schema / properties / target / description
        Added value: +"NSX Manager target from config (default if omitted)."
    • Changedget_ip_pool_usage3 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / pool_id / description
        Added value: +"IP pool ID, as returned by list_ip_pools."
      • addedInput schema / properties / target / description
        Added value: +"NSX Manager target from config (default if omitted)."
    • Changedget_logical_port_status3 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / segment_id / description
        Added value: +"Segment ID whose ports to inspect, as returned by list_segments."
      • addedInput schema / properties / target / description
        Added value: +"NSX Manager target from config (default if omitted)."
    • Changedget_nsx_manager_status2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / target / description
        Added value: +"NSX Manager target from config (default if omitted)."
    • Changedget_segment3 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / segment_id / description
        Added value: +"Segment ID — final component of /infra/segments/<id>, as returned by list_segments."
      • addedInput schema / properties / target / description
        Added value: +"NSX Manager target from config (default if omitted)."
    • Changedget_segment_port_for_vm3 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / target / description
        Added value: +"NSX Manager target from config (default if omitted)."
      • addedInput schema / properties / vm_display_name / description
        Added value: +"VM display name as shown in vCenter/NSX inventory."
    • Changedget_tier0_gateway3 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / target / description
        Added value: +"NSX Manager target from config (default if omitted)."
      • addedInput schema / properties / tier0_id / description
        Added value: +"Tier-0 gateway ID, as returned by list_tier0_gateways."
    • Changedget_tier1_gateway3 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / target / description
        Added value: +"NSX Manager target from config (default if omitted)."
      • addedInput schema / properties / tier1_id / description
        Added value: +"Tier-1 gateway ID, as returned by list_tier1_gateways."
    • Changedget_transport_node_status3 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / node_id / description
        Added value: +"Transport node UUID, as returned by list_transport_nodes."
      • addedInput schema / properties / target / description
        Added value: +"NSX Manager target from config (default if omitted)."
    • Changedlist_edge_clusters4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 50,
        +  "description": "Page size, 1-1000 (default 50).",
        +  "title": "Limit",
        +  "type": "integer"
        +}
      • addedInput schema / properties / offset
        Added value: +{
        +  "default": 0,
        +  "description": "Rows to skip; pass the previous response's `next_offset`.",
        +  "title": "Offset",
        +  "type": "integer"
        +}
      • addedInput schema / properties / target / description
        Added value: +"NSX Manager target from config (default if omitted)."
    • Changedlist_ip_pools4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 50,
        +  "description": "Page size, 1-1000 (default 50).",
        +  "title": "Limit",
        +  "type": "integer"
        +}
      • addedInput schema / properties / offset
        Added value: +{
        +  "default": 0,
        +  "description": "Rows to skip; pass the previous response's `next_offset`.",
        +  "title": "Offset",
        +  "type": "integer"
        +}
      • addedInput schema / properties / target / description
        Added value: +"NSX Manager target from config (default if omitted)."
    • Changedlist_nat_rules5 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 50,
        +  "description": "Page size, 1-1000 (default 50).",
        +  "title": "Limit",
        +  "type": "integer"
        +}
      • addedInput schema / properties / offset
        Added value: +{
        +  "default": 0,
        +  "description": "Rows to skip; pass the previous response's `next_offset`.",
        +  "title": "Offset",
        +  "type": "integer"
        +}
      • addedInput schema / properties / target / description
        Added value: +"NSX Manager target from config (default if omitted)."
      • addedInput schema / properties / tier1_id / description
        Added value: +"Gateway ID, as returned by list_tier1_gateways."
    • Changedlist_nsx_alarms5 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 1000,
        +  "description": "Page size, 1-1000 (default 1000 — every alarm at the severity).",
        +  "title": "Limit",
        +  "type": "integer"
        +}
      • addedInput schema / properties / offset
        Added value: +{
        +  "default": 0,
        +  "description": "Alarms to skip; pass the previous response's `next_offset`.",
        +  "title": "Offset",
        +  "type": "integer"
        +}
      • addedInput schema / properties / severity / description
        Added value: +"Exact severity: LOW, MEDIUM, HIGH or CRITICAL (default MEDIUM)."
      • addedInput schema / properties / target / description
        Added value: +"NSX Manager target from config (default if omitted)."
    • Changedlist_segments4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 50,
        +  "description": "Page size, 1-1000 (default 50).",
        +  "title": "Limit",
        +  "type": "integer"
        +}
      • addedInput schema / properties / offset
        Added value: +{
        +  "default": 0,
        +  "description": "Rows to skip; pass the previous response's `next_offset`.",
        +  "title": "Offset",
        +  "type": "integer"
        +}
      • addedInput schema / properties / target / description
        Added value: +"NSX Manager target from config (default if omitted)."
    • Changedlist_static_routes7 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / gateway_type / description
        Added value: +"Either \"tier0\" or \"tier1\" (default \"tier1\")."
      • addedInput schema / properties / gateway_type / enum
        Added value: +[
        +  "tier0",
        +  "tier1"
        +]
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 50,
        +  "description": "Page size, 1-1000 (default 50).",
        +  "title": "Limit",
        +  "type": "integer"
        +}
      • addedInput schema / properties / offset
        Added value: +{
        +  "default": 0,
        +  "description": "Rows to skip; pass the previous response's `next_offset`.",
        +  "title": "Offset",
        +  "type": "integer"
        +}
      • addedInput schema / properties / target / description
        Added value: +"NSX Manager target from config (default if omitted)."
      • addedInput schema / properties / tier1_id / description
        Added value: +"Gateway ID (Tier-0 or Tier-1, per gateway_type), as returned by list_tier0_gateways / list_tier1_gateways."
    • Changedlist_tier0_gateways4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 50,
        +  "description": "Page size, 1-1000 (default 50).",
        +  "title": "Limit",
        +  "type": "integer"
        +}
      • addedInput schema / properties / offset
        Added value: +{
        +  "default": 0,
        +  "description": "Rows to skip; pass the previous response's `next_offset`.",
        +  "title": "Offset",
        +  "type": "integer"
        +}
      • addedInput schema / properties / target / description
        Added value: +"NSX Manager target from config (default if omitted)."
    • Changedlist_tier1_gateways4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 50,
        +  "description": "Page size, 1-1000 (default 50).",
        +  "title": "Limit",
        +  "type": "integer"
        +}
      • addedInput schema / properties / offset
        Added value: +{
        +  "default": 0,
        +  "description": "Rows to skip; pass the previous response's `next_offset`.",
        +  "title": "Offset",
        +  "type": "integer"
        +}
      • addedInput schema / properties / target / description
        Added value: +"NSX Manager target from config (default if omitted)."
    • Changedlist_transport_nodes4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 50,
        +  "description": "Page size, 1-1000 (default 50).",
        +  "title": "Limit",
        +  "type": "integer"
        +}
      • addedInput schema / properties / offset
        Added value: +{
        +  "default": 0,
        +  "description": "Rows to skip; pass the previous response's `next_offset`.",
        +  "title": "Offset",
        +  "type": "integer"
        +}
      • addedInput schema / properties / target / description
        Added value: +"NSX Manager target from config (default if omitted)."
    • Changedlist_transport_zones4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 50,
        +  "description": "Page size, 1-1000 (default 50).",
        +  "title": "Limit",
        +  "type": "integer"
        +}
      • addedInput schema / properties / offset
        Added value: +{
        +  "default": 0,
        +  "description": "Rows to skip; pass the previous response's `next_offset`.",
        +  "title": "Offset",
        +  "type": "integer"
        +}
      • addedInput schema / properties / target / description
        Added value: +"NSX Manager target from config (default if omitted)."
    • Changedupdate_segment5 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / display_name / description
        Added value: +"New display name. Optional."
      • addedInput schema / properties / segment_id / description
        Added value: +"Segment ID to update, as returned by list_segments."
      • addedInput schema / properties / subnet / description
        Added value: +"New gateway CIDR, e.g. \"192.168.1.1/24\". Optional."
      • addedInput schema / properties / target / description
        Added value: +"NSX Manager target from config (default if omitted)."
    • Changedupdate_tier1_gateway6 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / display_name / description
        Added value: +"New display name. Optional."
      • addedInput schema / properties / route_advertisement / description
        Added value: +"Comma-separated types: TIER1_CONNECTED, TIER1_STATIC_ROUTES, TIER1_NAT, TIER1_LB_VIP, TIER1_LB_SNAT, TIER1_DNS_FORWARDER_IP, TIER1_IPSEC_LOCAL_ENDPOINT."
      • addedInput schema / properties / target / description
        Added value: +"NSX Manager target from config (default if omitted)."
      • addedInput schema / properties / tier0_path / description
        Added value: +"New parent Tier-0 path, e.g. \"/infra/tier-0s/<t0-id>\"."
      • addedInput schema / properties / tier1_id / description
        Added value: +"Gateway ID to update, as returned by list_tier1_gateways."
  2. 16 tool updatesv1.8.9
    • Addedconfigure_tier0_bgp
    • Addedcreate_nat_rule
    • Addedcreate_tier1_gateway
    • Addeddelete_nat_rule
    • Addeddelete_static_route
    • Addedget_bgp_neighbors
    • Addedget_edge_cluster_status
    • Addedget_logical_port_status
    • Addedget_segment
    • Addedget_tier0_gateway
    • Addedget_tier1_gateway
    • Addedlist_segments
    • Addedlist_static_routes
    • Addedlist_tier0_gateways
    • Addedupdate_segment
    • Addedupdate_tier1_gateway
  3. 23 tool updatesv1.7.6
    • Removedconfigure_tier0_bgp
    • Removedcreate_nat_rule
    • Removedcreate_tier1_gateway
    • Removeddelete_nat_rule
    • Removeddelete_static_route
    • Removedget_bgp_neighbors
    • Removedget_edge_cluster_status
    • Removedget_logical_port_status
    • Removedget_segment
    • Removedget_tier0_gateway
    • Removedget_tier1_gateway
    • Changedlist_edge_clusters1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "items": {
        -        "additionalProperties": true,
        -        "type": "object"
        -      },
        -      "title": "Result",
        -      "type": "array"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "list_edge_clustersOutput",
        -  "type": "object"
        -}New value: +null
    • Changedlist_ip_pools1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "items": {
        -        "additionalProperties": true,
        -        "type": "object"
        -      },
        -      "title": "Result",
        -      "type": "array"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "list_ip_poolsOutput",
        -  "type": "object"
        -}New value: +null
    • Changedlist_nat_rules1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "items": {
        -        "additionalProperties": true,
        -        "type": "object"
        -      },
        -      "title": "Result",
        -      "type": "array"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "list_nat_rulesOutput",
        -  "type": "object"
        -}New value: +null
    • Changedlist_nsx_alarms1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "items": {
        -        "additionalProperties": true,
        -        "type": "object"
        -      },
        -      "title": "Result",
        -      "type": "array"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "list_nsx_alarmsOutput",
        -  "type": "object"
        -}New value: +null
    • Removedlist_segments
    • Removedlist_static_routes
    • Removedlist_tier0_gateways
    • Changedlist_tier1_gateways1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "items": {
        -        "additionalProperties": true,
        -        "type": "object"
        -      },
        -      "title": "Result",
        -      "type": "array"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "list_tier1_gatewaysOutput",
        -  "type": "object"
        -}New value: +null
    • Changedlist_transport_nodes1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "items": {
        -        "additionalProperties": true,
        -        "type": "object"
        -      },
        -      "title": "Result",
        -      "type": "array"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "list_transport_nodesOutput",
        -  "type": "object"
        -}New value: +null
    • Changedlist_transport_zones1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "items": {
        -        "additionalProperties": true,
        -        "type": "object"
        -      },
        -      "title": "Result",
        -      "type": "array"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "list_transport_zonesOutput",
        -  "type": "object"
        -}New value: +null
    • Removedupdate_segment
    • Removedupdate_tier1_gateway
  4. 8 tool updatesv1.6.0
    • Changedcreate_static_route1 field changed
      • addedInput schema / properties / gateway_type
        Added value: +{
        +  "default": "tier1",
        +  "title": "Gateway Type",
        +  "type": "string"
        +}
    • Addeddelete_ip_pool
    • Changeddelete_static_route1 field changed
      • addedInput schema / properties / gateway_type
        Added value: +{
        +  "default": "tier1",
        +  "title": "Gateway Type",
        +  "type": "string"
        +}
    • Changedget_bgp_neighbors1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "items": {
        -        "additionalProperties": true,
        -        "type": "object"
        -      },
        -      "title": "Result",
        -      "type": "array"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_bgp_neighborsOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_logical_port_status3 fields changed
      • removedInput schema / properties / port_id
        Removed value: -{
        -  "title": "Port Id",
        -  "type": "string"
        -}
      • addedInput schema / properties / segment_id
        Added value: +{
        +  "title": "Segment Id",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "port_id"
        -]New value: +[
        +  "segment_id"
        +]
    • Changedget_segment_port_for_vm3 fields changed
      • addedInput schema / properties / vm_display_name
        Added value: +{
        +  "title": "Vm Display Name",
        +  "type": "string"
        +}
      • removedInput schema / properties / vm_id
        Removed value: -{
        -  "title": "Vm Id",
        -  "type": "string"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "vm_id"
        -]New value: +[
        +  "vm_display_name"
        +]
    • Changedlist_nsx_alarms1 field changed
      • addedInput schema / properties / severity
        Added value: +{
        +  "default": "MEDIUM",
        +  "title": "Severity",
        +  "type": "string"
        +}
    • Changedlist_static_routes1 field changed
      • addedInput schema / properties / gateway_type
        Added value: +{
        +  "default": "tier1",
        +  "title": "Gateway Type",
        +  "type": "string"
        +}
  5. 1 tool updatev1.5.18
    • Changedconfigure_tier0_bgp11 fields changed
      • addedInput schema / properties / ecmp
        Added value: +{
        +  "default": true,
        +  "title": "Ecmp",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / enabled
        Added value: +{
        +  "default": true,
        +  "title": "Enabled",
        +  "type": "boolean"
        +}
      • removedInput schema / properties / hold_time
        Removed value: -{
        -  "default": 180,
        -  "title": "Hold Time",
        -  "type": "integer"
        -}
      • addedInput schema / properties / inter_sr_ibgp
        Added value: +{
        +  "default": true,
        +  "title": "Inter Sr Ibgp",
        +  "type": "boolean"
        +}
      • removedInput schema / properties / keep_alive
        Removed value: -{
        -  "default": 60,
        -  "title": "Keep Alive",
        -  "type": "integer"
        -}
      • removedInput schema / properties / local_as
        Removed value: -{
        -  "title": "Local As",
        -  "type": "integer"
        -}
      • addedInput schema / properties / local_as_num
        Added value: +{
        +  "title": "Local As Num",
        +  "type": "string"
        +}
      • addedInput schema / properties / locale_service_id
        Added value: +{
        +  "default": "default",
        +  "title": "Locale Service Id",
        +  "type": "string"
        +}
      • removedInput schema / properties / neighbor_address
        Removed value: -{
        -  "title": "Neighbor Address",
        -  "type": "string"
        -}
      • removedInput schema / properties / remote_as
        Removed value: -{
        -  "title": "Remote As",
        -  "type": "integer"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "tier0_id",
        -  "local_as",
        -  "neighbor_address",
        -  "remote_as"
        -]New value: +[
        +  "tier0_id",
        +  "local_as_num"
        +]
  6. 32 tool updatesv1.3.2
    • First observedconfigure_tier0_bgp
    • First observedcreate_ip_pool
    • First observedcreate_nat_rule
    • First observedcreate_segment
    • First observedcreate_static_route
    • First observedcreate_tier1_gateway
    • First observeddelete_nat_rule
    • First observeddelete_segment
    • First observeddelete_static_route
    • First observeddelete_tier1_gateway
    • First observedget_bgp_neighbors
    • First observedget_edge_cluster_status
    • First observedget_ip_pool_usage
    • First observedget_logical_port_status
    • First observedget_nsx_manager_status
    • First observedget_segment
    • First observedget_segment_port_for_vm
    • First observedget_tier0_gateway
    • First observedget_tier1_gateway
    • First observedget_transport_node_status
    • First observedlist_edge_clusters
    • First observedlist_ip_pools
    • First observedlist_nat_rules
    • First observedlist_nsx_alarms
    • First observedlist_segments
    • First observedlist_static_routes
    • First observedlist_tier0_gateways
    • First observedlist_tier1_gateways
    • First observedlist_transport_nodes
    • First observedlist_transport_zones
    • First observedupdate_segment
    • First observedupdate_tier1_gateway

TDQS

A4.4/5.0
Disambiguation5/5

Each tool targets a distinct NSX resource and action (list/get/create/update/delete/configure), with clear boundaries between similar tools (e.g., list_segments vs get_segment vs get_logical_port_status). No two tools appear to perform the same operation.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern (list_*, get_*, create_*, update_*, delete_*, configure_*) with lowercase and underscores throughout. The verbs clearly indicate read vs write operations.

Tool Count2/5

At 33 tools, the set exceeds the 25+ threshold for 'too many', making it heavy for an agent to manage. While each tool has a distinct purpose, the high count is at the upper edge and could be overwhelming, though not extreme (50+).

Completeness3/5

The tool surface covers core NSX workflows (segment/Tier-1/NAT/static route/IP pool lifecycle plus health monitoring), but notable gaps exist such as Tier-0 gateway CRUD, DHCP/DNS/LB/VPN services, and port attachment management. The explicit reference to a separate security server narrows the domain further.

Maintenance

ActivityActive
ResponsivenessResponsive

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

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/vmware-skills/VMware-NSX'

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