mcpField
V
VMware Pilot

VMware Pilot

Local
github.com/zw008Cloud & Infra4Updated 5d ago

About VMware Pilot

VMware Pilot orchestrates workflows across VMware MCP skills for operations teams that need staged execution and human approvals. It provides a state machine, audit records, explicit rollback, and both built-in templates and custom steps.

Key features

  1. 01Design, review, and run multi-step workflows
  2. 02Set approval gates between workflow steps
  3. 03Inspect status, diff reports, and audit records
  4. 04Use built-in templates or custom step lists
  5. 05Explicitly roll back recorded successful steps

Use cases

  1. 01Run VMware change procedures after approval
  2. 02Coordinate alert investigations and incident response
  3. 03Use templates for deployments, expansions, or baseline audits

MCP support

Exposes 13 MCP tools for discovering skills, designing and managing workflows, running steps, approvals, and rollback. By default, an agent performs pending steps; with dispatch enabled, Pilot can execute them through the corresponding skills' MCP servers.

Configuration

Local server config is the same for every client. Copy it into your client’s MCP config file.

mcp.json · Universal config
{
"mcpServers": {
"zw008-vmware-pilot": {
"command": "uvx",
"args": [
"vmware-pilot"
]
}
}
}
Run commanduvx vmware-pilot

Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.

Packages
pypivmware-pilot1.8.7

Tools

No tool list yet

Local servers expose tools only once running on your machine, and the maintainer has not provided a tool list.

Details

From the project README

VMware Pilot

Author: Wei Zhou, VMware by Broadcom — [email protected] 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:

SkillScopeInstall
vmware-aiopsVM lifecycle, deployment, guest ops, clusteruv tool install vmware-aiops
vmware-monitorRead-only: inventory, health, alarms, eventsuv tool install vmware-monitor
vmware-storageDatastores, iSCSI, vSAN managementuv tool install vmware-storage
vmware-vksTanzu Namespaces, TKC cluster lifecycleuv tool install vmware-vks
vmware-nsxNSX networking: segments, gateways, NATuv tool install vmware-nsx-mgmt
vmware-nsx-securityDFW firewall rules, security groupsuv tool install vmware-nsx-security
vmware-ariaAria Ops: metrics, alerts, capacityuv tool install vmware-aria
vmware-aviAVI load balancing, pool management, AKO K8s opsuv 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)

ToolDescription
get_skill_catalogList all available skills and tools for workflow design
list_workflowsList built-in and custom templates
review_workflowSanity-check a planned workflow before execution
design_workflowNatural language goal → draft workflow
update_draftEdit draft workflow steps
confirm_draftFinalize draft → ready to execute
create_workflow_from_templateCreate and save a workflow from a template (not a dry run), returns workflow_id
create_workflowCreate custom workflow from step list (refused if a destructive step has no approval gate before it)
run_workflowExecute workflow, pauses at approval gates
get_workflow_statusQuery state + diff report + audit log
approveHuman approval, continue execution. Refused while steps before the gate are not_executed, until acknowledge_not_executed=True says you ran them
rollbackExplicit, best-effort undo of steps pilot recorded as succeeded — never automatic. Previews (blast_radius) unless confirm=True
cancel_workflowCancel 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 needs snapshot_name (the snapshot to clone from), resizes staging while it is powered off, and has 8 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.

TemplateStepsApprovalSkills Used
clone_and_test7-8Yesaiops, monitor
incident_response4Yesmonitor, aiops
investigate_alert4 (8 with deep_dive)Yesmonitor, aria
plan_and_approve3Yesaiops
compliance_scan1-3Nomonitor, aria
network_segment_setup3-6Yesnsx, nsx-security
vks_cluster_deploy5Yesvks
rolling_restart2+3nYesaiops, monitor
capacity_expansion5Yesaria, aiops, monitor
disaster_recovery5Yesaiops, monitor, nsx
patch_deployment1+3nYesaiops, monitor
storage_expansion6Yesstorage
baseline_capture1-5Nomonitor, nsx, storage
baseline_audit1-5Nomonitor, nsx, storage, aria
baseline_remediate3+nYesvaries

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, but uvx re-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; set UV_NATIVE_TLS=true if you must use uvx.

Pilot runs the steps itself: --dispatch

By default pilot executes nothing: run_workflow returns each step in pending_dispatch and your agent performs it. Add --dispatch (or set VMWARE_PILOT_DISPATCH=stdio) and pilot runs each step itself, in that skill's own MCP server (vmware-<skill>-mcp, which must be installed), so the skill's policy rules, confirmation gate and audit apply as usual. Nothing after an approval gate runs before approve, and workflows reach completed.

{"mcpServers": {"vmware-pilot": {"command": "vmware-pilot", "args": ["mcp", "--dispatch"]}}}

stdio only: pilot refuses to start with --dispatch and --transport https/http (the skill servers it starts would have no caller identity, so roles could not apply). A step that takes longer than VMWARE_PILOT_DISPATCH_TIMEOUT seconds (default 1800) is recorded interrupted — its effect is unknown — and rollback waits for you to check it. run_workflow and approve take as long as the steps they run: set your MCP client's tool timeout above your longest step. If a call does time out, Pilot carries on and answers nothing else until the step ends; then get_workflow_status shows the outcome. Never perform those steps yourself.

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.com and pass the Authorization header through.
  • Behind a load balancer or gateway on another machine, keep --transport https (a self-signed certificate is fine), list in --public-name the host name the balancer sends as Host, and have it forward Authorization. Its health probe can use GET /healthz, which needs no token and returns only {"status": "ok"} (vmware-policy ≥ 1.23.0).
  • Send traceparent or X-Request-ID with each request to have it stored on the audit row; vmware-audit log --correlation-id ID then 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 enable once, then give each token a role (vmware-audit token create NAME --role reader, or a role in roles.yaml naming 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

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.