VMware Pilot
Author: Wei Zhou, VMware by Broadcom — wei-wz.zhou@broadcom.com This is a community-driven project by a VMware engineer, not an official VMware product. For official VMware developer tools see developer.broadcom.com.
English | 中文
Multi-step workflow orchestration for VMware MCP skills — state machine, approval gates, audit trail.
Companion skills handle everything else:
Skill Scope Install vmware-aiops VM lifecycle, deployment, guest ops, cluster uv tool install vmware-aiopsvmware-monitor Read-only: inventory, health, alarms, events uv tool install vmware-monitorvmware-storage Datastores, iSCSI, vSAN management uv tool install vmware-storagevmware-vks Tanzu Namespaces, TKC cluster lifecycle uv tool install vmware-vksvmware-nsx NSX networking: segments, gateways, NAT uv tool install vmware-nsx-mgmtvmware-nsx-security DFW firewall rules, security groups uv tool install vmware-nsx-securityvmware-aria Aria Ops: metrics, alerts, capacity uv tool install vmware-ariavmware-avi AVI load balancing, pool management, AKO K8s ops uv tool install vmware-avi
Install
uv tool install vmware-pilot
vmware-pilot mcp # start the MCP server (stdio)
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-pilot
MCP Tools (13 — 4 read, 9 write)
| Tool | Description |
|---|---|
get_skill_catalog |
List all available skills and tools for workflow design |
list_workflows |
List built-in and custom templates |
review_workflow |
Sanity-check a planned workflow before execution |
design_workflow |
Natural language goal → draft workflow |
update_draft |
Edit draft workflow steps |
confirm_draft |
Finalize draft → ready to execute |
create_workflow_from_template |
Create and save a workflow from a template (not a dry run), returns workflow_id |
create_workflow |
Create custom workflow from step list (refused if a destructive step has no approval gate before it) |
run_workflow |
Execute workflow, pauses at approval gates |
get_workflow_status |
Query state + diff report + audit log |
approve |
Human approval, continue execution |
rollback |
Explicit, best-effort undo of steps pilot recorded as succeeded — never automatic. Previews (blast_radius) unless confirm=True |
cancel_workflow |
Cancel a workflow — move it to the terminal CANCELLED state. Previews (blast_radius) unless confirm=True |
Built-in Templates (15)
n is the number of VMs (or drift items); ranges depend on which optional parameters are set.
clone_and_test has 7 steps when change_spec is a guest command (an extra gate before it runs
in staging). investigate_alert's approvals are synthesis checkpoints; its steps are all reads.
See skills/vmware-pilot/references/templates.md for parameters and steps.
| Template | Steps | Approval | Skills Used |
|---|---|---|---|
clone_and_test |
6-7 | Yes | aiops, monitor |
incident_response |
4 | Yes | monitor, aiops |
investigate_alert |
4 (8 with deep_dive) |
Yes | monitor, aria |
plan_and_approve |
3 | Yes | aiops |
compliance_scan |
1-3 | No | monitor, aria |
network_segment_setup |
3-6 | Yes | nsx, nsx-security |
vks_cluster_deploy |
5 | Yes | vks |
rolling_restart |
2+3n | Yes | aiops, monitor |
capacity_expansion |
5 | Yes | aria, aiops, monitor |
disaster_recovery |
5 | Yes | aiops, monitor, nsx |
patch_deployment |
1+3n | Yes | aiops, monitor |
storage_expansion |
6 | Yes | storage |
baseline_capture |
1-5 | No | monitor, nsx, storage |
baseline_audit |
1-5 | No | monitor, nsx, storage, aria |
baseline_remediate |
3+n | Yes | varies |
Upgrading to 2.0
2.0 renames one MCP tool: plan_workflow → create_workflow_from_template. It always created and saved a
workflow from a template (it is a write, not a dry run); the new name says so and sets it apart from
create_workflow, which saves your own step list. Parameters and results are unchanged, and so are the CLI
commands. The skill catalog also follows vmware-vks's renames (get_supervisor_kubeconfig →
issue_supervisor_kubeconfig, get_tkc_kubeconfig → issue_tkc_kubeconfig). Workflows saved with the old
names are translated when loaded. If an agent prompt, script or ~/.vmware/rules.yaml names plan_workflow,
update it. Requires vmware-policy ≥ 1.19.0. Details: RELEASE_NOTES.md.
MCP Configuration
{
"mcpServers": {
"vmware-pilot": {
"command": "vmware-pilot",
"args": ["mcp"]
}
}
}
Fallback:
{"command": "uvx", "args": ["--from", "vmware-pilot", "vmware-pilot-mcp"]}still works, butuvxre-resolves against PyPI on every start and fails behind a TLS-inspecting corporate proxy (invalid peer certificate: UnknownIssuer). The installed entry point above touches the network zero times; setUV_NATIVE_TLS=trueif you must useuvx.
Remote access (HTTPS) and limiting tools
By default vmware-pilot 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-pilot 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.com
Connect a client (Claude Code shown; any MCP client that supports streamable HTTP and custom headers works):
claude mcp add --transport http vmware-pilot https://mcp.example.com:8443/mcp \
--header "Authorization: Bearer $VMWARE_MCP_TOKEN"
{
"mcpServers": {
"vmware-pilot": {
"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 naming different targets run in parallel; calls that name no target run one at a time, so name the target when several people share a server. - 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-pilot mcp --expose read --allow-write cancel_workflow
# or: VMWARE_PILOT_MCP_EXPOSE=read VMWARE_PILOT_MCP_ALLOW_WRITE=cancel_workflow vmware-pilot mcp
Tools 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-pilot/references/setup-guide.md ("Serving MCP over HTTPS", "Limiting which tools are offered").
License
MIT
Metadata
Release files for vmware-pilot 2.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| vmware_pilot-2.3.0.tar.gz | 321.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| vmware_pilot-2.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 406.2 kB
Release files / vmware_pilot-2.3.0.tar.gz
| Download URL | vmware_pilot-2.3.0.tar.gz |
|---|---|
| Size | 321.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0cceeb9d60c3a2ba6e1516d155d27952147ad9a1a4d6bded23ff4f471fb6f6fc
|
|
BLAKE2b-256 checksum How to use checksums |
126f9af5c329ab99adee93bf0b820daf1219b491c5f5b5be5393738fc46e0d53
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.12
|
Release files / vmware_pilot-2.3.0-py3-none-any.whl
| Download URL | vmware_pilot-2.3.0-py3-none-any.whl |
|---|---|
| Size | 84.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
aee0407ce9374b6008e6d8d45d55921a6c40824ef3ecc9b1d2cd17529a30b201
|
|
BLAKE2b-256 checksum How to use checksums |
1cced6ce7e164108a12c2cb5ce74be98c97b9c6880459b69b66e4e048be9b677
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.12
|