vmware-pilot 2.0.0__tar.gz → 2.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/.claude-plugin/plugin.json +1 -1
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/.mcp.json +1 -1
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/PKG-INFO +2 -2
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/RELEASE_NOTES.md +17 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/openclaw.plugin.json +1 -1
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/package.json +1 -1
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/pyproject.toml +2 -2
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/server.json +2 -2
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/skills/vmware-pilot/SKILL.md +2 -2
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/skills/vmware-pilot/references/cli-reference.md +2 -2
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/skills/vmware-pilot/references/setup-guide.md +32 -5
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/uv.lock +5 -5
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/vmware_pilot/__init__.py +1 -1
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/vmware_pilot/cli.py +15 -2
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/vmware_pilot/mcp_server/server.py +4 -1
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/.clawhubignore +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/.gitignore +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/Dockerfile +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/README-CN.md +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/README.md +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/SECURITY.md +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/docs/architecture-audit-2026-04-30.md +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/docs/aria-pilot-boundary.md +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/examples/mcp-configs/claude-code.json +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/skills/vmware-pilot/evals/evals.json +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/skills/vmware-pilot/references/agent-guardrails.md +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/skills/vmware-pilot/references/capabilities.md +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/skills/vmware-pilot/references/integration-patterns.md +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/skills/vmware-pilot/references/templates.md +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/skills/vmware-pilot/references/workflow-design.md +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/skills/vmware-pilot/scripts/list_available_tools.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/skills/vmware-pilot/scripts/validate_workflow.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/smithery.yaml +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/tests/__init__.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/tests/conftest.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/tests/eval/__init__.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/tests/eval/capability/__init__.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/tests/eval/capability/_family.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/tests/eval/capability/_scores.json +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/tests/eval/capability/_scoring.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/tests/eval/capability/_skill.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/tests/eval/capability/conftest.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/tests/eval/capability/test_entity_reachability.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/tests/eval/capability/test_error_actionability.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/tests/eval/capability/test_tool_description_quality.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/tests/eval/capability/test_tool_manifest_budget.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/tests/eval/regression/__init__.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/tests/eval/regression/_family_write_surface.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/tests/eval/regression/test_approval_gate_coverage.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/tests/eval/regression/test_capability_grader.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/tests/eval/regression/test_catalog_covers_the_family.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/tests/eval/regression/test_cli_writes_guarded.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/tests/eval/regression/test_environment_resolver_isolation.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/tests/eval/regression/test_template_steps_name_real_tools.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/tests/fixtures/companion_tools.json +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/tests/fixtures/snapshot_companion_tools.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/tests/test_confirm_needs_approval.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/tests/test_custom_approval_gate.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/tests/test_executor.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/tests/test_executor_preview_is_not_success.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/tests/test_final_review_fixes.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/tests/test_models.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/tests/test_no_destructive_ops.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/tests/test_old_tool_names_translated.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/tests/test_own_tools_gated.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/tests/test_review.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/tests/test_safe_error_passthrough.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/tests/test_server.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/tests/test_templates.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/tests/test_templates_pass_confirm.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/vmware_pilot/approval_gate.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/vmware_pilot/custom_loader.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/vmware_pilot/executor.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/vmware_pilot/lifecycle_gate.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/vmware_pilot/mcp_server/__init__.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/vmware_pilot/mcp_server/__main__.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/vmware_pilot/mcp_server/_catalog.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/vmware_pilot/mcp_server/_shared.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/vmware_pilot/mcp_server/tools/__init__.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/vmware_pilot/mcp_server/tools/authoring.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/vmware_pilot/mcp_server/tools/lifecycle.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/vmware_pilot/mcp_server/tools/query.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/vmware_pilot/models.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/vmware_pilot/renames.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/vmware_pilot/review.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/vmware_pilot/templates/__init__.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/vmware_pilot/templates/_aiops_params.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/vmware_pilot/templates/_common.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/vmware_pilot/templates/_gated.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/vmware_pilot/templates/baseline.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/vmware_pilot/templates/k8s.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/vmware_pilot/templates/monitoring.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/vmware_pilot/templates/network.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/vmware_pilot/templates/storage.py +0 -0
- {vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/vmware_pilot/templates/vm.py +0 -0
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://anthropic.com/claude-code/plugin.schema.json",
|
|
3
3
|
"name": "vmware-pilot",
|
|
4
4
|
"displayName": "VMware Pilot",
|
|
5
|
-
"version": "2.
|
|
5
|
+
"version": "2.1.0",
|
|
6
6
|
"description": "Multi-step workflow orchestration for VMware MCP skills with approval gates and rollback.",
|
|
7
7
|
"author": {
|
|
8
8
|
"name": "Wei Zhou",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: vmware-pilot
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.1.0
|
|
4
4
|
Summary: VMware workflow orchestration — multi-step state machine with approval gates
|
|
5
5
|
Project-URL: Homepage, https://github.com/vmware-skills/VMware-Pilot
|
|
6
6
|
Project-URL: Repository, https://github.com/vmware-skills/VMware-Pilot
|
|
@@ -12,7 +12,7 @@ Requires-Python: >=3.10
|
|
|
12
12
|
Requires-Dist: mcp[cli]<2.0,>=1.0
|
|
13
13
|
Requires-Dist: pyyaml<7.0,>=6.0
|
|
14
14
|
Requires-Dist: typer<1.0,>=0.12
|
|
15
|
-
Requires-Dist: vmware-policy<2.0,>=1.
|
|
15
|
+
Requires-Dist: vmware-policy<2.0,>=1.20.0
|
|
16
16
|
Description-Content-Type: text/markdown
|
|
17
17
|
|
|
18
18
|
<!-- mcp-name: io.github.vmware-skills/vmware-pilot -->
|
|
@@ -1,3 +1,20 @@
|
|
|
1
|
+
## v2.1.0 — offer only read tools, plus chosen write tools
|
|
2
|
+
|
|
3
|
+
`vmware-pilot mcp` can now offer a subset of this server's tools (HLD §17 D-16, via vmware-policy 1.20.0):
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
vmware-pilot mcp --expose read --allow-write cancel_workflow
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
* `--expose read` (or `VMWARE_PILOT_MCP_EXPOSE=read`) keeps only tools annotated `readOnlyHint: true`; `--allow-write a,b`
|
|
10
|
+
(or `VMWARE_PILOT_MCP_ALLOW_WRITE`) keeps chosen write tools on top. The default is unchanged: every tool.
|
|
11
|
+
* A bad value, or a name that is not a write tool of this server, stops the server before it serves (exit 2).
|
|
12
|
+
Flags and environment variables are not mixed; a blank flag counts as not given. Pre-2.0 names are accepted.
|
|
13
|
+
* This limits what clients are offered; it is not authorization. See "Limiting which tools are offered" in
|
|
14
|
+
`references/setup-guide.md`, which also notes that an agent with a shell can bypass MCP, so the account itself
|
|
15
|
+
must be least-privilege.
|
|
16
|
+
* Requires `vmware-policy>=1.20.0`.
|
|
17
|
+
|
|
1
18
|
## v2.0.0 — create_workflow_from_template, and VKS kubeconfig tools at their new names
|
|
2
19
|
|
|
3
20
|
**Breaking: one of Pilot's own MCP tools is renamed.** `plan_workflow` → `create_workflow_from_template`.
|
|
@@ -4,14 +4,14 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "vmware-pilot"
|
|
7
|
-
version = "2.
|
|
7
|
+
version = "2.1.0"
|
|
8
8
|
description = "VMware workflow orchestration — multi-step state machine with approval gates"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "MIT"
|
|
11
11
|
requires-python = ">=3.10"
|
|
12
12
|
authors = [{ name = "Wei Zhou", email = "wei-wz.zhou@broadcom.com" }]
|
|
13
13
|
dependencies = [
|
|
14
|
-
"vmware-policy>=1.
|
|
14
|
+
"vmware-policy>=1.20.0,<2.0",
|
|
15
15
|
"mcp[cli]>=1.0,<2.0",
|
|
16
16
|
"pyyaml>=6.0,<7.0",
|
|
17
17
|
"typer>=0.12,<1.0",
|
|
@@ -7,12 +7,12 @@
|
|
|
7
7
|
"url": "https://github.com/vmware-skills/VMware-Pilot",
|
|
8
8
|
"source": "github"
|
|
9
9
|
},
|
|
10
|
-
"version": "2.
|
|
10
|
+
"version": "2.1.0",
|
|
11
11
|
"packages": [
|
|
12
12
|
{
|
|
13
13
|
"registryType": "pypi",
|
|
14
14
|
"identifier": "vmware-pilot",
|
|
15
|
-
"version": "2.
|
|
15
|
+
"version": "2.1.0",
|
|
16
16
|
"runtimeHint": "uvx",
|
|
17
17
|
"packageArguments": [
|
|
18
18
|
{
|
|
@@ -42,7 +42,7 @@ Multi-step workflow orchestration for VMware MCP skills — design, approve, exe
|
|
|
42
42
|
## Quick Install
|
|
43
43
|
|
|
44
44
|
```bash
|
|
45
|
-
uv tool install vmware-pilot==2.
|
|
45
|
+
uv tool install vmware-pilot==2.1.0
|
|
46
46
|
vmware-pilot mcp # start the MCP server (stdio)
|
|
47
47
|
```
|
|
48
48
|
|
|
@@ -303,7 +303,7 @@ No vCenter credentials needed — pilot orchestrates other skills that handle co
|
|
|
303
303
|
}
|
|
304
304
|
```
|
|
305
305
|
|
|
306
|
-
> Fallback: `{"command": "uvx", "args": ["--from", "vmware-pilot==2.
|
|
306
|
+
> Fallback: `{"command": "uvx", "args": ["--from", "vmware-pilot==2.1.0", "vmware-pilot-mcp"]}` also
|
|
307
307
|
> works, but `uvx` re-resolves the package against PyPI on every start and fails behind a
|
|
308
308
|
> TLS-inspecting corporate proxy (`invalid peer certificate: UnknownIssuer`). The installed
|
|
309
309
|
> entry point above touches the network zero times; set `UV_NATIVE_TLS=true` if you must use `uvx`.
|
|
@@ -19,12 +19,12 @@ client.
|
|
|
19
19
|
|
|
20
20
|
```bash
|
|
21
21
|
# Recommended: installed entry point, never touches the network
|
|
22
|
-
uv tool install vmware-pilot==2.
|
|
22
|
+
uv tool install vmware-pilot==2.1.0
|
|
23
23
|
vmware-pilot mcp
|
|
24
24
|
|
|
25
25
|
# Fallback: uvx re-resolves against PyPI each start and fails behind a
|
|
26
26
|
# TLS-inspecting corporate proxy — set UV_NATIVE_TLS=true if you must use it
|
|
27
|
-
uvx --from vmware-pilot==2.
|
|
27
|
+
uvx --from vmware-pilot==2.1.0 vmware-pilot-mcp
|
|
28
28
|
```
|
|
29
29
|
|
|
30
30
|
The server runs on **stdio** transport and exposes 13 MCP tools (4 read, 9 write).
|
|
@@ -11,16 +11,16 @@
|
|
|
11
11
|
### Via uv (Recommended)
|
|
12
12
|
|
|
13
13
|
```bash
|
|
14
|
-
uv tool install vmware-pilot==2.
|
|
14
|
+
uv tool install vmware-pilot==2.1.0
|
|
15
15
|
```
|
|
16
16
|
|
|
17
17
|
### Via pip
|
|
18
18
|
|
|
19
19
|
```bash
|
|
20
|
-
uv tool install vmware-pilot==2.
|
|
20
|
+
uv tool install vmware-pilot==2.1.0
|
|
21
21
|
|
|
22
22
|
# China mainland mirror
|
|
23
|
-
pip install vmware-pilot==2.
|
|
23
|
+
pip install vmware-pilot==2.1.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
|
|
24
24
|
```
|
|
25
25
|
|
|
26
26
|
### Verify Installation
|
|
@@ -84,7 +84,7 @@ The `uvx` form still works and needs no prior install:
|
|
|
84
84
|
"mcpServers": {
|
|
85
85
|
"vmware-pilot": {
|
|
86
86
|
"command": "uvx",
|
|
87
|
-
"args": ["--from", "vmware-pilot==2.
|
|
87
|
+
"args": ["--from", "vmware-pilot==2.1.0", "vmware-pilot-mcp"]
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
90
|
}
|
|
@@ -100,11 +100,38 @@ invalid peer certificate: UnknownIssuer
|
|
|
100
100
|
|
|
101
101
|
`uv` ships its own certificate bundle and ignores the system trust store, which is what breaks.
|
|
102
102
|
Either set `UV_NATIVE_TLS=true` so it honours your corporate CA, or install the tool once
|
|
103
|
-
(`uv tool install vmware-pilot==2.
|
|
103
|
+
(`uv tool install vmware-pilot==2.1.0`) and launch `vmware-pilot mcp`, which touches the network
|
|
104
104
|
zero times.
|
|
105
105
|
|
|
106
106
|
---
|
|
107
107
|
|
|
108
|
+
## Limiting which tools are offered
|
|
109
|
+
|
|
110
|
+
By default the MCP server offers every tool. To offer only read tools, start it with `--expose read`, or set
|
|
111
|
+
`VMWARE_PILOT_MCP_EXPOSE=read` in the MCP client's `env` block (useful when the client launches `vmware-pilot mcp` itself). To offer
|
|
112
|
+
chosen write tools as well, add `--allow-write` with a comma-separated list (or `VMWARE_PILOT_MCP_ALLOW_WRITE`):
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
vmware-pilot mcp --expose read --allow-write cancel_workflow
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
- A read tool is one annotated `readOnlyHint: true`; every other tool counts as a write.
|
|
119
|
+
- An unknown setting, or a name that is not a write tool of this server, stops the server before it serves (exit
|
|
120
|
+
code 2), so it never offers more than you asked for. Pre-2.0 tool names are accepted.
|
|
121
|
+
- With `--expose read`, the server prints one line to stderr saying what it exposes.
|
|
122
|
+
- With `--expose read`, the server's instructions still describe the workflow tools it hides (`create_workflow`,
|
|
123
|
+
`create_workflow_from_template`, `run_workflow`, `approve`, `rollback`); a call to a hidden tool is answered `Unknown tool`.
|
|
124
|
+
- Flags and environment variables are not mixed: if either flag is given, both environment variables are
|
|
125
|
+
ignored, so a leftover `_ALLOW_WRITE` in the shell cannot widen `--expose read`. A blank flag value counts as
|
|
126
|
+
not given.
|
|
127
|
+
- A tool that runs other steps (a plan, workflow or batch tool) carries every write it can execute, including
|
|
128
|
+
writes this setting hides. Expose such a tool only if you would expose those writes too.
|
|
129
|
+
- A launcher that imports the server object can call
|
|
130
|
+
`vmware_policy.exposure.restrict_tools(mcp, skill="pilot", expose="read", allow_write=[...])` before running it,
|
|
131
|
+
instead of editing the SDK's tool registry.
|
|
132
|
+
- This limits what clients are offered. It is **not** authorization. This server's write tools change workflow state on this machine; the steps it runs act through the other skills' accounts;
|
|
133
|
+
deny rules in `~/.vmware/rules.yaml` still apply to every exposed tool.
|
|
134
|
+
|
|
108
135
|
## Configuration
|
|
109
136
|
|
|
110
137
|
Pilot itself requires **no vCenter/NSX/AVI credentials**. It is a pure orchestrator that delegates all infrastructure calls to companion skills.
|
|
@@ -1142,7 +1142,7 @@ wheels = [
|
|
|
1142
1142
|
|
|
1143
1143
|
[[package]]
|
|
1144
1144
|
name = "vmware-pilot"
|
|
1145
|
-
version = "2.
|
|
1145
|
+
version = "2.1.0"
|
|
1146
1146
|
source = { editable = "." }
|
|
1147
1147
|
dependencies = [
|
|
1148
1148
|
{ name = "mcp", extra = ["cli"] },
|
|
@@ -1163,7 +1163,7 @@ requires-dist = [
|
|
|
1163
1163
|
{ name = "mcp", extras = ["cli"], specifier = ">=1.0,<2.0" },
|
|
1164
1164
|
{ name = "pyyaml", specifier = ">=6.0,<7.0" },
|
|
1165
1165
|
{ name = "typer", specifier = ">=0.12,<1.0" },
|
|
1166
|
-
{ name = "vmware-policy", specifier = ">=1.
|
|
1166
|
+
{ name = "vmware-policy", specifier = ">=1.20.0,<2.0" },
|
|
1167
1167
|
]
|
|
1168
1168
|
|
|
1169
1169
|
[package.metadata.requires-dev]
|
|
@@ -1175,14 +1175,14 @@ dev = [
|
|
|
1175
1175
|
|
|
1176
1176
|
[[package]]
|
|
1177
1177
|
name = "vmware-policy"
|
|
1178
|
-
version = "1.
|
|
1178
|
+
version = "1.20.0"
|
|
1179
1179
|
source = { registry = "https://pypi.org/simple" }
|
|
1180
1180
|
dependencies = [
|
|
1181
1181
|
{ name = "pyyaml" },
|
|
1182
1182
|
{ name = "rich" },
|
|
1183
1183
|
{ name = "typer" },
|
|
1184
1184
|
]
|
|
1185
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
1185
|
+
sdist = { url = "https://files.pythonhosted.org/packages/66/f3/cae0e18d269bd4764d5f9b34a838174e9668f931e44d41effab620aeecf4/vmware_policy-1.20.0.tar.gz", hash = "sha256:eb9875d3e94435a18d1dd6cf2c71905c46e2e812808556db3fb741ef322bee99", size = 220048, upload-time = "2026-10-15T06:33:35.174Z" }
|
|
1186
1186
|
wheels = [
|
|
1187
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1187
|
+
{ url = "https://files.pythonhosted.org/packages/b2/cf/6c87f6b5439407c1c3b83b84a5ef53def7544b687efd6f16a6cb187acf78/vmware_policy-1.20.0-py3-none-any.whl", hash = "sha256:cea9451c70be96e3d7adc420a2ac001cf431c29b61350dd58c3771378058737a", size = 86684, upload-time = "2026-10-15T06:33:33.413Z" },
|
|
1188
1188
|
]
|
|
@@ -13,6 +13,7 @@ convention — every sibling skill exposes the same ``<skill> mcp`` subcommand.
|
|
|
13
13
|
|
|
14
14
|
from __future__ import annotations
|
|
15
15
|
|
|
16
|
+
from typing import Optional
|
|
16
17
|
import typer
|
|
17
18
|
|
|
18
19
|
from vmware_pilot import __version__
|
|
@@ -69,7 +70,19 @@ def version_cmd() -> None:
|
|
|
69
70
|
|
|
70
71
|
@app.command("mcp")
|
|
71
72
|
@cli_local("starts the MCP server; its tools audit themselves")
|
|
72
|
-
def mcp_cmd(
|
|
73
|
+
def mcp_cmd(
|
|
74
|
+
expose: Optional[str] = typer.Option(
|
|
75
|
+
None,
|
|
76
|
+
"--expose",
|
|
77
|
+
help="Which tools to offer: all (default) or read. Limits what clients see; "
|
|
78
|
+
"not authorization: the account's permissions still decide.",
|
|
79
|
+
),
|
|
80
|
+
allow_write: Optional[str] = typer.Option(
|
|
81
|
+
None,
|
|
82
|
+
"--allow-write",
|
|
83
|
+
help="With --expose read: comma-separated write tools to offer as well.",
|
|
84
|
+
),
|
|
85
|
+
) -> None:
|
|
73
86
|
"""Start the MCP server (stdio transport).
|
|
74
87
|
|
|
75
88
|
Single-command entry point for MCP clients:
|
|
@@ -96,7 +109,7 @@ def mcp_cmd() -> None:
|
|
|
96
109
|
|
|
97
110
|
from vmware_pilot.mcp_server.server import main as _mcp_main
|
|
98
111
|
|
|
99
|
-
_mcp_main()
|
|
112
|
+
_mcp_main(expose=expose, allow_write=allow_write)
|
|
100
113
|
|
|
101
114
|
|
|
102
115
|
if __name__ == "__main__": # pragma: no cover
|
|
@@ -15,6 +15,7 @@ Exposes 13 tools for AI agents to manage multi-step VMware workflows:
|
|
|
15
15
|
|
|
16
16
|
from __future__ import annotations
|
|
17
17
|
|
|
18
|
+
from typing import Optional
|
|
18
19
|
import logging
|
|
19
20
|
|
|
20
21
|
from vmware_policy import describe_tool_parameters
|
|
@@ -147,9 +148,11 @@ __all__ = [
|
|
|
147
148
|
]
|
|
148
149
|
|
|
149
150
|
|
|
150
|
-
def main() -> None:
|
|
151
|
+
def main(expose: Optional[str] = None, allow_write: Optional[str] = None) -> None:
|
|
151
152
|
"""Run the MCP server over stdio."""
|
|
152
153
|
logging.basicConfig(level=logging.INFO)
|
|
154
|
+
from vmware_policy.exposure import apply_or_exit
|
|
155
|
+
apply_or_exit(mcp, skill="pilot", expose=expose, allow_write=allow_write)
|
|
153
156
|
mcp.run(transport="stdio")
|
|
154
157
|
|
|
155
158
|
# The docstrings above are the schema. `describe_tool_parameters` copies each
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/skills/vmware-pilot/references/agent-guardrails.md
RENAMED
|
File without changes
|
|
File without changes
|
{vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/skills/vmware-pilot/references/integration-patterns.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/skills/vmware-pilot/scripts/list_available_tools.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/tests/eval/capability/test_tool_description_quality.py
RENAMED
|
File without changes
|
{vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/tests/eval/capability/test_tool_manifest_budget.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/tests/eval/regression/test_approval_gate_coverage.py
RENAMED
|
File without changes
|
|
File without changes
|
{vmware_pilot-2.0.0 → vmware_pilot-2.1.0}/tests/eval/regression/test_catalog_covers_the_family.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|