Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

VMware Pilot

PYPI · VMWARE-PILOT · SCANNED SEP 20

Multi-step workflow orchestration for VMware MCP skills with approval gates and rollback.

Available components

+3 this week 62 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security50
  • Malware scan not yet available for this package.Unverified
  • No known CVEs affecting this package version or its production dependencies.Pass
  • Runs hatchling.build at install time, a recognised native-build step with no shell scripting around it. View diagnostics → Pass
  • 3 of 40 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency35
Schema Quality & AI Usability66
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 3540 tokens (~272/item across 13 items; 13 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management70
  • Stability observed for 21 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 13 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 14 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

How do I install the VMware Pilot MCP server?

VMware Pilot runs locally as a PyPI package, launched with uvx vmware-pilot. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

pypi · vmware-pilot

# add to Claude Code
claude mcp add vmware-skills-vmware-pilot -- uvx vmware-pilot
// .cursor/mcp.json
{
  "mcpServers": {
    "vmware-skills-vmware-pilot": {
      "command": "uvx",
      "args": [
        "vmware-pilot"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "vmware-skills-vmware-pilot": {
      "command": "uvx",
      "args": [
        "vmware-pilot"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add vmware-skills-vmware-pilot -- uvx vmware-pilot
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "vmware-skills-vmware-pilot": {
      "type": "local",
      "command": [
        "uvx",
        "vmware-pilot"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add vmware-skills-vmware-pilot --command uvx --arg vmware-pilot
# ~/.hermes/config.yaml
mcp_servers:
  vmware-skills-vmware-pilot:
    command: "uvx"
    args: ["vmware-pilot"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "vmware-skills-vmware-pilot": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "vmware-pilot"
      ]
    }
  }
}
# add to Vellum
assistant mcp add vmware-skills-vmware-pilot -t stdio -c uvx -a vmware-pilot
// mcp.json
{
  "mcpServers": {
    "vmware-skills-vmware-pilot": {
      "command": "uvx",
      "args": [
        "vmware-pilot"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 20 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 67 to 70. That category is still filling its 30-day observation window: 20 days of observed history at the previous scan, 21 at this one. The score rises as the window fills, whether or not the server changes.

  • 19 Sept 26 0
    • Schema quality: 228 → 272 functional
    • Package version: 1.11.1 → 1.12.0 functional
  • 17 Sept 26 −14
    • Malware scan: pass → unverified security
  • 16 Sept 26 +15
    • Malware scan: unverified → pass security
  • 15 Sept 26 +1
    • Stability: 0.50 → unverified security
    • Tool safety: pass → unverified security
    • Malware scan: unverified → pass security
    • Capabilities: pass → unverified functional
    • Tool coverage: 100 → unverified functional
    • Schema quality: Schema quality not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet. functional
    • Package version: 1.10.1 → 1.11.1 functional
    • Package version: 1.10.1 → 1.11.0 functional
  • 14 Sept 26 0
    • Malware scan: unverified → pass security
    • Package version: 1.10.0 → 1.10.1 functional
  • 13 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 43 to 47. That category is still filling its 30-day observation window: 13 days of observed history at the previous scan, 14 at this one. The score rises as the window fills, whether or not the server changes.

  • 12 Sept 26 0
    • Schema quality: 198 → 228 functional
    • Package version: 1.8.12 → 1.10.0 functional
    • Package version: 1.8.12 → 1.9.0 functional
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 20 Sept 2026 · Analysed pypi/vmware-pilot@1.12.0

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem pypi

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
build_backend allowlisted hatchling.build

Background: Why install scripts are a supply-chain risk →

Dependencies 40 packages
Packages resolved 40
Stale 3
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 13 exposed · ~3,460 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
approve ~165

[WRITE] Approve a workflow that is waiting for human confirmation. Use this only after showing the user the pending step and getting explicit human consent; use cancel_workflow instead when the approval is rejected. Only works when workflow state is 'awaiting_approval'. After approval, execution continues to the next steps. Note: this server has no dispatcher — after approval, remaining steps are recorded as 'not_executed' and the result carries outcome='dispatch_required' with a 'pending_dispatch' list for the calling agent to perform (see run_workflow). Returns: Updated workflow state after resuming.

NameTypeReqDescription
approverstringName of the person approving (for audit trail).
workflow_idstringyesThe workflow ID to approve.

No output schema declared.

No examples provided.

cancel_workflow ~453

[WRITE] Cancel a workflow — move it to the terminal CANCELLED state. Use this when an approval is REJECTED, a review flags the plan as unsafe, or an operator decides the workflow must never run. A cancelled workflow is dead: run_workflow and approve refuse to execute it. Without this, an approval-rejected PENDING workflow could still be picked up and run. Without confirm=True this only previews: it returns blast_radius — the workflow's id, type and state, the executed steps that stay applied (left_in_place: cancelling part-way leaves a half-applied change), the steps that would be skipped (would_skip), steps with unknown effects, and blockers — and changes nothing. Show that to the user and get their explicit decision. Do not set confirm=True on your own because the user asked to cancel earlier — the user has not seen the preview yet. Cancel only stops FUTURE steps. It does NOT undo already-completed steps — use rollback() to reverse those. Refused with confirm=True: an already completed/failed/cancelled workflow, a step whose status Pilot does not recognise, a workflow record that cannot be read, and — unless acknowledge_unknown_effects=True — a step left 'running' or 'interrupted' (listed in unknown_effects). The cancellation is written to the workflow audit log. Returns: Preview: {"action": "preview", "blast_radius", "hint"}. Acting: the workflow state (state='cancelled', outcome='cancelled', action='cancelled') with blast_radius, or an error if refused.

NameTypeReqDescription
acknowledge_unknown_effectsbooleanSet True only after the user has checked, in the target system, whether each unknown_effects step took effect. Covers only those steps; every other refusal still applies.
confirmbooleanFalse (default) returns the blast radius and changes nothing. True applies it.
reasonstringOptional human-readable reason (e.g. "approval rejected by on-call"), recorded in the audit log.
workflow_idstringyesThe workflow ID to cancel.

No output schema declared.

No examples provided.

confirm_draft ~182

[WRITE] Confirm a draft workflow — changes state from DRAFT to PENDING. Use this once the user has approved the draft's steps; call update_draft instead if anything still needs changing. After confirmation, the workflow can be executed via run_workflow(). Optionally saves as a YAML template for future reuse. Refused — the draft stays a draft and nothing is saved — while any destructive or unclassifiable step, or any step passing confirm=True, lacks a require_approval gate before it. Returns: Confirmed workflow summary. Call run_workflow() to execute.

NameTypeReqDescription
save_as_templatebooleanIf True, save to ~/.vmware/workflows/ for reuse. Refused when the draft's name is a built-in template's name.
workflow_idstringyesThe draft workflow ID to confirm.

No output schema declared.

No examples provided.

create_workflow ~298

[WRITE] Create a custom workflow dynamically from a step list. Use this when you already know the steps and no built-in template matches; prefer plan_workflow when one does, and design_workflow when the user gave a goal rather than steps. Call get_skill_catalog first for the skill and tool names a step may target. Each step dict must have: action, skill, tool, params. Optional: rollback_tool, rollback_params. action="require_approval" (skill "pilot", tool "approve") inserts a human approval gate. A workflow whose destructive or unclassifiable step, or a step passing confirm=True, has no gate before it is REFUSED — nothing is saved — and the error names the step and the gate to insert. Returns: dict with workflow_id and plan summary. Next call review_workflow to check the plan, then run_workflow to execute. Nothing is undone automatically on failure; see rollback.

NameTypeReqDescription
descriptionstringyesHuman-readable description.
namestringyesWorkflow name (used as workflow_type).
save_as_templatebooleanIf True, save as YAML to ~/.vmware/workflows/ for reuse. Refused when name is a built-in template's name, since the saved template would replace the built-in.
stepsarrayyesList of step dicts, each with action/skill/tool/params.

No output schema declared.

No examples provided.

design_workflow ~195

[WRITE] Start designing a workflow from a natural language description. Call this when the user describes a complex operation and you need to design a multi-step workflow. Returns a DRAFT workflow with proposed steps for the user to review and edit before execution. Design flow: design_workflow → update_draft (add steps, then iterate on user feedback) → confirm_draft (state becomes PENDING) → run_workflow. Use get_skill_catalog() first to see which tools the steps may target. Returns: dict with workflow_id (state=DRAFT), proposed steps placeholder, and instructions for the AI to fill in steps via update_draft.

NameTypeReqDescription
constraintsstringOptional constraints (e.g. "must have approval before any destructive step", "use NSX for networking", "target is vcenter-prod").
goalstringyesNatural language description of what the user wants to accomplish.

No output schema declared.

No examples provided.

get_skill_catalog ~125

[READ] Get the complete catalog of available skills and tools for workflow design. Use this to understand what building blocks are available when designing a custom workflow, then feed the skill and tool names into create_workflow or update_draft steps. Note this is a static curated catalog, not a live query of each skill's registry, so it may lag a skill's actual tool list; pilot cannot call these tools itself — the calling agent does. Returns: dict mapping skill name → {description, tools: {tool_name: {risk, desc}}}.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_workflow_status ~113

[READ] Get current workflow state, diff report, and audit log. Use this to poll a workflow after run_workflow and to find out why one stopped: outcome='dispatch_required' means you must perform the pending steps yourself, 'awaiting_approval' means call approve. Returns a point-in-time snapshot and does not advance the workflow. Returns: Full workflow state including steps, audit log, and diff report.

NameTypeReqDescription
workflow_idstringyesThe workflow ID to query.

No output schema declared.

No examples provided.

list_workflows ~131

[READ] List all available workflow templates (built-in + custom). Use this first to see whether a template already covers the goal, then pass its name to plan_workflow; if none fit, use create_workflow instead. Built-in templates are always available. Custom templates are loaded from ~/.vmware/workflows/*.yaml — drop a YAML file there to add your own workflows. Returns: dict with builtin and custom workflow lists, each with name, description, steps count, plus active_workflows — the IDs of in-flight runs to pass to get_workflow_status.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

plan_workflow ~200

[WRITE] Create an execution plan for a multi-step workflow. Use this when the goal matches one of the built-in types below; use create_workflow instead when none of them fit. A custom YAML template whose destructive or unclassifiable step (or step passing confirm=True) has no require_approval gate before it is refused, naming the step and the file to fix. Available workflow types: - clone_and_test: Clone VM → apply changes → monitor → approve → commit - incident_response: Diagnose alert → collect info → approve → remediate - plan_and_approve: Wrap aiops batch operations with approval gate - compliance_scan: Read-only health/capacity/anomaly check (no approval) Returns: dict with workflow_id, steps summary, and plan details.

NameTypeReqDescription
paramsobjectyesWorkflow-specific parameters.
workflow_typestringyesOne of the available workflow types.

No output schema declared.

No examples provided.

review_workflow ~494

[READ] Sanity-check a planned workflow before execution. Performs structural validation only — does NOT call into other skills. Catches the common authoring errors before they hit production: - Delete-then-use: a step deletes resource X, a later step references X - Missing required params: a step has empty params or placeholder values - Cross-skill order issues: surfacing the cross-skill dispatch sequence - Risk profile: count of destructive / write / read-only / unclassified steps - Approval coverage: is every destructive OR unclassifiable step gated behind a preceding require_approval? Each step is placed in a tier from the tool's entry in ``get_skill_catalog`` first, then from name patterns. A step that matches neither is reported as ``ungated_unclassified`` rather than assumed safe: pilot dispatches nothing itself and cannot inspect a sibling skill's annotations, so "this tool is unknown to me" is the honest finding, and it needs the same gate a known destructive step does. The remedy is in the message — add the tool to SKILL_CATALOG with the risk its own skill declares, or add a gate. Medium-risk writes (create / scale / enable) are classified and counted but not gated: the family gates destructive work, and several built-in templates deliberately create in staging *before* asking for approval. Returns: Dict with keys: - ``verdict``: ``"approved"`` if no structural issues, otherwise ``"needs_revision"`` - ``findings``: list of {severity, kind, message, step_index}. Kinds ``ungated_destructive``, ``ungated_unclassified`` and ``destructive_in_parallel_group`` are what ``run_workflow`` refuses on; ``force=True`` overrides that only for a built-in template, never for a custom workflow's missing approval gate. - ``summary``: counts — total/destructive/write/read_only/approval_gates, parallel_groups, est_duration_min, plus ``classified_steps`` and ``unclassified_steps`` so an "…

NameTypeReqDescription
workflow_idstringyesThe workflow ID returned by ``plan_workflow``.

No output schema declared.

No examples provided.

rollback ~543

[WRITE] Abort a workflow and rollback completed steps in reverse order. Without confirm=True this only previews: it returns blast_radius — the workflow's id, type and state, the executed steps whose rollback_tool would run with its rollback_params, secrets redacted (would_roll_back — these often carry confirm=True, and this call's confirm=True is the decision to run them), the executed steps that have none and stay applied (left_in_place), steps you performed from pending_dispatch that Pilot will not reverse (not_reversed_by_pilot), steps with unknown effects, and blockers — and changes nothing. Show that to the user and get their explicit decision. Do not set confirm=True on your own because the user asked for a rollback earlier — the user has not seen the preview yet. Nothing rolls back automatically: a failed step leaves the workflow 'failed' and stops. This tool is the explicit, best-effort undo, and it only reverses steps pilot itself recorded as 'success' — which, on this server (no dispatcher), are approval gates only. Steps YOU performed from pending_dispatch are still 'not_executed' here, so to undo them call each one's rollback_tool with its rollback_params yourself, last step first. Embedders that pass a dispatcher to WorkflowExecutor get those calls made for them. Steps without a rollback_tool are skipped; a failed undo does not stop the rest. The workflow state is set to 'failed' afterwards. Refused with confirm=True: a workflow in draft, completed, rolling_back or cancelled state, a step whose status Pilot does not recognise, a workflow record that cannot be read, and — unless acknowledge_unknown_effects=True — a step left 'running' or 'interrupted' by a Pilot process that stopped mid-dispatch (listed in unknown_effects). Returns: Preview: {"action": "preview", "blast_radius", "hint"}. Acting: the workflow state with "action": "rolled_back", rollback_results for each step pilot recorded as succeeded, and blast_radius. Check get_wo…

NameTypeReqDescription
acknowledge_unknown_effectsbooleanSet True only after the user has checked, in the target system, whether each unknown_effects step took effect. Covers only those steps; every other refusal still applies.
confirmbooleanFalse (default) returns the blast radius and changes nothing. True applies it.
workflow_idstringyesThe workflow ID to rollback.

No output schema declared.

No examples provided.

run_workflow ~353

[WRITE] Advance a planned workflow. Pauses at approval gates. IMPORTANT — this MCP server has no dispatcher and cannot call other skills' MCP tools itself. Steps are recorded as 'not_executed' and the run finishes with outcome='dispatch_required' (NOT 'completed'), returning each pending step's skill/tool/params. YOU (the calling agent) must then perform those skill/tool calls in order. A workflow only reaches 'completed' when every step genuinely executed via a real dispatcher (embedders supplying one to WorkflowExecutor). Safety: the workflow is structurally reviewed before each run. Runs are REFUSED if review finds ungated destructive or unclassifiable steps, or destructive steps inside a parallel group. For a built-in template, force=True overrides that (forced runs are written to the workflow audit log). For a custom workflow (create_workflow, design_workflow, or a YAML template) an ungated step is refused even with force=True: add a require_approval step before it instead. When an approval gate is reached, the workflow pauses with state 'awaiting_approval'. Call approve() to continue. Returns: Current workflow state with 'outcome' (completed | awaiting_approval | dispatch_required | failed) and, when dispatch is required, a 'pending_dispatch' list of steps for the agent to perform.

NameTypeReqDescription
forcebooleanBypass blocking review findings on a built-in template. Use only with explicit human consent; the bypass is audited. Has no effect on a custom workflow's missing approval gate.
workflow_idstringyesThe workflow ID from plan_workflow.

No output schema declared.

No examples provided.

update_draft ~208

[WRITE] Update a DRAFT workflow's name, description, or steps. Call this after design_workflow() to fill in the actual steps, or to modify steps based on user feedback. Use it only while the workflow is still DRAFT — after confirm_draft the steps are frozen and you must create_workflow a new one instead. Each step dict: {action, skill, tool, params, rollback_tool?, rollback_params?} Use action="require_approval" for approval gates. A draft may be saved without them while it is being designed; the result lists every step that still needs one, and confirm_draft refuses until none are left. Returns: Updated workflow summary for user review.

NameTypeReqDescription
descriptionstringHuman-readable description.
namestringWorkflow name (optional, updates workflow_type).
stepsComplete list of steps (replaces all existing steps).
workflow_idstringyesThe draft workflow ID.

No output schema declared.

No examples provided.

Common questions

What is the VMware Pilot MCP server?

VMware Pilot is an MCP server listed in the public MCP registry as io.github.vmware-skills/vmware-pilot. Multi-step workflow orchestration for VMware MCP skills with approval gates and rollback. This page covers its PyPI package (vmware-pilot).

Is the VMware Pilot MCP server safe to use?

VMware Pilot scores 62 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the VMware Pilot MCP server expose?

VMware Pilot exposes 13 tools: create_workflow, design_workflow, update_draft, confirm_draft, plan_workflow, and 8 more. Their descriptions and schemas cost roughly 3,460 tokens of context every time the server is loaded.

Is the VMware Pilot MCP server still maintained?

VMware Pilot is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.