vmware-nsx-security
This server provides 22 MCP tools for VMware NSX distributed-firewall microsegmentation and security operations (11 read-only, 11 write).
DFW policies: list, inspect, create, partially update, and delete policies (deletion is previewed with blast radius and refused while rules remain).
DFW rules: list rules, create/update/delete them, and inspect packet/byte hit statistics; deletions preview blast radius and require confirmation.
Security groups: list, inspect membership criteria/effective members, create, and delete groups (deletion refused while rules, scopes, or parent groups reference them).
VM tags: list a VM's tags, apply a tag, and remove a tag; changes can affect dynamic group membership.
DFW exclusions: list members excluded from the distributed firewall, so you don't falsely report them as protected.
Traceflow: run a synthetic packet trace and retrieve observations to identify where traffic is dropped, including relevant DFW rule IDs.
IDPS: list intrusion-detection/prevention profiles and check signature status plus global IDS settings.
Safety/operations: paged and clearly reported list results, dry-run-friendly writes, audit logging, input sanitization, optional HTTPS remote access with bearer-token authentication, and tool exposure limited to read-only or selected writes.
Provides tools for managing VMware NSX security, including distributed firewall (DFW) policies and rules, security groups, VM tags, Traceflow packet tracing, and Intrusion Detection and Prevention Systems (IDPS).
VMware NSX Security
For a read-only check of this skill with your model and agent host, use the shared model-fit self-test in the marketplace root.
Author: Wei Zhou, VMware by Broadcom — zhouwei008@gmail.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)
MCP uses local stdio by default. Opt-in HTTPS opens the configured listener and requires TLS plus caller authentication; it is a network service, not a local-only mode. Credential examples create owner-only placeholder files without overwriting existing files; edit secrets locally.
Quick Start
uv tool install vmware-nsx-security==1.17.2
mkdir -p ~/.vmware-nsx-security
cp config.example.yaml ~/.vmware-nsx-security/config.yaml
# Edit config.yaml with your NSX Manager host
(
umask 077
set -C # Refuse existing files; edit an existing .env locally instead
cat > ~/.vmware-nsx-security/.env <<'EOF'
VMWARE_NSX_SECURITY_NSX_PROD_PASSWORD=REPLACE_IN_LOCAL_EDITOR
EOF
)
# Before continuing, edit .env locally; never type live secrets into shell commands.
vmware-nsx-security doctorThis writes placeholders only. Enter passwords or tokens using a local editor after creation; do not paste live credentials into terminal commands, chat or commits. If the file exists, the command refuses to overwrite it; edit the existing file after checking its permissions are 600.
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-securityRelated 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==1.17.2, 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 mcpAdd 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==1.17.2 vmware-nsx-security mcp
# Legacy entry point (still works, kept for backward compatibility)
vmware-nsx-security-mcpBehind a corporate TLS proxy? uvx may fail with
invalid peer certificate: UnknownIssuer. Use the recommendedvmware-nsx-security mcpform above (no network needed), or setUV_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 ApplicationTag 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 webTrace 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 443Output 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 or gateway-firewall rules/scopes or by a parent group; group deletion aborts if the reference scan fails
Audit logging: All write ops logged to
~/.vmware-nsx-security/audit.logInput validation: IDs validated; all API text sanitized against prompt injection
Dry-run mode: All CLI write commands support
--dry-runMCP delete preview:
delete_dfw_policy,delete_dfw_ruleanddelete_grouppreview by default — withoutconfirm=Truethey returnblast_radius(what would be removed,blockers,unmeasured) and delete nothing;confirm=Trueis refused while a blocker remains or a read failedCredential 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 |
|
Read-only monitoring, alarms, events, VM info | 27 |
| |
NSX networking: segments, gateways, NAT, IPAM | 33 |
| |
Datastores, iSCSI, vSAN | 11 |
| |
Tanzu Namespaces, TKC cluster lifecycle | 20 |
| |
Aria Ops metrics, alerts, capacity planning | 28 |
|
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
SDKs: https://developer.broadcom.com/sdks — VMware NSX for Python SDK (future migration target)
REST APIs: https://developer.broadcom.com/xapis — NSX-T Data Center REST API
CLI Tools: https://developer.broadcom.com/tools — VCF PowerCLI 9.1
Remote access (HTTPS) and limiting tools
By default vmware-nsx-security mcp speaks stdio to one local client and offers every tool. Two options change that
(vmware-policy ≥ 1.21.0).
Serve over HTTPS so clients on other machines can connect. Every caller needs a bearer token:
vmware-audit token create alice # prints the token once; give it to alice
vmware-audit token list # names only
vmware-audit token revoke alice # refused from its next request, no restart
vmware-nsx-security mcp --transport https --host 0.0.0.0 --port 8443 \
--cert /etc/vmware-mcp/server.pem --key /etc/vmware-mcp/server-key.pem \
--public-name mcp.example.comConnect a client (Claude Code shown; any MCP client that supports streamable HTTP and custom headers works):
claude mcp add --transport http vmware-nsx-security https://mcp.example.com:8443/mcp \
--header "Authorization: Bearer $VMWARE_MCP_TOKEN"{
"mcpServers": {
"vmware-nsx-security": {
"type": "http",
"url": "https://mcp.example.com:8443/mcp",
"headers": { "Authorization": "Bearer ${VMWARE_MCP_TOKEN}" }
}
}
}The server will not start without a token, refuses Host/Origin values outside
--public-name, and checks before it binds that unauthenticated requests get 401. Use a certificate your clients trust for those names.Behind a TLS-terminating reverse proxy on the same machine use
--transport http --host 127.0.0.1 --public-name mcp.example.comand pass theAuthorizationheader through.Behind a load balancer or gateway on another machine, keep
--transport https(a self-signed certificate is fine), list in--public-namethe host name the balancer sends asHost, and have it forwardAuthorization. Its health probe can useGET /healthz, which needs no token and returns only{"status": "ok"}(vmware-policy ≥ 1.23.0).Send
traceparentorX-Request-IDwith each request to have it stored on the audit row;vmware-audit log --correlation-id IDthen finds the calls behind one platform request.The audit log records each caller as
token:<name>. Calls run side by side, with or without a target: each target keeps up toVMWARE_MCP_POOL_SIZEsessions (default 2), and each session is a login on the target. A call that finds them all busy waits at most 300 s for one.Everyone who can reach the endpoint acts with this server's account. Tokens identify callers; they grant nothing on the platform. Run one endpoint per privilege level.
Several people or roles on one endpoint: run
vmware-audit roles enableonce, then give each token a role (vmware-audit token create NAME --role reader, or a role inroles.yamlnaming tools and targets; vmware-policy ≥ 1.24.0). A role limits what the token may call on this endpoint; it cannot grant more than the account has. See vmware-policy's README, "Roles for network callers".
Offer only read tools, plus the writes you choose:
vmware-nsx-security mcp --expose read --allow-write apply_vm_tag
# or: VMWARE_NSX_SECURITY_MCP_EXPOSE=read VMWARE_NSX_SECURITY_MCP_ALLOW_WRITE=apply_vm_tag vmware-nsx-security mcpTools not offered do not appear in the client's tool list. A bad value or an unknown write tool stops the server (exit 2). This limits what clients are offered; it is not authorization, so the account itself should be least-privilege.
Details: skills/vmware-nsx-security/references/setup-guide.md ("Serving MCP over HTTPS", "Limiting which tools are offered").
System proxy bypass
The NSX Manager REST client honors the operating system proxy bypass list for the configured origin.
TLS verification still follows verify_ssl, and CA environment settings such as SSL_CERT_FILE remain active.
Other origins retain their normal proxy routing.
License
MIT
Available Tools
22 toolsapply_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.
Inputs: vm_id (required), tag_scope (required), tag_value (required), target.
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.
Inputs: policy_id (required), display_name (required), target, category, +3 more.
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.
Inputs: rule_id (required), policy_id (required), display_name (required), scope, +11 more.
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.
Inputs: group_id (required), display_name (required), target, tag_scope, +4 more.
delete_dfw_policyADestructive
[WRITE] Delete a DFW security policy; refuses while it still holds rules.
Without confirm=True this only previews: it returns blast_radius (the policy's name, category, sequence_number, rule_count and rule_ids, blockers, unmeasured) and deletes nothing. Show that to the user and get their decision. Do not set confirm=True on your own because the user asked to delete earlier: they have not seen the blast radius yet.
confirm=True refuses, deleting nothing, while the policy still holds rules — list them with list_dfw_rules and clear each with delete_dfw_rule first — or when its rules could not be read. Returns {"action": "preview" | "deleted", "blast_radius": ...}, else {"error", "hint", "blast_radius"?}.
Inputs: policy_id (required), target, confirm.
delete_dfw_ruleADestructive
[WRITE] Permanently delete one DFW rule from its parent security policy.
Irreversible and immediate: traffic it matched falls through to lower-priority rules or the policy default. Without confirm=True this only previews: it returns blast_radius (the parent policy, the rule's action, sources, destinations, services, scope, direction, disabled flag, blockers, unmeasured) and deletes nothing. Show that to the user and get their decision. Do not set confirm=True on your own because the user asked to delete earlier: they have not seen the blast radius yet. Check recent hits with get_dfw_rule_stats first; prefer update_dfw_rule with disabled=True when you may need the rule back. A rule_id not in the policy is an error, and confirm=True refuses when the rules could not be read. To remove a whole policy use delete_dfw_policy — it refuses while rules remain. Returns {"action": "preview" | "deleted", "blast_radius": ...}, else {"error", "hint", "blast_radius"?}.
Inputs: rule_id (required), policy_id (required), target, confirm.
delete_groupADestructive
[WRITE] Delete an NSX security group; refuses while anything references it.
Use it once get_group shows the group is unwanted. Without confirm=True this only previews: it returns blast_radius (the group's name, path, expression_count, reference_count and references, blockers, unmeasured) and deletes nothing. Show that to the user and get their decision. Do not set confirm=True on your own because the user asked to delete earlier: they have not seen the blast radius yet.
confirm=True refuses if anything still references the group (parent groups from NSX's group-associations API; DFW and gateway-firewall rules and policy applied-to, by walking the rules), 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. Returns {"action": "preview" | "deleted", "blast_radius": ...}, else {"error", "hint", "blast_radius"?}.
Inputs: group_id (required), target, confirm.
get_dfw_policyARead-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.
Inputs: policy_id (required), target.
get_dfw_rule_statsARead-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.
Inputs: rule_id (required), policy_id (required), target.
get_groupARead-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.
Inputs: group_id (required), target.
get_idps_statusARead-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.
Inputs: target.
get_traceflow_resultARead-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.
Inputs: traceflow_id (required), target.
list_dfw_exclusionsARead-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.
Inputs: limit, offset, target.
list_dfw_policiesARead-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.
Inputs: limit, offset, target, name_filter.
list_dfw_rulesARead-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.
Inputs: policy_id (required), limit, offset, target.
list_groupsARead-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.
Inputs: limit, offset, target, name_filter.
list_idps_profilesARead-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.
Inputs: limit, offset, target, name_filter.
list_vm_tagsARead-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.
Inputs: vm_display_name (required), target.
remove_vm_tagADestructiveIdempotent
[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.
Inputs: vm_id (required), tag_scope (required), tag_value (required), target.
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.
Inputs: dst_ip (required), src_ip (required), src_lport_id (required), ttl, +5 more.
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.
Inputs: policy_id (required), target, stateful, description, +2 more.
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.
Inputs: rule_id (required), policy_id (required), action, logged, +8 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 22 tools
Each tool targets a distinct resource-action pair: DFW policies, DFW rules, groups, VM tags, IDPS, traceflow, and exclusions. The descriptions cross-reference each other and clarify edge cases, so there is no real ambiguity between similarly named tools.
All tools follow a uniform lowercase snake_case verb_noun pattern: list_/get_ for reads, create_/update_/delete_ for writes, plus apply_/remove_ for VM tags and run_/get_ for traceflow. The naming is predictable and consistent across every subdomain.
22 tools is above the well-scoped 3-15 range and feels heavy even though each tool is individually distinct. The server covers six related subdomains, which justifies some breadth, but it is more than 'slightly over' and lands in the borderline zone.
DFW policy/rule lifecycle and VM tag operations are well covered, including create/get/list/update/delete for policies and rules. However, group criteria cannot be updated, IDPS profiles have no create/update/delete, and the exclusion list is read-only, leaving notable management gaps.
Maintenance
Related MCP Connectors
Compliance frameworks (SOC 2, ISO 27001, CMMC, NIST, more) delivered to AI agents as MCP tools.
AI-security knowledge as MCP: standards-mapped tools (OWASP, NIST, MITRE) for AI agents.
MCP gateway: one connection for your AI apps, with tool policies, PII redaction and audit logs.
MCP gateway with runtime security policy, tool-call-level control, and audit of agent actions.
Related MCP Servers
- AlicenseAqualityBmaintenanceAI-powered VMware NSX networking management. Configure segments, gateways, NAT, routing, and IPAM via natural language with 31 MCP tools.33215 PyPI5MIT
- AlicenseAqualityBmaintenanceAI-powered VMware vSphere with Tanzu (VKS) management. Create and manage Supervisor Namespaces and TanzuKubernetesClusters with 20 MCP tools.25690 PyPI5MIT
- AlicenseAqualityBmaintenanceAI-powered VMware Aria Operations monitoring and capacity planning. Query metrics, manage alerts, detect anomalies, and plan capacity with 18 MCP tools.46344 PyPI3MIT
- AlicenseAqualityBmaintenanceVMware AVI Load Balancer (NSX Advanced Load Balancer) management plus AKO Kubernetes integration. 29 MCP tools across virtual services, pools, analytics, and AKO lifecycle, with double-confirmation gates and audit logging for destructive operations.28207 PyPI2MIT