vmware-storage 2.1.0__tar.gz → 2.2.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_storage-2.1.0 → vmware_storage-2.2.0}/.claude-plugin/plugin.json +1 -1
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/.mcp.json +1 -1
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/PKG-INFO +3 -3
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/RELEASE_NOTES.md +19 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/openclaw.plugin.json +1 -1
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/package.json +1 -1
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/pyproject.toml +3 -3
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/server.json +2 -2
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/skills/vmware-storage/SKILL.md +2 -2
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/skills/vmware-storage/references/setup-guide.md +3 -3
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/uv.lock +6 -6
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/vmware_storage/__init__.py +1 -1
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/vmware_storage/cli.py +24 -3
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/vmware_storage/mcp_server/server.py +18 -4
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/.clawhubignore +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/.env.example +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/.gitignore +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/Dockerfile +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/LICENSE +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/README-CN.md +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/README.md +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/SECURITY.md +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/config.example.yaml +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/docker-compose.yml +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/examples/mcp-configs/README.md +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/examples/mcp-configs/claude-code.json +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/examples/mcp-configs/continue.yaml +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/examples/mcp-configs/cursor.json +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/examples/mcp-configs/goose.json +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/examples/mcp-configs/localcowork.json +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/examples/mcp-configs/mcp-agent.yaml +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/examples/mcp-configs/vscode-copilot.json +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/patterns/README.md +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/patterns/iscsi-target-stale-rescan.yaml +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/skills/vmware-storage/evals/evals.json +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/skills/vmware-storage/references/agent-guardrails.md +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/skills/vmware-storage/references/capabilities.md +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/skills/vmware-storage/references/cli-reference.md +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/smithery.yaml +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/__init__.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/conftest.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/__init__.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/capability/__init__.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/capability/_family.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/capability/_scores.json +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/capability/_scoring.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/capability/_skill.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/capability/conftest.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/capability/test_entity_reachability.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/capability/test_error_actionability.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/capability/test_tool_description_quality.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/capability/test_tool_manifest_budget.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/regression/__init__.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/regression/test_atexit_handlers_do_not_accumulate.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/regression/test_audit_isolation.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/regression/test_cached_loader_agrees_with_the_resolver.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/regression/test_capability_grader.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/regression/test_cli_writes_guarded.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/regression/test_credential_env_override.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/regression/test_datastore_list_renders.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/regression/test_doctor_authenticates_every_target.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/regression/test_doctor_uses_the_config_the_tools_use.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/regression/test_env_secret_obfuscation.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/regression/test_fc_multipath.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/regression/test_instructions_name_targets.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/regression/test_inventory_scale_n1.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/regression/test_iscsi_unreachable_host.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/regression/test_release_blockers.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/regression/test_remedy_survives_a_long_home.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/regression/test_result_envelope.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/regression/test_returned_failure_is_audited.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/regression/test_session_probe_eviction.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/regression/test_storage_hardening_fixes.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/regression/test_storage_ops_behavior.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/regression/test_tool_names_2_0.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/regression/test_vim_attribute_conformance.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/regression/test_vsan_efficiency.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/regression/test_vsan_health_is_actually_queried.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/regression/test_vsan_reports_what_it_could_not_read.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/spec/__init__.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/spec/vsan_efficiency_endpoints.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/spec/vsan_health_endpoints.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/test_init_and_onboarding.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/test_iscsi_gate.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/test_no_destructive_ops.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/test_no_destructive_vm_code.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/test_safe_error_passthrough.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/test_stop_signal_runs_atexit.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/vmware_storage/config.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/vmware_storage/connection.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/vmware_storage/doctor.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/vmware_storage/init_wizard.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/vmware_storage/mcp_server/__init__.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/vmware_storage/mcp_server/__main__.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/vmware_storage/notify/__init__.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/vmware_storage/notify/audit.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/vmware_storage/ops/__init__.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/vmware_storage/ops/datastore_browser.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/vmware_storage/ops/inventory.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/vmware_storage/ops/iscsi_config.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/vmware_storage/ops/iscsi_gate.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/vmware_storage/ops/multipath.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/vmware_storage/ops/storage_paths.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/vmware_storage/ops/vsan.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/vmware_storage/ops/vsan_efficiency.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/vmware_storage/ops/vsan_sdk.py +0 -0
- {vmware_storage-2.1.0 → vmware_storage-2.2.0}/vmware_storage/policy_environment.py +0 -0
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://anthropic.com/claude-code/plugin.schema.json",
|
|
3
3
|
"name": "vmware-storage",
|
|
4
4
|
"displayName": "VMware Storage",
|
|
5
|
-
"version": "2.
|
|
5
|
+
"version": "2.2.0",
|
|
6
6
|
"description": "VMware vSphere storage with 14 MCP tools: datastores, iSCSI, vSAN, FC multipath.",
|
|
7
7
|
"author": {
|
|
8
8
|
"name": "Wei Zhou",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: vmware-storage
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.2.0
|
|
4
4
|
Summary: VMware vSphere storage management: datastores, iSCSI, vSAN. Domain-focused MCP skill.
|
|
5
5
|
Project-URL: Homepage, https://github.com/vmware-skills/VMware-Storage
|
|
6
6
|
Project-URL: Repository, https://github.com/vmware-skills/VMware-Storage
|
|
@@ -10,13 +10,13 @@ Author-email: Wei Zhou <wei-wz.zhou@broadcom.com>
|
|
|
10
10
|
License-Expression: MIT
|
|
11
11
|
License-File: LICENSE
|
|
12
12
|
Requires-Python: >=3.10
|
|
13
|
-
Requires-Dist: mcp[cli]<2.0,>=1.
|
|
13
|
+
Requires-Dist: mcp[cli]<2.0,>=1.28
|
|
14
14
|
Requires-Dist: pyaml<27.0,>=24.0
|
|
15
15
|
Requires-Dist: python-dotenv<2.0,>=1.0
|
|
16
16
|
Requires-Dist: pyvmomi<10.0,>=8.0.3.0
|
|
17
17
|
Requires-Dist: rich<15.0,>=13.0
|
|
18
18
|
Requires-Dist: typer<1.0,>=0.12
|
|
19
|
-
Requires-Dist: vmware-policy<2.0,>=1.
|
|
19
|
+
Requires-Dist: vmware-policy<2.0,>=1.21.0
|
|
20
20
|
Description-Content-Type: text/markdown
|
|
21
21
|
|
|
22
22
|
<!-- mcp-name: io.github.vmware-skills/vmware-storage -->
|
|
@@ -1,3 +1,22 @@
|
|
|
1
|
+
## v2.2.0 — serve MCP over HTTPS
|
|
2
|
+
|
|
3
|
+
`vmware-storage mcp` can now serve the network as well as stdio (HLD §16, via vmware-policy 1.21.0):
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
vmware-audit token create alice # once per caller; shown once
|
|
7
|
+
vmware-storage mcp --transport https --host 0.0.0.0 --port 8443 \
|
|
8
|
+
--cert server.pem --key server-key.pem --public-name mcp.example.com
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
* Every request needs `Authorization: Bearer <token>`; the server will not start without a token, refuses Host or
|
|
12
|
+
Origin values outside `--public-name`, and checks itself (unauthenticated requests must get 401) before it
|
|
13
|
+
binds. `--transport http` binds loopback only, for a TLS-terminating reverse proxy.
|
|
14
|
+
* Audit rows record the caller as `token:<name>` and the surface as `mcp-https`. Calls naming different targets
|
|
15
|
+
run in parallel; calls naming no target run one at a time.
|
|
16
|
+
* stdio remains the default; the `vmware-storage-mcp` console script and `python -m` are unchanged.
|
|
17
|
+
* Everyone who can reach the endpoint acts with this server's account; run one endpoint per privilege level.
|
|
18
|
+
* Requires `vmware-policy>=1.21.0` and `mcp>=1.28`.
|
|
19
|
+
|
|
1
20
|
## v2.1.0 — offer only read tools, plus chosen write tools
|
|
2
21
|
|
|
3
22
|
`vmware-storage mcp` can now offer a subset of this server's tools (HLD §17 D-16, via vmware-policy 1.20.0):
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "vmware-storage"
|
|
7
|
-
version = "2.
|
|
7
|
+
version = "2.2.0"
|
|
8
8
|
description = "VMware vSphere storage management: datastores, iSCSI, vSAN. Domain-focused MCP skill."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "MIT"
|
|
@@ -16,8 +16,8 @@ dependencies = [
|
|
|
16
16
|
"typer>=0.12,<1.0",
|
|
17
17
|
"rich>=13.0,<15.0",
|
|
18
18
|
"python-dotenv>=1.0,<2.0",
|
|
19
|
-
"mcp[cli]>=1.
|
|
20
|
-
"vmware-policy>=1.
|
|
19
|
+
"mcp[cli]>=1.28,<2.0",
|
|
20
|
+
"vmware-policy>=1.21.0,<2.0",
|
|
21
21
|
]
|
|
22
22
|
|
|
23
23
|
|
|
@@ -7,12 +7,12 @@
|
|
|
7
7
|
"url": "https://github.com/vmware-skills/VMware-Storage",
|
|
8
8
|
"source": "github"
|
|
9
9
|
},
|
|
10
|
-
"version": "2.
|
|
10
|
+
"version": "2.2.0",
|
|
11
11
|
"packages": [
|
|
12
12
|
{
|
|
13
13
|
"registryType": "pypi",
|
|
14
14
|
"identifier": "vmware-storage",
|
|
15
|
-
"version": "2.
|
|
15
|
+
"version": "2.2.0",
|
|
16
16
|
"runtimeHint": "uvx",
|
|
17
17
|
"packageArguments": [
|
|
18
18
|
{
|
|
@@ -39,7 +39,7 @@ VMware vSphere storage management — 14 MCP tools for datastores, iSCSI, vSAN,
|
|
|
39
39
|
## Quick Install
|
|
40
40
|
|
|
41
41
|
```bash
|
|
42
|
-
uv tool install vmware-storage==2.
|
|
42
|
+
uv tool install vmware-storage==2.2.0
|
|
43
43
|
vmware-storage init # guided setup: writes config + .env (chmod 600, password grep-safe), then verifies
|
|
44
44
|
vmware-storage doctor
|
|
45
45
|
```
|
|
@@ -263,7 +263,7 @@ Corporate TLS proxies inject certificates that uv's bundled CA store doesn't tru
|
|
|
263
263
|
## Setup
|
|
264
264
|
|
|
265
265
|
```bash
|
|
266
|
-
uv tool install vmware-storage==2.
|
|
266
|
+
uv tool install vmware-storage==2.2.0
|
|
267
267
|
mkdir -p ~/.vmware-storage
|
|
268
268
|
cp config.example.yaml ~/.vmware-storage/config.yaml
|
|
269
269
|
# Edit config.yaml with your vCenter/ESXi targets
|
{vmware_storage-2.1.0 → vmware_storage-2.2.0}/skills/vmware-storage/references/setup-guide.md
RENAMED
|
@@ -13,19 +13,19 @@ Complete setup and security guide for `vmware-storage`.
|
|
|
13
13
|
### Via uv (recommended)
|
|
14
14
|
|
|
15
15
|
```bash
|
|
16
|
-
uv tool install vmware-storage==2.
|
|
16
|
+
uv tool install vmware-storage==2.2.0
|
|
17
17
|
```
|
|
18
18
|
|
|
19
19
|
### Via pip
|
|
20
20
|
|
|
21
21
|
```bash
|
|
22
|
-
pip install vmware-storage==2.
|
|
22
|
+
pip install vmware-storage==2.2.0
|
|
23
23
|
```
|
|
24
24
|
|
|
25
25
|
### From source
|
|
26
26
|
|
|
27
27
|
```bash
|
|
28
|
-
git clone --branch v2.
|
|
28
|
+
git clone --branch v2.2.0 https://github.com/vmware-skills/VMware-Storage.git
|
|
29
29
|
cd VMware-Storage
|
|
30
30
|
pip install -e .
|
|
31
31
|
```
|
|
@@ -1162,21 +1162,21 @@ wheels = [
|
|
|
1162
1162
|
|
|
1163
1163
|
[[package]]
|
|
1164
1164
|
name = "vmware-policy"
|
|
1165
|
-
version = "1.
|
|
1165
|
+
version = "1.21.0"
|
|
1166
1166
|
source = { registry = "https://pypi.org/simple" }
|
|
1167
1167
|
dependencies = [
|
|
1168
1168
|
{ name = "pyyaml" },
|
|
1169
1169
|
{ name = "rich" },
|
|
1170
1170
|
{ name = "typer" },
|
|
1171
1171
|
]
|
|
1172
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
1172
|
+
sdist = { url = "https://files.pythonhosted.org/packages/87/5d/4221ea4a344ec33d6b54903682ce8ae2013bb0a2d6137c94ac769690ea8b/vmware_policy-1.21.0.tar.gz", hash = "sha256:f42b794ea69e52e1fa13aff8b5bc07631d82683b1c12872f2f2ec744e3853549", size = 303862, upload-time = "2026-10-15T10:13:33.719Z" }
|
|
1173
1173
|
wheels = [
|
|
1174
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1174
|
+
{ url = "https://files.pythonhosted.org/packages/b3/b4/feb7015ae5f7870e8058ad713050f7fe3ddefa57aa7bdd4a83f2e3b9abb4/vmware_policy-1.21.0-py3-none-any.whl", hash = "sha256:a10c26816be09f9a2823cc58bc4eacb9b5eff8b6df49dfc5b504b3d76cb3b7ec", size = 99818, upload-time = "2026-10-15T10:13:31.67Z" },
|
|
1175
1175
|
]
|
|
1176
1176
|
|
|
1177
1177
|
[[package]]
|
|
1178
1178
|
name = "vmware-storage"
|
|
1179
|
-
version = "2.
|
|
1179
|
+
version = "2.2.0"
|
|
1180
1180
|
source = { editable = "." }
|
|
1181
1181
|
dependencies = [
|
|
1182
1182
|
{ name = "mcp", extra = ["cli"] },
|
|
@@ -1197,13 +1197,13 @@ dev = [
|
|
|
1197
1197
|
|
|
1198
1198
|
[package.metadata]
|
|
1199
1199
|
requires-dist = [
|
|
1200
|
-
{ name = "mcp", extras = ["cli"], specifier = ">=1.
|
|
1200
|
+
{ name = "mcp", extras = ["cli"], specifier = ">=1.28,<2.0" },
|
|
1201
1201
|
{ name = "pyaml", specifier = ">=24.0,<27.0" },
|
|
1202
1202
|
{ name = "python-dotenv", specifier = ">=1.0,<2.0" },
|
|
1203
1203
|
{ name = "pyvmomi", specifier = ">=8.0.3.0,<10.0" },
|
|
1204
1204
|
{ name = "rich", specifier = ">=13.0,<15.0" },
|
|
1205
1205
|
{ name = "typer", specifier = ">=0.12,<1.0" },
|
|
1206
|
-
{ name = "vmware-policy", specifier = ">=1.
|
|
1206
|
+
{ name = "vmware-policy", specifier = ">=1.21.0,<2.0" },
|
|
1207
1207
|
]
|
|
1208
1208
|
|
|
1209
1209
|
[package.metadata.requires-dev]
|
|
@@ -582,13 +582,31 @@ def mcp_cmd(
|
|
|
582
582
|
"--allow-write",
|
|
583
583
|
help="With --expose read: comma-separated write tools to offer as well.",
|
|
584
584
|
),
|
|
585
|
+
transport: Optional[str] = typer.Option(
|
|
586
|
+
None,
|
|
587
|
+
"--transport",
|
|
588
|
+
help="stdio (default), https, or http (loopback only, behind a TLS reverse proxy). "
|
|
589
|
+
"https/http need a token: 'vmware-audit token create NAME'.",
|
|
590
|
+
),
|
|
591
|
+
host: Optional[str] = typer.Option(None, "--host", help="Bind address (default 127.0.0.1)."),
|
|
592
|
+
port: Optional[int] = typer.Option(None, "--port", help="Port (default 8443)."),
|
|
593
|
+
cert: Optional[str] = typer.Option(None, "--cert", help="TLS certificate (PEM) for https."),
|
|
594
|
+
key: Optional[str] = typer.Option(None, "--key", help="TLS private key (PEM) for https."),
|
|
595
|
+
public_name: Optional[str] = typer.Option(
|
|
596
|
+
None,
|
|
597
|
+
"--public-name",
|
|
598
|
+
help="Host names clients use, comma-separated; other Host/Origin values are refused.",
|
|
599
|
+
),
|
|
600
|
+
token_file: Optional[str] = typer.Option(
|
|
601
|
+
None, "--token-file", help="Token hash file (default $OPS_HOME/mcp-tokens)."
|
|
602
|
+
),
|
|
585
603
|
) -> None:
|
|
586
|
-
"""Start the MCP server (stdio transport).
|
|
604
|
+
"""Start the MCP server (stdio by default; --transport https serves the network).
|
|
587
605
|
|
|
588
606
|
Single-command entry point for MCP clients:
|
|
589
607
|
vmware-storage mcp
|
|
590
608
|
|
|
591
|
-
Equivalent to the legacy `vmware-storage-mcp` console script.
|
|
609
|
+
Equivalent to the legacy `vmware-storage-mcp` console script for stdio (the console script takes no flags).
|
|
592
610
|
"""
|
|
593
611
|
import sys
|
|
594
612
|
|
|
@@ -605,4 +623,7 @@ def mcp_cmd(
|
|
|
605
623
|
|
|
606
624
|
from vmware_storage.mcp_server.server import main as _mcp_main
|
|
607
625
|
|
|
608
|
-
_mcp_main(
|
|
626
|
+
_mcp_main(
|
|
627
|
+
expose=expose, allow_write=allow_write, transport=transport, host=host, port=port,
|
|
628
|
+
cert=cert, key=key, public_name=public_name, token_file=token_file,
|
|
629
|
+
)
|
|
@@ -994,12 +994,26 @@ def _exit_on_stop_signals() -> None:
|
|
|
994
994
|
signal.signal(sig, _stop)
|
|
995
995
|
|
|
996
996
|
|
|
997
|
-
def main(
|
|
997
|
+
def main(
|
|
998
|
+
expose: Optional[str] = None,
|
|
999
|
+
allow_write: Optional[str] = None,
|
|
1000
|
+
transport: Optional[str] = None,
|
|
1001
|
+
host: Optional[str] = None,
|
|
1002
|
+
port: Optional[int] = None,
|
|
1003
|
+
cert: Optional[str] = None,
|
|
1004
|
+
key: Optional[str] = None,
|
|
1005
|
+
public_name: Optional[str] = None,
|
|
1006
|
+
token_file: Optional[str] = None,
|
|
1007
|
+
) -> None:
|
|
998
1008
|
"""Run the MCP server."""
|
|
999
1009
|
_exit_on_stop_signals()
|
|
1000
|
-
from vmware_policy.
|
|
1001
|
-
|
|
1002
|
-
|
|
1010
|
+
from vmware_policy.serve import run_server
|
|
1011
|
+
run_server(
|
|
1012
|
+
mcp,
|
|
1013
|
+
skill="storage",
|
|
1014
|
+
expose=expose, allow_write=allow_write, transport=transport, host=host, port=port,
|
|
1015
|
+
cert=cert, key=key, public_name=public_name, token_file=token_file,
|
|
1016
|
+
)
|
|
1003
1017
|
|
|
1004
1018
|
# The docstrings above are the schema. `describe_tool_parameters` copies each
|
|
1005
1019
|
# `Args:` entry into the JSON schema an agent actually reads, and closes the
|
|
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
|
{vmware_storage-2.1.0 → vmware_storage-2.2.0}/skills/vmware-storage/references/agent-guardrails.md
RENAMED
|
File without changes
|
{vmware_storage-2.1.0 → vmware_storage-2.2.0}/skills/vmware-storage/references/capabilities.md
RENAMED
|
File without changes
|
{vmware_storage-2.1.0 → vmware_storage-2.2.0}/skills/vmware-storage/references/cli-reference.md
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
|
{vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/capability/test_entity_reachability.py
RENAMED
|
File without changes
|
{vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/capability/test_error_actionability.py
RENAMED
|
File without changes
|
{vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/capability/test_tool_description_quality.py
RENAMED
|
File without changes
|
{vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/capability/test_tool_manifest_budget.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/regression/test_capability_grader.py
RENAMED
|
File without changes
|
{vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/regression/test_cli_writes_guarded.py
RENAMED
|
File without changes
|
{vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/regression/test_credential_env_override.py
RENAMED
|
File without changes
|
{vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/regression/test_datastore_list_renders.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/regression/test_env_secret_obfuscation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/regression/test_inventory_scale_n1.py
RENAMED
|
File without changes
|
{vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/regression/test_iscsi_unreachable_host.py
RENAMED
|
File without changes
|
{vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/regression/test_release_blockers.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/regression/test_session_probe_eviction.py
RENAMED
|
File without changes
|
{vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/regression/test_storage_hardening_fixes.py
RENAMED
|
File without changes
|
{vmware_storage-2.1.0 → vmware_storage-2.2.0}/tests/eval/regression/test_storage_ops_behavior.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
|