Skip to main content
Glama

VMware NSX Security

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.

VMware NSX DFW microsegmentation and security MCP skill — 22 tools for distributed firewall policies/rules, security groups, VM tags, the DFW exclusion list, Traceflow packet tracing, and IDPS.

Companion skills: vmware-nsx (networking), vmware-aiops (VM lifecycle), vmware-monitor (monitoring)

Quick Start

uv tool install vmware-nsx-security

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

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

vmware-nsx-security doctor

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-security

Related MCP server: vmware-vks

What It Does

Category

Tools

DFW Policy

list, get, create, update, delete, list rules

DFW Rules

create, update, delete, stats

Security Groups

list, get, create, delete

VM Tags

list tags, apply tag, remove tag

Traceflow

run trace, get result

IDPS

list profiles, signature status + settings

DFW Exclusions

list excluded members

Total: 22 MCP tools (11 read-only + 11 write)

DFW exclusion list

A VM on the NSX distributed-firewall exclusion list has no DFW in its datapath: the rules that name it exist and none of them applies. On a VCF estate the management VMs (vCenter, VCF Operations, NSX managers) are commonly on it — one real NSX 9.1 fabric had 10 of 12 VMs excluded. list_dfw_exclusions shows the list, and list_vm_tags / get_group / list_dfw_policies say when a member is excluded, so "protected by DFW policy" is never reported for a VM the DFW does not see. dfw_excluded: null means the list could not be read — which is not false.

MCP Server Setup

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

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

# With a custom config path
VMWARE_NSX_SECURITY_CONFIG=/path/to/config.yaml vmware-nsx-security mcp

Add to ~/.claude.json:

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

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

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

Common Workflows

Microsegment an Application

# 1. Create groups by tag — via the create_group MCP tool
#    (tag_scope=tier, tag_value=web → matched as Condition value "tier|web";
#     multiple criteria types — tag/IP/segment — are ORed)

# 2. Create DFW policy
vmware-nsx-security policy create web-app-policy --name "Web to App" --category Application

Tag a VM

# Find VM and its external ID
vmware-nsx-security tag list my-vm-01

# Apply tag using the external ID
vmware-nsx-security tag apply <external-id> --scope tier --value web

Trace a Packet

vmware-nsx-security traceflow run <src-lport-id> \
  --src-ip 10.0.1.5 --dst-ip 10.0.2.10 --proto TCP --dst-port 443

Output reports operation_state (IN_PROGRESS/FINISHED/FAILED), hop-by-hop observations discriminated by resource_type (Dropped* entries carry reason + acl_rule_id), and a dfw_hits summary.

Safety

  • Dependency checks: Cannot delete a policy with active rules, or a group referenced by DFW rules/scopes; group deletion aborts if the reference scan fails

  • Audit logging: All write ops logged to ~/.vmware-nsx-security/audit.log

  • Input validation: IDs validated; all API text sanitized against prompt injection

  • Dry-run mode: All CLI write commands support --dry-run

  • Credential safety: Passwords only from env vars, never in config files

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-nsx

NSX networking: segments, gateways, NAT, IPAM

33

uv tool install vmware-nsx-mgmt

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-aria

Aria Ops metrics, alerts, capacity planning

28

uv tool install vmware-aria

Version Compatibility

NSX Version

Support

Notes

NSX 9.1 / VCF 9.1

✅ Full

DFW + Security Group + Traceflow + IDS/IPS via Policy API. VDS 7.0+ required (N-VDS removed in NSX 9).

NSX 9.0 / VCF 9.0

✅ Full

Same as 9.1. Bare-metal NSX agent removed.

NSX 4.x / VCF 5.x

✅ Full

All features supported.

NSX-T 3.2 / VCF 4.5

✅ Full

Policy API stable.

Official Broadcom References

License

MIT

Available Tools

22 tools
apply_vm_tagA

[WRITE] Apply an NSX tag to a virtual machine.

Returns {"status": "applied", "vm_id", "scope", "tag"} — not the VM's tag list. Use list_vm_tags first for the vm_id, and again after to see the result. Additive, so existing tags survive, but note that tag-based group membership shifts as NSX re-evaluates: check with get_group.

ParametersJSON Schema
NameRequiredDescriptionDefault
vm_idYesVM external ID (fabric UUID, from list_vm_tags).
targetNoOptional NSX Manager target from config.
tag_scopeYesTag scope (e.g. 'env', 'tier', 'owner').
tag_valueYesTag value (e.g. 'production', 'web').

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the annotations, the description discloses that the tool is additive, that it returns only a status object rather than the VM's tag list, and that tag-based group membership may shift after NSX re-evaluation. These are meaningful behavioral details not visible in readOnlyHint, destructiveHint, or idempotentHint.

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 three sentences with no filler: the action comes first, followed by the exact return shape and workflow, then the side-effect warning. Every sentence contributes information that is not already present in 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?

With no output schema, the description compensates by specifying the return shape. It also covers the necessary ordering, verification steps, and a non-obvious side effect. For a write operation with well-documented parameters, this is sufficient 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.

Parameters3/5

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

The input schema already documents all four parameters with 100% coverage, including the source of vm_id, the optional target, and the meanings of tag_scope and tag_value. The description adds little parameter-specific meaning beyond noting the vm_id source, which the schema already states, so the baseline value 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 states a specific action ('Apply an NSX tag') on a specific resource ('a virtual machine'), which clearly distinguishes it from siblings like list_vm_tags and remove_vm_tag. The return-value note also reinforces that this is not a retrieval operation.

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 explicit workflow guidance: use list_vm_tags first to obtain the vm_id and again afterward to observe the result, and check get_group for group-membership effects. It does not explicitly contrast with remove_vm_tag, but the usage context and sequencing are clear enough for an agent to proceed.

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

create_dfw_policyA

[WRITE] Create a new DFW security policy.

Returns the created policy dict (id, path, category, ...), else {"error", "hint"}. The policy is an empty container — rules must be added afterwards with create_dfw_rule.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNoOptional NSX Manager target from config.
categoryNoEthernet, Emergency, Infrastructure, Environment or Application (default Application); sets DFW evaluation order, Ethernet first, Application last.Application
statefulNoTrack connection state (default True).
policy_idYesUnique policy id (alphanumerics, hyphens, underscores).
descriptionNoOptional description.
display_nameYesHuman-readable name.
sequence_numberNoPriority; lower = higher priority (default 10).

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already signal this is a write operation (readOnlyHint=false) and not idempotent. The description adds value beyond annotations by stating the return shape ('created policy dict', else error/hint) and the empty-container behavior. No contradiction with annotations. It could mention duplicate-id behavior, but the current disclosure is solid for a creating tool.

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?

Two tightly packed sentences deliver the action, the write marker, the return contract, and the crucial empty-container/rule-sequencing note. No filler or repetition. The most important behavioral caveat is front-loaded.

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

Completeness4/5

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

All 7 parameters are fully covered by the schema, and the description explains the return value and the important empty-container behavior. There is no output schema, so mentioning the return dict fills a real gap. Minor omissions like duplicate-ID handling are not critical given the openWorldHint and idempotentHint annotations.

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 every parameter including defaults and enum meanings. The description does not need to add parameter-level detail; its mention of return keys like id, path, and category is incidental. Baseline 3 is appropriate because the description adds no extra parameter 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 uses a specific verb+resource pair ('Create a new DFW security policy') and clarifies the resource's nature ('empty container'), which distinguishes it from rule-level tools like create_dfw_rule without needing to open schemas. The [WRITE] tag reinforces the action type. This is clear and unambiguous.

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 explicit sequencing guidance: the policy starts empty and rules must be added afterwards with create_dfw_rule. This tells an agent how to use the tool in a multi-step workflow. It does not explicitly mention alternatives like update_dfw_policy, but for a create operation the intended use is well implied.

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

create_dfw_ruleA

[WRITE] Create a firewall rule under an existing DFW security policy.

Returns the created rule dict (id, path, action, ...), else {"error", "hint"}; a bad action/direction/ip_protocol lists the valid values. PUT semantics: reusing a rule_id overwrites that rule, enforced immediately unless disabled=True. Pick policy_id with list_dfw_policies first; prefer update_dfw_rule to edit one and delete_dfw_rule to remove one.

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNoApplied-to group/segment paths; omit for the whole DFW.
actionNoALLOW, DROP, REJECT or JUMP_TO_APPLICATION (default ALLOW); JUMP_TO_APPLICATION needs an Environment policy.ALLOW
loggedNoLog matched traffic (default False).
targetNoTarget name from config; default if omitted.
rule_idYesUnique rule id within that policy.
sourcesNoSource group paths like ['/infra/domains/default/groups/web']; omit for any.
disabledNoCreate the rule unenforced (default False).
servicesNoService paths; omit for all.
directionNoIN, OUT or IN_OUT (default IN_OUT).IN_OUT
policy_idYesParent policy id, from list_dfw_policies.
descriptionNoOptional free text.
ip_protocolNoIPV4, IPV6 or IPV4_IPV6 (default IPV4_IPV6).IPV4_IPV6
destinationsNoDestination group paths; omit for any.
display_nameYesHuman-readable name.
sequence_numberNoPriority; lower matches first (default 10).

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 exact return shape for success and failure, error hints for invalid enums, overwrite semantics for duplicate rule_id, and the immediate-enforcement behavior unless disabled=True. These are behavioral details not available 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?

Three sentences carry all the essential guidance with no filler, and the purpose is front-loaded in the first sentence. Each sentence earns its place: return shape, overwrite behavior, and sibling routing.

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 15-parameter write tool with no output schema, the description covers return value, error format, validation hints, upsert semantics, prerequisite discovery, and alternative tools. Nothing essential for selecting and invoking this tool 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?

The schema already documents all 15 parameters (100% coverage), so the baseline is 3. The description adds useful semantics by explaining that policy_id must come from list_dfw_policies and that reusing rule_id overwrites the existing rule, enriching the meaning of those parameters beyond their 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, 'Create a firewall rule under an existing DFW security policy,' which immediately distinguishes it from update_dfw_rule, delete_dfw_rule, and create_dfw_policy. The sibling tools are explicitly named where relevant, reinforcing the differentiation.

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 instructs the agent to pick policy_id with list_dfw_policies first, and explicitly names update_dfw_rule and delete_dfw_rule as the alternatives for editing and removal. The PUT-semantics warning about overwriting on reused rule_id also tells the agent when creation acts as an upsert.

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

create_groupA

[WRITE] Create an NSX security group with optional membership criteria.

Returns the created group dict (id, path, expression, ...). Criteria are ORed — NSX only permits AND between same-member-type Conditions: tag_scope/tag_value matches VMs carrying that tag, ip_addresses matches IPs or CIDRs, segment_paths every VM on those segments. Use it before create_dfw_rule, which references the group path; confirm members with get_group.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNoOptional NSX Manager target from config.
group_idYesUnique id (alphanumerics, hyphens, underscores).
tag_scopeNoNSX tag scope for membership (e.g. 'env').
tag_valueNoNSX tag value for membership (e.g. 'production').
descriptionNoOptional description.
display_nameYesHuman-readable name.
ip_addressesNoIP addresses or CIDRs (e.g. ['10.0.1.0/24']).
segment_pathsNoNSX segment policy paths.

TDQS

A5/5.0
Behavior5/5

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

Beyond annotations, it discloses the return value (created group dict with id, path, expression), the ORing of criteria, and the NSX constraint that AND is only permitted between same-member-type Conditions. This materially clarifies what the tool does and its limitations.

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?

Four compact sentences front-load the primary purpose and [WRITE] signal, then each sentence adds a distinct, necessary detail: return value, criteria combination, and usage sequencing. 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?

For a create operation with 8 parameters and no output schema, the description covers the return shape, membership semantics, constraint on combining criteria, and the recommended call sequence with siblings. Nothing essential for correct invocation 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?

Schema already covers parameter descriptions at 100%, but the description adds the essential combination semantics: tag_scope/tag_value match VMs by tag, ip_addresses match IPs/CIDRs, segment_paths match every VM on segments. This is meaning an agent cannot derive from the schema alone.

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 NSX security group') and scopes it with optional membership criteria, so the resource and verb are unambiguous. It also distinguishes the tool from adjacent siblings by explicitly referencing create_dfw_rule and get_group rather than describing generic behavior.

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 direct sequencing guidance: 'Use it before create_dfw_rule' and 'confirm members with get_group.' This tells the agent when to call this tool relative to related operations, and the membership-criteria explanation helps decide whether this is the right group-creation path.

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

delete_dfw_policyA
Destructive

[WRITE] Delete a DFW security policy.

Returns {"status": "deleted", "message": ...}, else {"error", "hint"}. Refuses if the policy still holds active rules: list them with list_dfw_rules and clear each with delete_dfw_rule first.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNoOptional NSX Manager target from config.
policy_idYesID of the policy to delete.

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the destructiveHint annotation, the description discloses the return shape on success and error, and the conditional refusal behavior with active rules. This gives the agent realistic expectations for invoking the tool.

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 and resource. Every sentence delivers useful information: return values, error shape, and prerequisite cleanup steps.

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 two-parameter tool with no output schema, the description covers return format, error behavior, and prerequisite workflow. The schema covers parameter semantics, so 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 coverage is 100%: policy_id is described as 'ID of the policy to delete' and target as 'Optional NSX Manager target from config.' The description adds no extra parameter detail, so the baseline 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?

The description opens with '[WRITE] Delete a DFW security policy,' naming the verb and resource precisely. It clearly distinguishes this tool from siblings like list_dfw_policies, create_dfw_policy, and update_dfw_policy.

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 warns that deletion is refused while active rules exist and instructs the agent to list_dfw_rules and delete_dfw_rule first. This provides concrete when-to-use and prerequisite guidance beyond the bare schema.

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

delete_dfw_ruleA
Destructive

[WRITE] Permanently delete one DFW rule from its parent security policy.

Returns {"status": "deleted", "message": ...}, else {"error", "hint"}. Irreversible and immediate: traffic it matched falls through to lower-priority rules or the policy default. Confirm rule_id with list_dfw_rules and check recent hits with get_dfw_rule_stats first; prefer update_dfw_rule with disabled=True when you may need the rule back. To remove a whole policy use delete_dfw_policy — it refuses while rules remain, whereas this tool has no such guard.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNoTarget name from config; default if omitted.
rule_idYesRule id within that policy, from list_dfw_rules.
policy_idYesParent policy id, from list_dfw_policies.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already mark destructiveHint=true, but the description adds critical behavioral context: the delete is irreversible and immediate, traffic falls through to lower-priority rules or the policy default, and there is no guard against deleting rules while a policy still contains them. It also discloses the success and error return shapes, which is valuable since there is no output 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 information-dense yet well organized: action and result first, then irreversibility and consequences, then prerequisite checks and safer alternatives, then sibling differentiation. Every sentence earns its place and no content is wasted.

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

Completeness5/5

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

For a destructive, non-idempotent mutation tool with no output schema, this description covers the essential context: return values, irreversibility, impact on traffic, prerequisite verification, safer alternative, and the distinction from the policy-level delete. An agent has enough guidance to call this tool correctly and avoid common mistakes.

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?

Input schema coverage is 100%, so the schema already documents all parameters including origins from list_dfw_rules and list_dfw_policies. The description reinforces rule_id confirmation and policy membership but does not add substantial meaning 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?

Description opens with a specific verb and resource: 'Permanently delete one DFW rule from its parent security policy.' It clearly distinguishes from delete_dfw_policy and update_dfw_rule by name and behavior, so an agent can tell exactly which operation this is.

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 this tool: confirm the rule with list_dfw_rules, check recent hits with get_dfw_rule_stats, and prefer update_dfw_rule with disabled=True when the rule may be needed again. It also contrasts delete_dfw_policy, which refuses while rules remain, versus this tool, which has no such guard.

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

delete_groupA
Destructive

[WRITE] Delete an NSX security group.

Returns {"status": "deleted", "message": ...}, else {"error", "hint"}. Use it once get_group shows the group is unwanted. Refuses if anything still references it (NSX's group-associations API covers DFW rules and policies, gateway firewall, nested groups, service insertion), and refuses if that check itself fails (fail-safe). When the refusal names a DFW rule, retarget it with update_dfw_rule or drop it with delete_dfw_rule first.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNoOptional NSX Manager target from config.
group_idYesID of the group to delete.

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, idempotentHint=false), the description discloses important behavior: the tool refuses deletion if the group is referenced, fails safe if the reference check itself fails, and returns a specific status or error shape. This substantially exceeds what annotations alone 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 compact and dense, with the core action and return behavior front-loaded. Each sentence adds useful information: usage trigger, refusal semantics, fail-safe behavior, and remediation. No filler or redundant 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?

Despite having no output schema, the description explains the success and error return shapes and covers the main operational edge cases (referenced groups, check failure, DFW rule remediation). This gives an agent enough context to invoke the tool correctly and interpret its result.

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 both parameters are already documented. The description does not add further parameter-level detail beyond what the schema provides, such as additional constraints or format guidance for group_id or target. 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 'Delete an NSX security group', a specific verb and resource that clearly states the tool's function. It is easily distinguished from siblings like create_group, get_group, delete_dfw_policy, and delete_dfw_rule, so an agent can select it correctly.

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 an explicit trigger condition: 'Use it once get_group shows the group is unwanted.' It also provides a clear alternative path when deletion is blocked, naming update_dfw_rule and delete_dfw_rule as follow-up actions, which is strong practical guidance.

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

get_dfw_policyA
Read-onlyIdempotent

[READ] Get full details of a single DFW security policy.

Returns one policy object, not an envelope: category, sequence_number, stateful, scope and rule count. Use it once list_dfw_policies has narrowed to one id — never a display name. Then call list_dfw_rules for the rules inside.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNoOptional NSX Manager target from config.
policy_idYesPolicy identifier (e.g. 'app-tier-policy').

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. The description adds useful behavior beyond annotations: the return shape ('one policy object, not an envelope'), the specific fields returned, and the workflow ordering with list_dfw_policies and list_dfw_rules. No annotations are contradicted.

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 short sentences front-load the read intent and the key return shape, then provide usage chain and a constraint. Every sentence earns its place, with no fluff 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 single-resource read tool with no output schema, the description covers the return content, the correct input source, the input constraint, and the follow-up action. Combined with the covering annotations and complete input schema, an agent has everything needed to call 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 description coverage is 100%, so the baseline is 3. The description adds meaningful parameter semantics beyond the schema by specifying that policy_id must be an id, 'never a display name,' and that it should come from list_dfw_policies. This clarifies how to supply the required 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 states a specific verb and resource: 'Get full details of a single DFW security policy.' It explicitly contrasts with list_dfw_policies by saying it returns one policy object, not an envelope, so an agent can clearly distinguish this from the sibling list operation.

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 direct when-to-use guidance: 'Use it once list_dfw_policies has narrowed to one id — never a display name.' It also names the next step, 'Then call list_dfw_rules for the rules inside,' and implicitly excludes display-name lookup. No inference is required.

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

get_dfw_rule_statsA
Read-onlyIdempotent

[READ] Get packet/byte hit-count statistics for a DFW rule.

Returns one flat stats object, not an envelope: packet_count, byte_count, session_count, hit_count, popularity_index. Use it before update_dfw_rule or delete_dfw_rule to see if a rule still matches traffic; counters are cumulative and may read zero on a new rule. Ids come from list_dfw_rules.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNoOptional NSX Manager target from config.
rule_idYesRule identifier.
policy_idYesParent policy identifier.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already indicate a safe read operation, and the description adds meaningful behavioral context beyond that: counters are cumulative, may read zero on a new rule, and the response is a flat stats object rather than an envelope. This 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?

Three sentences, each earning its place: purpose, return shape, usage context, and ID source. The [READ] prefix and action-oriented opening make the tool's role immediately clear.

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 compensates by listing all returned fields and explaining counter semantics. It also covers where IDs come from and when to call this tool, making it self-sufficient for correct invocation and interpretation.

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 explains all parameters. The description adds minimal parameter-level meaning beyond noting that IDs come from list_dfw_rules, which is useful but not deeply elaborated. 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 names a specific verb ('Get') and resource ('packet/byte hit-count statistics for a DFW rule'), and clarifies the return shape by listing the exact fields. This makes it easy to distinguish from sibling tools like get_dfw_policy or get_idps_status.

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 directs when to use the tool: before update_dfw_rule or delete_dfw_rule to check whether a rule still matches traffic. It also points to list_dfw_rules as the source for identifiers, giving the agent actionable routing guidance.

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

get_groupA
Read-onlyIdempotent

[READ] Get details of a security group including membership criteria and effective members.

Returns one group object: its expression rules, member_count (the group's real size), and members — an envelope holding at most the first 50 effective VirtualMachine members, whose truncated flag says whether more were withheld. Report member_count as the size; counting members.items reports the sample instead. Use it once list_groups has narrowed to one id; membership is evaluated by NSX, so a tag written with apply_vm_tag may take seconds to appear.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNoOptional NSX Manager target from config.
group_idYesGroup identifier (e.g. 'web-tier-vms').

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the readOnlyHint and idempotentHint annotations, the description discloses that members is a truncated envelope of at most 50 items, that truncated indicates withheld members, and that member_count reflects the real size while members.items is only a sample. It also reveals the eventual-consistency behavior around recently applied VM tags.

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?

Every sentence in the description earns its place: purpose, return envelope semantics, counting guidance, and usage preconditions. The most important scoping line is front-loaded, and the additional detail is compact and non-repetitive.

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 present, the description sufficiently describes the return object: expression rules, member_count, and the members envelope with truncation semantics. It also covers practical pitfalls and eventual consistency, making the tool fully callable without external documentation.

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 both target and group_id are already documented in the input schema. The description reinforces the group_id usage context by referring to narrowing to one id, but it does not add new parameter-level syntax or format details 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] Get details of a security group including membership criteria and effective members,' which names a specific verb, the resource, and the distinguishing content. This clearly separates get_group from sibling tools like list_groups, create_group, and delete_group.

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 states when to call this tool: 'Use it once list_groups has narrowed to one id,' naming the prerequisite sibling directly. It also provides operational timing guidance about NSX membership evaluation and tag propagation latency, helping the agent decide when results are trustworthy.

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

get_idps_statusA
Read-onlyIdempotent

[READ] Get IDPS signature status and global IDS settings.

Returns one bundle, not an envelope: 'signature_status' (scalar fields of the signature bundle status, e.g. version/update state — names vary by NSX release) and 'settings' (auto_update, ids_events_to_syslog). Use it first to confirm IDS is on and current, then list_idps_profiles for the profiles. No per-signature or per-event detail, and 'signature_status' may be empty where IDS was never enabled.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNoOptional NSX Manager target from config.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnly, openWorld, idempotent, and non-destructive hints, but the description adds meaningful behavioral context: it returns a single bundle rather than an envelope, names the returned fields, and warns that 'signature_status' may be empty where IDS was never enabled. This is exactly the kind of nuance structured hints 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 front-loaded with '[READ] Get IDPS signature status and global IDS settings.' Every subsequent sentence adds value: return shape, field names, usage order, caveats, and exclusions. 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 adequately explains the return bundle, its fields, a possible empty state, and how this tool fits into the broader workflow. The combination of annotations, schema, and description gives an agent everything needed to call it correctly.

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

Parameters3/5

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

The only parameter is target, and the input schema already describes it as 'Optional NSX Manager target from config' with 100% coverage. The description does not need to add parameter semantics, 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?

Description states a specific verb and resource: 'Get IDPS signature status and global IDS settings.' It also distinguishes itself from siblings by explicitly noting it has no per-signature or per-event detail and that list_idps_profiles should be used for profiles.

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?

Provides explicit usage guidance: 'Use it first to confirm IDS is on and current, then list_idps_profiles for the profiles.' It also clarifies what the tool does not provide, which helps an agent avoid using it for the wrong purpose.

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

get_traceflow_resultA
Read-onlyIdempotent

[READ] Get the current state and observations of an existing Traceflow.

Use this to check a previously initiated traceflow without waiting. Returns operation_state (IN_PROGRESS / FINISHED / FAILED) and observations typed by resource_type; Dropped* ones carry reason and acl_rule_id. Only a traceflow run_traceflow left IN_PROGRESS at its timeout is still on the manager — a completed one is deleted server-side and its id 404s here.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNoOptional NSX Manager target from config.
traceflow_idYesTraceflow ID from a previous run_traceflow call.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already mark readOnly, idempotent, openWorld, and non-destructive. The description goes further: it discloses the operation_state enum, the observations' structure typed by resource_type, that Dropped* observations include reason and acl_rule_id, and the critical server-side behavior that a completed traceflow is deleted and its id 404s. This is valuable behavioral context beyond the annotations and no output schema exists to carry the load.

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?

Four sentences, every one earns its place: purpose, usage timing, return payload detail, and the surprising 404 lifecycle. It is front-loaded with the verb and resource, then details, then caveat. 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?

Even without an output schema, the description conveys what the agent needs: how to obtain the id (from run_traceflow), what operation states to expect, what fields appear in observations, and how to interpret a 404 for completed traceflows. For a simple read-poll tool with rich 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%: traceflow_id is already described as 'Traceflow ID from a previous run_traceflow call' and target as 'Optional NSX Manager target from config'. The description adds no param-specific detail beyond this, so the baseline 3 applies. No parameter is left unexplained by the schema.

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

Purpose5/5

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

States a specific verb ('Get'), a clear resource ('existing Traceflow'), and the result ('current state and observations'). It is instantly distinguishable from siblings like run_traceflow, which starts a traceflow, and list/get policy tools, which operate on unrelated resources. The [READ] prefix reinforces the read nature.

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 instructs 'Use this to check a previously initiated traceflow without waiting', which defines the exact moment an agent should call it. The lifecycle note about completed traceflows being deleted server-side and 404ing prevents an agent from misinterpreting a 404 as an error, and implicitly tells it not to use this tool to start traceflows.

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

list_dfw_exclusionsA
Read-onlyIdempotent

[READ] List the DFW exclusion list — the members no distributed-firewall rule reaches.

Read this before answering any question about a VM being micro-segmented or protected by DFW policy. A VM on this list has no DFW in its datapath: rules that name it, groups that contain it and policies scoped to it all still exist and none of them apply. On a VCF estate the management VMs (vCenter, VCF Operations, NSX managers) are commonly on it.

Returns the list envelope. 'items' holds one row per excluded member: the group 'path', its 'id' and 'display_name', the 'virtual_machines' in it and 'vm_count'. A row with 'members_error' is a group whose members could not be read — that is not an empty group, so do not read it as one.

'scope' says which list answered: "system_and_user" includes NSX's own system-owned exclusions, "user" means this manager refused that variant and system exclusions are NOT in the answer. An empty list under "user" is not proof that nothing is excluded.

Page with 'next_offset': pass the value back as 'offset' and stop when it is null. The list holds at most 100 groups, so one page is normally all of it.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoPage size, 1..1000 (default 50). Not a way to ask for everything — 0 or negative is rejected.
offsetNoExcluded members to skip, 0 or more. Pass the previous response's 'next_offset'.
targetNoOptional NSX Manager target from config.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations (readOnlyHint, openWorldHint, idempotentHint, destructiveHint=false) are greatly extended with critical behavioral detail: the return envelope shape, the members_error trap ('not an empty group, so do not read it as one'), the 'scope' variant semantics ('system exclusions are NOT in the answer' under user), and that an empty list is not proof of absence — reinforcing openWorldHint. 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 long but every sentence earns its place: purpose first, then invocation trigger, datapath semantics, return shape, scope caveat, and pagination. There is no filler, and the most correctness-critical warnings (members_error, scope variant, empty-list semantics) are front-loaded before the pagination 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 and 0 required params, the description carries the entire burden of explaining outputs — and it does: envelope, per-row fields, members_error semantics, scope behavior, and pagination. An agent has everything needed to call the tool correctly and interpret results correctly, including edge cases that could otherwise cause false conclusions about VM protection.

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, and the description adds genuine value: the pagination termination condition ('stop when it is null') and the practical ceiling 'at most 100 groups,' which prevents an agent from over-fetching via limit on a list that never exceeds 100. While the schema already documents next_offset→offset, the description contributes the stop condition and expected page count.

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 the DFW exclusion list — the members no distributed-firewall rule reaches,' a specific verb+resource+scope that instantly distinguishes this from the sibling policy, rule, and group listers. The resource is unambiguous and the semantic definition of an exclusion is stated in one clear clause.

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 explicitly directs the agent: 'Read this before answering any question about a VM being micro-segmented or protected by DFW policy,' an unambiguous when-to-use trigger. It further clarifies that rules, groups, and policies still exist but 'none of them apply,' informing correct interpretation, though it stops short of naming a specific alternative tool or a when-not-to-use condition.

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

list_dfw_policiesA
Read-onlyIdempotent

[READ] List DFW security policies in the default domain.

Start here. Returns the list envelope: 'items' holds each policy's id, display_name, category, sequence_number, stateful flag and rule count; 'returned'/'limit'/'total'/'truncated'/'hint' say whether the page is the whole answer — never read a full page as complete, narrow with name_filter or page with offset. Then get_dfw_policy for one policy's detail, or list_dfw_rules for the rules inside.

Page with 'next_offset': pass the value back as 'offset' and stop when it is null. Do not loop on 'truncated' — that says this page is not the whole collection, which stays true on the last page of a walk.

'rule_count' is null when NSX did not report one — that means "not retrieved", NOT "no rules", so do not conclude a null policy enforces nothing; call list_dfw_rules on it. Passing name_filter makes every count null (it is resolved via the Policy Search API, which carries no rule counts). A null anywhere adds 'rule_count_note' to the envelope.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoPage size, 1..1000 (default 50). Not a way to ask for everything — 0 or negative is rejected.
offsetNoMatched policies to skip, 0 or more. Pass the previous response's 'next_offset'.
targetNoNSX Manager target name from config; default if omitted.
name_filterNoSubstring/glob match on policy display_name.

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the readOnlyHint and idempotentHint annotations, the description discloses the envelope structure, the meaning of truncated, the null rule_count caveat, and the side effects of name_filter. It also warns against misinterpreting null rule_count as 'no rules,' which is critical behavioral context an agent would otherwise lack.

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: entry-point advice, return envelope semantics, pagination rules, and null-value pitfalls. The most important orientation is front-loaded in the first sentence, and the later paragraphs add essential nuance without fluff.

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 present, the description sufficiently explains the return envelope, pagination contract, and null rule_count behavior. It also handles the open-world concern by explicitly warning not to treat a truncated page as the complete answer. For a read-only list tool with four self-documenting parameters, nothing required for correct invocation 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?

The input schema already provides 100% description coverage for parameters. The tool description adds meaningful operational detail: offset should carry next_offset, limit rejects invalid values, and name_filter makes counts null through the Policy Search API. This is a solid addition above the schema baseline, though the schema already carries the basic parameter meanings.

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'), a concrete resource ('DFW security policies'), and a scope ('default domain'). It also positions itself as the starting point and names get_dfw_policy and list_dfw_rules as follow-up tools, making it distinguishable 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?

It explicitly says 'Start here,' then directs the agent to get_dfw_policy for detail and list_dfw_rules for rules. It also provides precise pagination guidance using next_offset and explains when not to treat a page as complete, which fully covers when and how to use this tool versus alternatives.

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

list_dfw_rulesA
Read-onlyIdempotent

[READ] List rules in a DFW security policy.

Returns the list envelope: 'items' holds each rule's id, display_name, action, sources, destinations, services, direction, disabled flag and sequence number; 'returned'/'limit'/'truncated'/'hint' say whether the page is complete. 'total' is always null here — a full page reports truncated=true and must be paged with offset; one Application policy can hold thousands of rules. Get policy_id from list_dfw_policies; then get_dfw_rule_stats for a rule's hit counts.

Page with 'next_offset': pass the value back as 'offset' and stop when it is null. Do not loop on 'truncated' — that says this page is not the whole collection, which stays true on the last page of a walk.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoPage size, 1..1000 (default 50). Not a way to ask for everything — 0 or negative is rejected.
offsetNoRules to skip, 0 or more. Pass the previous response's 'next_offset'.
targetNoOptional NSX Manager target from config.
policy_idYesParent policy identifier.

TDQS

A4.7/5.0
Behavior5/5

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

The description substantially enriches the annotations by explaining pagination behavior: 'total' is always null, a full page reports truncated=true, offset-based paging is required, and one policy can hold thousands of rules. It also explicitly warns not to loop on 'truncated' and says to stop when 'next_offset' is null, which is valuable behavioral detail beyond the readOnly/openWorld/idempotent hints.

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 purpose and read-only intent, then covers return envelope, pagination semantics, and related sibling tools in a logical order. Despite its length, every sentence adds necessary operational detail, especially around the non-obvious 'truncated' behavior.

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 paginated read-only list tool with no output schema, the description is complete: it explains the return envelope fields, the pagination contract, the policy_id source, the sibling for rule statistics, and the special 'total is always null' behavior. Nothing critical is missing for an agent to call 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?

Schema coverage is 100%, so the schema already documents all four parameters well. The description adds extra meaning by telling the agent where policy_id comes from (list_dfw_policies), reinforcing that offset is fed by 'next_offset', and clarifying the termination rule for pagination. This goes slightly beyond the baseline 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 opens with '[READ] List rules in a DFW security policy', giving a specific verb, resource, and scope. It clearly distinguishes the tool from siblings like list_dfw_policies (lists policies) and get_dfw_rule_stats (rule hit counts), so an agent can select it correctly without inspecting schemas.

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: get the policy_id from list_dfw_policies, then list its rules, and use get_dfw_rule_stats when rule hit counts are needed. It does not explicitly state exclusions for create/update/delete siblings, but the read-only framing and rule-list purpose make the intended use unambiguous.

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

list_groupsA
Read-onlyIdempotent

[READ] List NSX security groups in the default domain.

Returns the list envelope: 'items' holds each group's id, display_name, description and expression count; 'returned'/'limit'/'total'/ 'truncated'/'hint' say whether the page is the whole answer — never read a full page as complete, narrow with name_filter or page with offset. Then get_group for one group's criteria and effective members.

Page with 'next_offset': pass the value back as 'offset' and stop when it is null. Do not loop on 'truncated' — that says this page is not the whole collection, which stays true on the last page of a walk.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoPage size, 1..1000 (default 50). Not a way to ask for everything — 0 or negative is rejected.
offsetNoMatched groups to skip, 0 or more. Pass the previous response's 'next_offset'.
targetNoOptional NSX Manager target from config.
name_filterNoSubstring/glob match on group display_name.

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 reinforces this with '[READ]'. It goes beyond the annotations by fully describing the response envelope fields and the pagination contract, including the critical caveat that 'truncated' is not a loop condition and that a page may not be the whole answer. This is exactly the kind of behavioral context an agent needs in the absence of an output 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 dense but every sentence earns its place: it states the operation, describes the return envelope, gives paging rules, and routes deeper work to get_group. The most important scoping and pagination warnings are front-loaded, and there is no filler or repetition of schema content. The structure is well suited to the tool's complexity.

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 covers the return envelope and pagination semantics, which are the non-obvious parts of this tool. It also tells the agent when to redirect to get_group for deeper detail, covering the main follow-up need. For a read-only list tool with fully documented parameters, nothing essential 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 schema already documents all four parameters. The description adds meaningful semantics by explaining how name_filter and offset are intended to be used together, and by explicitly tying offset to the next_offset field from a previous response. It reinforces the schema's parameter descriptions rather than merely repeating them, though the schema already carries most of the parameter burden.

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-resource pair, 'List NSX security groups in the default domain,' making the tool's core purpose unmistakable. It also distinguishes itself from get_group by pointing to that sibling for a single group's criteria and effective members, and from mutation siblings like create_group and delete_group by the explicit '[READ]' marker. An agent can tell this tool apart from its siblings without opening 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?

The description provides direct usage guidance: narrow with name_filter, page with offset, and never treat a single page as complete. It explicitly names get_group as the alternative when one group's criteria and effective members are needed. It also warns against looping on 'truncated' and explains the correct next_offset walk, which is actionable and unambiguous.

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

list_idps_profilesA
Read-onlyIdempotent

[READ] List IDPS profiles configured in NSX.

Returns the list envelope: 'items' holds each profile's id, display_name, profile_severity (comma-joined), criteria (filter_name/filter_value pairs, e.g. ATTACK_TYPE or CVSS) and overridden signature count; 'returned'/'limit'/'total'/'truncated'/ 'hint' say whether the page is the whole answer — never read a full page as complete, narrow with name_filter or page with offset. Then get_idps_status for the signature-bundle version and IDS settings.

Page with 'next_offset': pass the value back as 'offset' and stop when it is null. Do not loop on 'truncated' — that says this page is not the whole collection, which stays true on the last page of a walk.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoPage size, 1..1000 (default 50). Not a way to ask for everything — 0 or negative is rejected.
offsetNoMatched profiles to skip, 0 or more. Pass the previous response's 'next_offset'.
targetNoOptional NSX Manager target from config.
name_filterNoSubstring/glob match on profile display_name.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations declare readOnly, idempotent, and non-destructive, and the description builds on that by explaining the list envelope semantics, truncation behavior, and the critical pagination trap ('Do not loop on truncated'). This goes well beyond the annotations and saves the agent from a common misuse.

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?

Dense and well-organized: the READ marker and core purpose come first, followed by return shape, then actionable pagination/filtering guidance. Every sentence carries operational value; 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?

With no output schema, the description fully explains the response envelope and field semantics. It also covers the only genuinely tricky behavior (offset/truncated pagination) and routes to the relevant sibling tool. Nothing needed for correct invocation 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 valuable parameter context by tying offset to next_offset and name_filter to narrowing, which goes beyond the schema's individual 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?

States a specific verb ('List'), a resource ('IDPS profiles'), and scope ('configured in NSX'), and details exactly what the returned items contain. It also names the sibling get_idps_status for related-but-different data, making it easy to distinguish.

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 instructs when to use this tool ('List IDPS profiles'), when not to treat a page as complete, how to narrow results (name_filter), and redirects to get_idps_status for status/settings. Pagination usage is fully explained with concrete next_offset guidance.

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

list_vm_tagsA
Read-onlyIdempotent

[READ] List all NSX tags applied to a virtual machine.

Returns the list envelope: 'items' holds the VM's scope/tag pairs and 'vm_id' the fabric UUID apply_vm_tag and remove_vm_tag require — call this first to get it. Tags always arrive in one response, so 'truncated' is always false and empty 'items' means the VM really has no tags. 'tags' is a deprecated pre-1.8.0 alias of 'items', removed in 2.0 — read 'items'. Returns {"error", "hint"} if no VM matches, or several do.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNoOptional NSX Manager target from config.
vm_display_nameYesExact vCenter display name (case-sensitive, no wildcards). This skill does not enumerate VMs — run vmware-monitor's list_virtual_machines to get one.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare read-only, idempotent, and non-destructive behavior, and the description adds substantial context: the response envelope (items, vm_id), the always-false truncated guarantee, empty-items semantics, the deprecated 'tags' alias, and error behavior for zero or multiple matches. This goes well beyond what the annotations 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?

Dense but efficient: every sentence covers a needed fact — read nature, response shape, truncation guarantee, deprecation, and error cases. Front-loaded with the action and then systematically explains return behavior without waste.

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 owns response documentation and covers items, vm_id, truncated, deprecated alias, and error conditions. It also explains the tool's role as a prerequisite for tag mutations, so nothing needed for correct invocation 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% and already documents vm_display_name as exact, case-sensitive, no-wildcards. The description adds no new parameter syntax, though it does clarify that multiple matches produce an error; baselined at 3 because the schema carries the parameter documentation burden.

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?

Opens with '[READ] List all NSX tags applied to a virtual machine' — a specific verb, resource, and scope. This clearly separates it from sibling mutation tools apply_vm_tag/remove_vm_tag and from policy/group tools.

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 states this tool must be called first to obtain vm_id for apply_vm_tag/remove_vm_tag, and the schema notes that this skill does not enumerate VMs — directing the agent to vmware-monitor's list_virtual_machines when a display name is needed. This gives clear when-to-use and when-not-to-use guidance with named alternatives.

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

remove_vm_tagA
DestructiveIdempotent

[WRITE] Remove an NSX tag from a virtual machine.

Returns {"status": "removed", "vm_id", "scope", "tag"}, not the VM's remaining tags. Only the exact scope/value pair is removed — other tags survive. Removing a tag changes dynamic group membership immediately — groups with tag Conditions stop matching the VM — so re-check with get_group. Use list_vm_tags first to confirm the pair.

ParametersJSON Schema
NameRequiredDescriptionDefault
vm_idYesVM external ID (fabric UUID, from list_vm_tags).
targetNoOptional NSX Manager target from config.
tag_scopeYesScope of the tag to remove (e.g. 'env').
tag_valueYesValue of the tag to remove (e.g. 'production').

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already mark this as destructive and non-readonly, and the description adds high-value behavioral context: the return-value shape (and that remaining tags are NOT returned), exact-pair-only deletion, and the immediate side-effect that dynamic group membership changes. The '[WRITE]' marker and 'Remove' wording align with readOnlyHint=false, so no contradiction exists.

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 dense sentences, each earning its place: core action first, return-value clarification second, side-effect plus mitigation third. There is no filler and no redundant restating 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?

With no output schema, the description compensates by spelling out the exact return value and what it does NOT return — essential for correct agent interpretation. It also covers prerequisites, the destructive membership consequence, and verification steps, making it complete for a mutation tool of this complexity.

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

Parameters3/5

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

Schema coverage is 100% and the schema descriptions are already rich (vm_id sourced from list_vm_tags, scope/value examples), so the schema carries the parameter burden. The description adds modest value by emphasizing 'exact scope/value pair' removal but does not add anything about the optional 'target' 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 a specific verb+resource statement, 'Remove an NSX tag from a virtual machine,' and then sharpens it with exact-match semantics: 'Only the exact scope/value pair is removed — other tags survive.' This makes it immediately distinguishable from siblings like apply_vm_tag and list_vm_tags without needing to inspect their schemas.

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 provides explicit workflow guidance: 'Use list_vm_tags first to confirm the pair' as a precondition and 're-check with get_group' to verify the post-condition. It omits an explicit when-not statement naming apply_vm_tag as the inverse alternative, though the tool name and sibling list make that inference easy.

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

run_traceflowA

[WRITE] Run a Traceflow to trace a packet's path through the NSX overlay.

Injects a synthetic probe from the source port. Returns traceflow_id, operation_state (IN_PROGRESS / FINISHED / FAILED) and hop-by-hop observations typed by resource_type; Dropped* ones carry reason and acl_rule_id. Use it to find which DFW rule drops a flow, then get_dfw_rule_stats on that rule. A FINISHED traceflow is deleted server-side and its id 404s; only one still IN_PROGRESS at timeout_seconds survives for get_traceflow_result to poll.

ParametersJSON Schema
NameRequiredDescriptionDefault
ttlNoIP TTL (default 64).
dst_ipYesDestination IP.
src_ipYesProbe source IP.
targetNoOptional NSX Manager target from config.
dst_portNoDestination port for TCP/UDP (default 80).
protocolNoTCP, UDP or ICMP (default TCP).TCP
src_portNoSource port for TCP/UDP (default 1234).
src_lport_idYesSource logical port ID — the VM NIC attachment UUID. This skill does not enumerate ports; run vmware-nsx's get_segment_port_for_vm to obtain one.
timeout_secondsNoMax seconds to wait (default 20).

TDQS

A4.9/5.0
Behavior5/5

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

Discloses that a FINISHED traceflow is deleted server-side and its id 404s, and that only one still IN_PROGRESS at timeout_seconds survives for get_traceflow_result to poll. This goes beyond the annotations and clearly explains side effects, lifecycle, and the non-idempotent nature of the operation.

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 contributes: purpose, return values, use case, follow-up tool, and lifecycle. There is no filler or unnecessary repetition of schema details, and the key information is front-loaded.

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 without an output schema, it describes return fields (traceflow_id, operation_state, hop-by-hop observations with Dropped* details), the follow-up workflow, and the server-side cleanup behavior. This covers what an agent needs to invoke the tool and process 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 description coverage is 100%, so the baseline is 3. The description adds meaningful context for src_lport_id (VM NIC attachment UUID, how to obtain it) and timeout_seconds (survival for polling), elevating the semantic guidance beyond the schema.

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

Purpose5/5

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

The description states 'Run a Traceflow to trace a packet's path through the NSX overlay' with a specific verb, resource, and goal, and the [WRITE] prefix signals mutation. It is clearly distinct from the DFW policy/rule sibling tools and complements get_traceflow_result by describing the run action versus polling.

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 directs the agent: 'Use it to find which DFW rule drops a flow, then get_dfw_rule_stats on that rule,' and describes the polling condition for get_traceflow_result. It also points to vmware-nsx's get_segment_port_for_vm to obtain a source port, providing an alternative for a prerequisite.

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

update_dfw_policyA

[WRITE] Partially update a DFW security policy (PATCH — only provided fields change).

Returns the updated policy dict; omitted arguments keep their values, so read them with get_dfw_policy first. Use it to rename or re-prioritise the policy itself — to change a rule inside use update_dfw_rule.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNoOptional NSX Manager target from config.
statefulNoNew stateful flag.
policy_idYesID of the policy to update.
descriptionNoNew description.
display_nameNoNew display name.
sequence_numberNoNew sequence number.

TDQS

A4.9/5.0
Behavior5/5

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

The description discloses that this is a partial update where only provided fields change, omitted fields keep their values, and the updated policy dict is returned. This goes well beyond the annotations, which only indicate write/non-readonly semantics and do not describe PATCH 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 with the operation type and PATCH semantics. Every sentence adds value: partial-update behavior, return value, prerequisite read, and the sibling tool alternative. 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 6-parameter mutation tool with no output schema, the description covers the essential behavioral contract: what changes, what doesn't, what is returned, and how to distinguish this from the rule update sibling. The schema already documents each parameter individually, so the description is complete enough for an agent to use 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?

Schema description coverage is 100%, so the baseline is 3. The description adds useful parameter-level context by explaining that omitted arguments retain their existing values and should be read first, which clarifies how the optional parameters behave beyond the schema's individual field 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?

Description states a clear verb-resource pair: 'Partially update a DFW security policy' with PATCH semantics. It distinguishes itself from the sibling update_dfw_rule by explicitly saying it is for the policy itself, not rules inside it.

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 it to rename or re-prioritise the policy, and use update_dfw_rule instead for changing a rule inside the policy. It also advises reading the policy with get_dfw_policy first, providing clear context for safe invocation.

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

update_dfw_ruleA

[WRITE] Partially update a DFW rule (PATCH — only provided fields change).

Returns the updated rule dict; omitted arguments keep their values, so read them with list_dfw_rules first. Use it to retarget, re-prioritise or disable a rule — to add one use create_dfw_rule, to remove one delete_dfw_rule.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionNoNew firewall action.
loggedNoNew logged flag.
targetNoOptional NSX Manager target from config.
rule_idYesRule identifier to update.
sourcesNoNew source groups.
disabledNoNew disabled flag.
servicesNoNew services.
policy_idYesParent policy identifier.
descriptionNoNew description.
destinationsNoNew destination groups.
display_nameNoNew name.
sequence_numberNoNew sequence number.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already convey readOnlyHint=false and destructiveHint=false. The description adds meaningful context: [WRITE], PATCH semantics, returned updated rule dict, and that omitted arguments keep their values. It does not contradict annotations and gives enough behavioral information beyond them.

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 efficient sentences: one for the PATCH verb and scope, one for the return/value-preservation behavior, one for usage routing. Every sentence earns its place and there is no repetition of schema details.

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

Completeness4/5

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

For a 12-parameter mutating tool with no output schema, it covers the main operational guidance: return type, prerequisite read, and sibling routing. The only notable gap is the unclear behavior of explicitly passing null vs omitting a parameter, which matters for nullable fields in a PATCH.

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 each parameter having a short description like 'New firewall action.' The main added semantic is that omitted arguments keep their values, but the description does not clarify the null-vs-omitted distinction for clearing fields. The schema carries most of the parameter meaning.

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

Purpose5/5

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

States a specific verb and resource: 'Partially update a DFW rule (PATCH — only provided fields change)' and distinguishes it from create/delete alternatives. This is unambiguous and can't be confused with list_dfw_rules or update_dfw_policy.

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 when to use it ('retarget, re-prioritise or disable a rule') and names alternatives ('to add one use create_dfw_rule, to remove one delete_dfw_rule'). Also tells the agent to read current values with list_dfw_rules first, which is essential for a PATCH.

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. 22 tool updatesv1.10.0
    • Changedapply_vm_tag5 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / tag_scope / description
        Added value: +"Tag scope (e.g. 'env', 'tier', 'owner')."
      • addedInput schema / properties / tag_value / description
        Added value: +"Tag value (e.g. 'production', 'web')."
      • addedInput schema / properties / target / description
        Added value: +"Optional NSX Manager target from config."
      • addedInput schema / properties / vm_id / description
        Added value: +"VM external ID (fabric UUID, from list_vm_tags)."
    • Changedcreate_dfw_policy9 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / category / description
        Added value: +"Ethernet, Emergency, Infrastructure, Environment or Application (default Application); sets DFW evaluation order, Ethernet first, Application last."
      • addedInput schema / properties / category / enum
        Added value: +[
        +  "Ethernet",
        +  "Emergency",
        +  "Infrastructure",
        +  "Environment",
        +  "Application"
        +]
      • addedInput schema / properties / description / description
        Added value: +"Optional description."
      • addedInput schema / properties / display_name / description
        Added value: +"Human-readable name."
      • addedInput schema / properties / policy_id / description
        Added value: +"Unique policy id (alphanumerics, hyphens, underscores)."
      • addedInput schema / properties / sequence_number / description
        Added value: +"Priority; lower = higher priority (default 10)."
      • addedInput schema / properties / stateful / description
        Added value: +"Track connection state (default True)."
      • addedInput schema / properties / target / description
        Added value: +"Optional NSX Manager target from config."
    • Changedcreate_dfw_rule19 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / action / description
        Added value: +"ALLOW, DROP, REJECT or JUMP_TO_APPLICATION (default ALLOW); JUMP_TO_APPLICATION needs an Environment policy."
      • addedInput schema / properties / action / enum
        Added value: +[
        +  "ALLOW",
        +  "DROP",
        +  "REJECT",
        +  "JUMP_TO_APPLICATION"
        +]
      • addedInput schema / properties / description / description
        Added value: +"Optional free text."
      • addedInput schema / properties / destinations / description
        Added value: +"Destination group paths; omit for any."
      • addedInput schema / properties / direction / description
        Added value: +"IN, OUT or IN_OUT (default IN_OUT)."
      • addedInput schema / properties / direction / enum
        Added value: +[
        +  "IN",
        +  "OUT",
        +  "IN_OUT"
        +]
      • addedInput schema / properties / disabled / description
        Added value: +"Create the rule unenforced (default False)."
      • addedInput schema / properties / display_name / description
        Added value: +"Human-readable name."
      • addedInput schema / properties / ip_protocol / description
        Added value: +"IPV4, IPV6 or IPV4_IPV6 (default IPV4_IPV6)."
      • addedInput schema / properties / ip_protocol / enum
        Added value: +[
        +  "IPV4",
        +  "IPV6",
        +  "IPV4_IPV6"
        +]
      • addedInput schema / properties / logged / description
        Added value: +"Log matched traffic (default False)."
      • addedInput schema / properties / policy_id / description
        Added value: +"Parent policy id, from list_dfw_policies."
      • addedInput schema / properties / rule_id / description
        Added value: +"Unique rule id within that policy."
      • addedInput schema / properties / scope / description
        Added value: +"Applied-to group/segment paths; omit for the whole DFW."
      • addedInput schema / properties / sequence_number / description
        Added value: +"Priority; lower matches first (default 10)."
      • addedInput schema / properties / services / description
        Added value: +"Service paths; omit for all."
      • addedInput schema / properties / sources / description
        Added value: +"Source group paths like ['/infra/domains/default/groups/web']; omit for any."
      • addedInput schema / properties / target / description
        Added value: +"Target name from config; default if omitted."
    • Changedcreate_group9 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / description / description
        Added value: +"Optional description."
      • addedInput schema / properties / display_name / description
        Added value: +"Human-readable name."
      • addedInput schema / properties / group_id / description
        Added value: +"Unique id (alphanumerics, hyphens, underscores)."
      • addedInput schema / properties / ip_addresses / description
        Added value: +"IP addresses or CIDRs (e.g. ['10.0.1.0/24'])."
      • addedInput schema / properties / segment_paths / description
        Added value: +"NSX segment policy paths."
      • addedInput schema / properties / tag_scope / description
        Added value: +"NSX tag scope for membership (e.g. 'env')."
      • addedInput schema / properties / tag_value / description
        Added value: +"NSX tag value for membership (e.g. 'production')."
      • addedInput schema / properties / target / description
        Added value: +"Optional NSX Manager target from config."
    • Changeddelete_dfw_policy3 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / policy_id / description
        Added value: +"ID of the policy to delete."
      • addedInput schema / properties / target / description
        Added value: +"Optional NSX Manager target from config."
    • Changeddelete_dfw_rule4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / policy_id / description
        Added value: +"Parent policy id, from list_dfw_policies."
      • addedInput schema / properties / rule_id / description
        Added value: +"Rule id within that policy, from list_dfw_rules."
      • addedInput schema / properties / target / description
        Added value: +"Target name from config; default if omitted."
    • Changeddelete_group3 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / group_id / description
        Added value: +"ID of the group to delete."
      • addedInput schema / properties / target / description
        Added value: +"Optional NSX Manager target from config."
    • Changedget_dfw_policy3 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / policy_id / description
        Added value: +"Policy identifier (e.g. 'app-tier-policy')."
      • addedInput schema / properties / target / description
        Added value: +"Optional NSX Manager target from config."
    • Changedget_dfw_rule_stats4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / policy_id / description
        Added value: +"Parent policy identifier."
      • addedInput schema / properties / rule_id / description
        Added value: +"Rule identifier."
      • addedInput schema / properties / target / description
        Added value: +"Optional NSX Manager target from config."
    • Changedget_group3 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / group_id / description
        Added value: +"Group identifier (e.g. 'web-tier-vms')."
      • addedInput schema / properties / target / description
        Added value: +"Optional NSX Manager target from config."
    • Changedget_idps_status2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / target / description
        Added value: +"Optional NSX Manager target from config."
    • Changedget_traceflow_result3 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / target / description
        Added value: +"Optional NSX Manager target from config."
      • addedInput schema / properties / traceflow_id / description
        Added value: +"Traceflow ID from a previous run_traceflow call."
    • Addedlist_dfw_exclusions
    • Changedlist_dfw_policies5 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / limit / description
        Added value: +"Page size, 1..1000 (default 50). Not a way to ask for everything — 0 or negative is rejected."
      • addedInput schema / properties / name_filter / description
        Added value: +"Substring/glob match on policy display_name."
      • addedInput schema / properties / offset / description
        Added value: +"Matched policies to skip, 0 or more. Pass the previous response's 'next_offset'."
      • addedInput schema / properties / target / description
        Added value: +"NSX Manager target name from config; default if omitted."
    • Changedlist_dfw_rules5 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / limit / description
        Added value: +"Page size, 1..1000 (default 50). Not a way to ask for everything — 0 or negative is rejected."
      • addedInput schema / properties / offset / description
        Added value: +"Rules to skip, 0 or more. Pass the previous response's 'next_offset'."
      • addedInput schema / properties / policy_id / description
        Added value: +"Parent policy identifier."
      • addedInput schema / properties / target / description
        Added value: +"Optional NSX Manager target from config."
    • Changedlist_groups5 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / limit / description
        Added value: +"Page size, 1..1000 (default 50). Not a way to ask for everything — 0 or negative is rejected."
      • addedInput schema / properties / name_filter / description
        Added value: +"Substring/glob match on group display_name."
      • addedInput schema / properties / offset / description
        Added value: +"Matched groups to skip, 0 or more. Pass the previous response's 'next_offset'."
      • addedInput schema / properties / target / description
        Added value: +"Optional NSX Manager target from config."
    • Changedlist_idps_profiles5 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / limit / description
        Added value: +"Page size, 1..1000 (default 50). Not a way to ask for everything — 0 or negative is rejected."
      • addedInput schema / properties / name_filter / description
        Added value: +"Substring/glob match on profile display_name."
      • addedInput schema / properties / offset / description
        Added value: +"Matched profiles to skip, 0 or more. Pass the previous response's 'next_offset'."
      • addedInput schema / properties / target / description
        Added value: +"Optional NSX Manager target from config."
    • Changedlist_vm_tags3 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / target / description
        Added value: +"Optional NSX Manager target from config."
      • addedInput schema / properties / vm_display_name / description
        Added value: +"Exact vCenter display name (case-sensitive, no wildcards). This skill does not enumerate VMs — run vmware-monitor's list_virtual_machines to get one."
    • Changedremove_vm_tag5 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / tag_scope / description
        Added value: +"Scope of the tag to remove (e.g. 'env')."
      • addedInput schema / properties / tag_value / description
        Added value: +"Value of the tag to remove (e.g. 'production')."
      • addedInput schema / properties / target / description
        Added value: +"Optional NSX Manager target from config."
      • addedInput schema / properties / vm_id / description
        Added value: +"VM external ID (fabric UUID, from list_vm_tags)."
    • Changedrun_traceflow10 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / dst_ip / description
        Added value: +"Destination IP."
      • addedInput schema / properties / dst_port / description
        Added value: +"Destination port for TCP/UDP (default 80)."
      • addedInput schema / properties / protocol / description
        Added value: +"TCP, UDP or ICMP (default TCP)."
      • addedInput schema / properties / src_ip / description
        Added value: +"Probe source IP."
      • addedInput schema / properties / src_lport_id / description
        Added value: +"Source logical port ID — the VM NIC attachment UUID. This skill does not enumerate ports; run vmware-nsx's get_segment_port_for_vm to obtain one."
      • addedInput schema / properties / src_port / description
        Added value: +"Source port for TCP/UDP (default 1234)."
      • addedInput schema / properties / target / description
        Added value: +"Optional NSX Manager target from config."
      • addedInput schema / properties / timeout_seconds / description
        Added value: +"Max seconds to wait (default 20)."
      • addedInput schema / properties / ttl / description
        Added value: +"IP TTL (default 64)."
    • Changedupdate_dfw_policy7 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / description / description
        Added value: +"New description."
      • addedInput schema / properties / display_name / description
        Added value: +"New display name."
      • addedInput schema / properties / policy_id / description
        Added value: +"ID of the policy to update."
      • addedInput schema / properties / sequence_number / description
        Added value: +"New sequence number."
      • addedInput schema / properties / stateful / description
        Added value: +"New stateful flag."
      • addedInput schema / properties / target / description
        Added value: +"Optional NSX Manager target from config."
    • Changedupdate_dfw_rule14 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / action / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "enum": [
        +      "ALLOW",
        +      "DROP",
        +      "REJECT",
        +      "JUMP_TO_APPLICATION"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / action / description
        Added value: +"New firewall action."
      • addedInput schema / properties / description / description
        Added value: +"New description."
      • addedInput schema / properties / destinations / description
        Added value: +"New destination groups."
      • addedInput schema / properties / disabled / description
        Added value: +"New disabled flag."
      • addedInput schema / properties / display_name / description
        Added value: +"New name."
      • addedInput schema / properties / logged / description
        Added value: +"New logged flag."
      • addedInput schema / properties / policy_id / description
        Added value: +"Parent policy identifier."
      • addedInput schema / properties / rule_id / description
        Added value: +"Rule identifier to update."
      • addedInput schema / properties / sequence_number / description
        Added value: +"New sequence number."
      • addedInput schema / properties / services / description
        Added value: +"New services."
      • addedInput schema / properties / sources / description
        Added value: +"New source groups."
      • addedInput schema / properties / target / description
        Added value: +"Optional NSX Manager target from config."
  2. 4 tool updatesv1.8.9
    • Changedlist_dfw_policies1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "items": {
        -        "additionalProperties": true,
        -        "type": "object"
        -      },
        -      "title": "Result",
        -      "type": "array"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "list_dfw_policiesOutput",
        -  "type": "object"
        -}New value: +null
    • Changedlist_dfw_rules1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "items": {
        -        "additionalProperties": true,
        -        "type": "object"
        -      },
        -      "title": "Result",
        -      "type": "array"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "list_dfw_rulesOutput",
        -  "type": "object"
        -}New value: +null
    • Changedlist_groups1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "items": {
        -        "additionalProperties": true,
        -        "type": "object"
        -      },
        -      "title": "Result",
        -      "type": "array"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "list_groupsOutput",
        -  "type": "object"
        -}New value: +null
    • Changedlist_idps_profiles1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "items": {
        -        "additionalProperties": true,
        -        "type": "object"
        -      },
        -      "title": "Result",
        -      "type": "array"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "list_idps_profilesOutput",
        -  "type": "object"
        -}New value: +null
  3. 1 tool updatev1.6.1
    • Changedlist_dfw_rules2 fields changed
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 50,
        +  "title": "Limit",
        +  "type": "integer"
        +}
      • addedInput schema / properties / offset
        Added value: +{
        +  "default": 0,
        +  "title": "Offset",
        +  "type": "integer"
        +}
  4. 4 tool updatesv1.5.38
    • Changedlist_dfw_policies3 fields changed
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 50,
        +  "title": "Limit",
        +  "type": "integer"
        +}
      • addedInput schema / properties / name_filter
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Name Filter"
        +}
      • addedInput schema / properties / offset
        Added value: +{
        +  "default": 0,
        +  "title": "Offset",
        +  "type": "integer"
        +}
    • Changedlist_groups3 fields changed
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 50,
        +  "title": "Limit",
        +  "type": "integer"
        +}
      • addedInput schema / properties / name_filter
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Name Filter"
        +}
      • addedInput schema / properties / offset
        Added value: +{
        +  "default": 0,
        +  "title": "Offset",
        +  "type": "integer"
        +}
    • Changedlist_idps_profiles3 fields changed
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 50,
        +  "title": "Limit",
        +  "type": "integer"
        +}
      • addedInput schema / properties / name_filter
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Name Filter"
        +}
      • addedInput schema / properties / offset
        Added value: +{
        +  "default": 0,
        +  "title": "Offset",
        +  "type": "integer"
        +}
    • Addedremove_vm_tag
  5. 20 tool updatesv1.5.29
    • Addedapply_vm_tag
    • Addedcreate_dfw_policy
    • Addedcreate_dfw_rule
    • Addedcreate_group
    • Addeddelete_dfw_policy
    • Addeddelete_dfw_rule
    • Addeddelete_group
    • Addedget_dfw_policy
    • Addedget_dfw_rule_stats
    • Addedget_group
    • Addedget_idps_status
    • Addedget_traceflow_result
    • Addedlist_dfw_policies
    • Addedlist_dfw_rules
    • Addedlist_groups
    • Addedlist_idps_profiles
    • Addedlist_vm_tags
    • Addedrun_traceflow
    • Addedupdate_dfw_policy
    • Addedupdate_dfw_rule
  6. 20 tool updatesv1.5.28
    • Removedapply_vm_tag
    • Removedcreate_dfw_policy
    • Removedcreate_dfw_rule
    • Removedcreate_group
    • Removeddelete_dfw_policy
    • Removeddelete_dfw_rule
    • Removeddelete_group
    • Removedget_dfw_policy
    • Removedget_dfw_rule_stats
    • Removedget_group
    • Removedget_idps_status
    • Removedget_traceflow_result
    • Removedlist_dfw_policies
    • Removedlist_dfw_rules
    • Removedlist_groups
    • Removedlist_idps_profiles
    • Removedlist_vm_tags
    • Removedrun_traceflow
    • Removedupdate_dfw_policy
    • Removedupdate_dfw_rule
  7. 20 tool updatesv1.3.2
    • First observedapply_vm_tag
    • First observedcreate_dfw_policy
    • First observedcreate_dfw_rule
    • First observedcreate_group
    • First observeddelete_dfw_policy
    • First observeddelete_dfw_rule
    • First observeddelete_group
    • First observedget_dfw_policy
    • First observedget_dfw_rule_stats
    • First observedget_group
    • First observedget_idps_status
    • First observedget_traceflow_result
    • First observedlist_dfw_policies
    • First observedlist_dfw_rules
    • First observedlist_groups
    • First observedlist_idps_profiles
    • First observedlist_vm_tags
    • First observedrun_traceflow
    • First observedupdate_dfw_policy
    • First observedupdate_dfw_rule

TDQS

A4.4/5.0
Disambiguation5/5

Every tool targets a distinct resource/action combination: DFW policies, DFW rules, groups, IDPS, tags, exclusions, and traceflow each have clear boundaries. Adjacent tools like list_dfw_policies vs list_dfw_rules or get_idps_status vs list_idps_profiles are easy to tell apart because the nouns and descriptions differ clearly.

Naming Consistency5/5

Tool names consistently follow snake_case verb_noun patterns with domain prefixes such as dfw_, group, idps, vm_tags, and traceflow. Minor asymmetries like get_idps_status or run_traceflow are still predictable and do not break the overall convention.

Tool Count3/5

22 tools is within the heavy 16-25 range, though the count is defensible because it spans several distinct NSX security subsystems. No tool is redundant, but the surface is broader than an essential minimal toolkit.

Completeness3/5

DFW policy and rule CRUD, VM tags, and traceflow are well covered, and list/get/create/delete patterns cover most core workflows. However, security groups have no update capability, and the IDPS surface is read-only with no profile management, leaving notable operational gaps.

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-Security'

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