mcp-openstack-ops 3.6.0__tar.gz → 3.6.1__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.
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/PKG-INFO +78 -39
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/README.md +77 -38
- mcp_openstack_ops-3.6.1/docs/expanded-validation-fixes-2026-11-02.json +18906 -0
- mcp_openstack_ops-3.6.1/docs/expanded-validation-fixes-2026-11-02.md +205 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/prompt_template.md +21 -21
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/services/compute.py +93 -26
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/services/identity.py +2 -7
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/services/network.py +25 -20
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/services/storage.py +47 -81
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_instance.py +26 -13
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_instance_details.py +8 -4
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_instances_by_status.py +10 -5
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_keypair_list.py +5 -4
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_network_details.py +10 -5
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_routers.py +5 -4
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_security_groups.py +5 -1
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_user_list.py +5 -4
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_volume_list.py +10 -5
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_volume_snapshots.py +5 -4
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/search_instances.py +16 -11
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_networks.py +4 -4
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_volume.py +14 -17
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/user_connection.py +31 -12
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops.egg-info/PKG-INFO +78 -39
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops.egg-info/SOURCES.txt +4 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops.egg-info/scm_file_list.json +4 -0
- mcp_openstack_ops-3.6.1/src/mcp_openstack_ops.egg-info/scm_version.json +8 -0
- mcp_openstack_ops-3.6.1/tests/test_expanded_validation_fixes.py +144 -0
- mcp_openstack_ops-3.6.1/tests/test_phase1_stabilization.py +190 -0
- mcp_openstack_ops-3.6.0/src/mcp_openstack_ops.egg-info/scm_version.json +0 -8
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/.env.example +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/.env.test +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/.github/FUNDING.yml +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/.github/copilot-instructions.md +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/.github/dependabot.yml +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/.github/workflows/pypi-publish.yml +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/.github/workflows/tests.yml +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/.gitignore +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/.gitleaks.toml +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/.pre-commit-config.yaml +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/.python-version +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/AGENTS.md +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/Dockerfile.MCP-Server +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/Dockerfile.MCPO-Proxy +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/LICENSE +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/MANIFEST.in +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/build-mcp-server-docker-image.sh +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/build-mcpo-server-docker-image.sh +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/diagnose_openstack.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/docker-compose.yml +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/docs/integration-validation.md +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/docs/main-live-retest-2026-10-30.json +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/docs/main-live-retest-2026-10-30.md +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/docs/main-live-validation-2026-10-30.json +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/docs/main-live-validation-2026-10-30.md +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/docs/multi-user-phase1.md +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/img/MCP-Workflow-of-Quickstart-Tutorial.png +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/img/screenshot-claude-desktop.png +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/img/screenshot-example-cluster-status.png +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/img/screenshot-openstack-dashboard.png +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/main.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/mcp-config.json.http +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/mcp-config.json.multi-project +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/mcp-config.json.stdio +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/pyproject.toml +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/scripts/check_release.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/scripts/mcp-server-docker-cmd.sh +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/scripts/publish_release.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/scripts/run-mcp-inspector-local.sh +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/scripts/run-mcp-inspector-pypi.sh +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/setup.cfg +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/__init__.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/__main__.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/connection.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/functions.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/mcp_main.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/services/__init__.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/services/alarms.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/services/core.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/services/image.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/services/load_balancer/__init__.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/services/load_balancer/amphorae.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/services/load_balancer/core.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/services/load_balancer/health_monitors.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/services/load_balancer/l7_policies.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/services/load_balancer/listeners.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/services/load_balancer/management.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/services/load_balancer/pools.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/services/monitoring.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/services/orchestration.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/__init__.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_availability_zones.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_domains.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_floating_ip_pools.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_floating_ips.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_heat_stack_details.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_heat_stacks.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_hypervisor_details.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_identity_groups.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_image_detail_list.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_image_members.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_instance_by_name.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_load_balancer_amphorae.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_load_balancer_availability_zones.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_load_balancer_details.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_load_balancer_flavors.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_load_balancer_health_monitors.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_load_balancer_l7_policies.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_load_balancer_l7_rules.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_load_balancer_list.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_load_balancer_listeners.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_load_balancer_pool_members.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_load_balancer_pools.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_load_balancer_providers.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_load_balancer_quotas.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_network_qos_policies.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_project_details.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_quota.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_resource_monitoring.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_role_assignments.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_server_events.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_server_groups.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_server_volumes.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_service_status.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_usage_statistics.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_volume_backups.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_volume_groups.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_volume_qos.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_volume_transfers.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_volume_types.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_alarms.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_compute_agents.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_domains.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_flavor.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_floating_ip.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_floating_ip_port_forwarding.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_heat_stack.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_identity_groups.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_image.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_image_members.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_image_metadata.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_image_visibility.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_instance.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_keypair.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_load_balancer.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_load_balancer_amphora.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_load_balancer_availability_zone.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_load_balancer_flavor.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_load_balancer_health_monitor.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_load_balancer_l7_policy.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_load_balancer_l7_rule.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_load_balancer_listener.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_load_balancer_pool.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_load_balancer_pool_member.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_load_balancer_quota.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_metrics.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_network_agents.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_network_ports.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_network_qos_policies.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_project.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_quota.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_roles.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_routers.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_security_groups.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_server_backup.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_server_dump.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_server_fixed_ip.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_server_floating_ip.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_server_group.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_server_migration.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_server_network.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_server_properties.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_server_security_group.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_server_volume.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_service_logs.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_services.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_snapshot.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_subnets.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_users.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_volume_backups.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_volume_groups.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_volume_qos.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_volume_types.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops.egg-info/dependency_links.txt +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops.egg-info/entry_points.txt +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops.egg-info/requires.txt +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops.egg-info/top_level.txt +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/test_compatibility.sh +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/test_project_isolation.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/tests/test_connection.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/tests/test_floating_ip.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/tests/test_instance_image.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/tests/test_live_regressions.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/tests/test_operational_tools.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/tests/test_publish_release.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/tests/test_release.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/tests/test_tool_registration.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/tests/test_user_connection.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/uv.lock +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mcp-openstack-ops
|
|
3
|
-
Version: 3.6.
|
|
3
|
+
Version: 3.6.1
|
|
4
4
|
Summary: OpenStack operations automation MCP server
|
|
5
5
|
Author-email: JungJungIn <call518@gmail.com>
|
|
6
6
|
Requires-Python: >=3.12
|
|
@@ -177,12 +177,51 @@ Post-Action Status:
|
|
|
177
177
|
### **Unified Resource Queries**
|
|
178
178
|
New consolidated `get_instance` tool replaces multiple separate tools:
|
|
179
179
|
- ❌ Old: `get_instance_details`, `get_instance_info`, `get_instance_status`, `get_instance_network_info`
|
|
180
|
-
- ✅ New: `get_instance(
|
|
180
|
+
- ✅ New: `get_instance(names="vm1,vm2")` - Single tool, comprehensive information
|
|
181
181
|
|
|
182
182
|
---
|
|
183
183
|
|
|
184
184
|
## 📊 OpenStack CLI vs MCP Tools Mapping
|
|
185
185
|
|
|
186
|
+
**Latest targeted validation — 2026-11-02:** working tree based on `6a36b6e`.
|
|
187
|
+
See the [fixes and final retest report](docs/expanded-validation-fixes-2026-11-02.md)
|
|
188
|
+
and [sanitized evidence](docs/expanded-validation-fixes-2026-11-02.json).
|
|
189
|
+
The final executable paths were tested with FastMCP **3.4.10** from `uv.lock`,
|
|
190
|
+
two ordinary-user projects, **20 VMs and 20 one-GiB volumes**. Post-test tool
|
|
191
|
+
wording/prompt corrections are identified separately in the report's source
|
|
192
|
+
fingerprints; Claude replay remains unverified.
|
|
193
|
+
|
|
194
|
+
| Verification group | Item | Result |
|
|
195
|
+
| --- | --- | --- |
|
|
196
|
+
| Live tool checks | Unique tools retested in limited scenarios | **14/14 (100%)**, 0 failed/unverified within this scope |
|
|
197
|
+
| Live tool checks | Registered inventory not repeated in this final run | **91 of 105** tools; historical evidence below is not a current full sweep |
|
|
198
|
+
| Named live harness cases | Fixture, isolation, lifecycle and grouped load checks | **101/102**, one Cinder storage-permission fixture failure, 0 skipped |
|
|
199
|
+
| Local unit tests | Locked environment, `python -m pytest -q tests` | **199/199 (100%)**, 0 failed/skipped; 21 added regressions |
|
|
200
|
+
| Bounded load requests | Shared-server, two-project bursts | **14/14**, actual overlap up to 8 |
|
|
201
|
+
| Bounded load requests | Same shared server, 120 seconds, four workers | **209/209**, median 2.03 s, p95 2.70 s, max 3.24 s |
|
|
202
|
+
| Backup recovery | After operator corrected one NFS directory permission | **6/6 fresh backups available**, both reader MCP state checks passed |
|
|
203
|
+
| Claude client | Minimal actual model API preflight | Blocked before tools: credit/balance error; no final-source Claude replay |
|
|
204
|
+
|
|
205
|
+
Network creation now uses the backend's default MTU when omitted; automatic
|
|
206
|
+
1450 and explicit 1400 were verified. Both `set_volume` and `set_server_volume`
|
|
207
|
+
attach/detach reached final states, with cross-project requests rejected. Both
|
|
208
|
+
search wrappers now honor offset/case sensitivity and correct `has_more`.
|
|
209
|
+
Default write restrictions remain in place. These successes do not certify all
|
|
210
|
+
actions of those tools or all 105 registered tools.
|
|
211
|
+
|
|
212
|
+
The Cinder fixture failure occurred through its API, independently of MCP. The
|
|
213
|
+
operator corrected the failing directory's group-write permission; the original
|
|
214
|
+
failure remains recorded alongside the successful targeted recovery. Actual
|
|
215
|
+
Claude same-URL duplicate registration was not established as a product defect;
|
|
216
|
+
single-entry/distinct-URL attempts also failed before tools. Restoring model API
|
|
217
|
+
access is required for that controlled comparison.
|
|
218
|
+
|
|
219
|
+
Earlier same-day results are consolidated in the final report's
|
|
220
|
+
[sanitized evidence](docs/expanded-validation-fixes-2026-11-02.json), under
|
|
221
|
+
`historical_evidence.earlier_runs`. The previous 33-tool classification and
|
|
222
|
+
41 actual Claude template attempts belong to the pre-fix source, not this
|
|
223
|
+
final source. The complete 105-tool snapshot below is also historical.
|
|
224
|
+
|
|
186
225
|
**Validation snapshot — 2026-10-30** (main working tree based on `dd98993`,
|
|
187
226
|
with the uncommitted fixes described in the report):
|
|
188
227
|
|
|
@@ -225,10 +264,10 @@ remaining test resources across 24 categories. See also
|
|
|
225
264
|
|
|
226
265
|
| OpenStack CLI Command | MCP Tool | Status | Notes |
|
|
227
266
|
|---------------------|---------|------|------|
|
|
228
|
-
| `openstack server list` | `get_instance` | ✅ |
|
|
229
|
-
| `openstack server show` | `get_instance` | ✅ |
|
|
267
|
+
| `openstack server list` | `get_instance` | ✅ | Separate reader projects each returned exactly ten owned VMs; bounded lab validation only |
|
|
268
|
+
| `openstack server show` | `get_instance` | ✅ | Own fixture queries completed; foreign private ID returned no details; no 16-owned-ID batch claim |
|
|
230
269
|
| `openstack server create` | `set_instance` (action="create") | ✅ | **ENHANCED** - Bulk creation support |
|
|
231
|
-
| `openstack server start/stop/reboot` | `set_instance` | ✅ |
|
|
270
|
+
| `openstack server start/stop/reboot` | `set_instance` | ✅ | Bulk stop/start final states verified for two test VMs per project; reboot not retested in this round |
|
|
232
271
|
| `openstack server delete` | `set_instance` (action="delete") | ✅ | **ENHANCED** - Bulk deletion with name_contains filtering |
|
|
233
272
|
| `openstack server backup create` | `set_server_backup` | ✅ | Nova backup action with rotation; asynchronous, no custom metadata |
|
|
234
273
|
| `openstack server image create` | `set_instance` (action="snapshot") | ✅ | Image/snapshot creation |
|
|
@@ -258,8 +297,8 @@ remaining test resources across 24 categories. See also
|
|
|
258
297
|
| `openstack server remove fixed ip` | `set_server_fixed_ip` (action="remove") | ✅ | Fixed IP removal |
|
|
259
298
|
| `openstack server add security group` | `set_server_security_group` (action="add") | ✅ | Security group addition |
|
|
260
299
|
| `openstack server remove security group` | `set_server_security_group` (action="remove") | ✅ | Security group removal |
|
|
261
|
-
| `openstack server add volume` | `set_server_volume` (action="attach") | ✅ |
|
|
262
|
-
| `openstack server remove volume` | `set_server_volume` (action="detach") | ✅ |
|
|
300
|
+
| `openstack server add volume` | `set_server_volume` (action="attach") | ✅ | Member attach reached in-use via set_server_volume; guest I/O not tested |
|
|
301
|
+
| `openstack server remove volume` | `set_server_volume` (action="detach") | ✅ | Member detach reached available via set_server_volume |
|
|
263
302
|
| `openstack server set` | `set_server_properties` (action="set") | ✅ | Server property setting |
|
|
264
303
|
| `openstack server unset` | `set_server_properties` (action="unset") | ✅ | Server property unsetting |
|
|
265
304
|
| `openstack server dump create` | `set_server_dump` | ❌ Unsupported | Returns an explicit unsupported result; no dump is created |
|
|
@@ -268,23 +307,23 @@ remaining test resources across 24 categories. See also
|
|
|
268
307
|
| `openstack server group create/delete` | `set_server_group` | ✅ | Server group management |
|
|
269
308
|
| `openstack flavor list` | `set_flavor` (action="list") | ✅ | Requires modification tools to be enabled for registration |
|
|
270
309
|
| `openstack flavor create/delete` | `set_flavor` | ✅ | Flavor management |
|
|
271
|
-
| `openstack keypair list` | `get_keypair_list` | ✅ |
|
|
272
|
-
| `openstack keypair create/delete` | `set_keypair` | ✅ |
|
|
273
|
-
| `openstack hypervisor list` | `get_hypervisor_details` |
|
|
274
|
-
| `openstack availability zone list` | `get_availability_zones` |
|
|
310
|
+
| `openstack keypair list` | `get_keypair_list` | ✅ | Empty scoped read completed; member keypair creation/deletion read-back tested separately |
|
|
311
|
+
| `openstack keypair create/delete` | `set_keypair` | ✅ | Explicit member MCP create/delete read-back passed; no successful Claude write workflow claimed |
|
|
312
|
+
| `openstack hypervisor list` | `get_hypervisor_details` | ⚠️ Live unverified | Reader policy denial; successful administrator MCP lookup was not obtained in this round |
|
|
313
|
+
| `openstack availability zone list` | `get_availability_zones` | ⚠️ Live unverified | Only policy-limited composite requests in this round; individual result not independently attributed |
|
|
275
314
|
|
|
276
315
|
### 2. 🌐 **Network (Neutron)**
|
|
277
316
|
|
|
278
317
|
| OpenStack CLI Command | MCP Tool | Status | Notes |
|
|
279
318
|
|---------------------|---------|------|------|
|
|
280
|
-
| `openstack network list` | `get_network_details` | ✅ |
|
|
281
|
-
| `openstack network show` | `get_network_details` (
|
|
282
|
-
| `openstack network create` | `set_networks` (action="create") | ✅ |
|
|
283
|
-
| `openstack network delete` | `set_networks` (action="delete") | ✅ |
|
|
319
|
+
| `openstack network list` | `get_network_details` | ✅ | Two owned private networks plus one policy-visible shared external network per reader; no other test project private networks |
|
|
320
|
+
| `openstack network show` | `get_network_details` (network_name) | ⚠️ Live unverified | Foreign-ID negative checked; dual-project positive named reader lookup not independently asserted |
|
|
321
|
+
| `openstack network create` | `set_networks` (action="create") | ✅ | Default mtu=0 omits the wire field: backend MTU 1450 verified; explicit 1400 retained in both member projects |
|
|
322
|
+
| `openstack network delete` | `set_networks` (action="delete") | ✅ | Both default/explicit-MTU test networks removed through actual TCP MCP, API absence confirmed |
|
|
284
323
|
| `openstack network set` | `set_networks` (action="update") | ✅ | **ENHANCED** - Bulk updates |
|
|
285
|
-
| `openstack subnet list` | `get_network_details` (includes subnets) | ✅ |
|
|
286
|
-
| `openstack subnet create/delete` | `set_subnets` | ✅ |
|
|
287
|
-
| `openstack router list` | `get_routers` |
|
|
324
|
+
| `openstack subnet list` | `get_network_details` (includes subnets) | ✅ | Owned and shared external network subnets returned; three visible subnets per test reader |
|
|
325
|
+
| `openstack subnet create/delete` | `set_subnets` | ✅ | Member TCP MCP subnet create read back; deletion allowed parent network removal in both projects |
|
|
326
|
+
| `openstack router list` | `get_routers` | ⚠️ Live unverified | Only part of composite error requests in this round; no independent reader result attribution |
|
|
288
327
|
| `openstack router create/delete` | `set_routers` | ✅ | Project-owned routers; attached interfaces are not removed automatically |
|
|
289
328
|
| `openstack floating ip list` | `get_floating_ips` | ✅ | Floating IP listing |
|
|
290
329
|
| `openstack floating ip create` | `set_floating_ip` (action="create") | ✅ | Floating IP creation |
|
|
@@ -292,38 +331,38 @@ remaining test resources across 24 categories. See also
|
|
|
292
331
|
| `openstack floating ip set` | `set_floating_ip` (action="set") | ✅ | Floating IP property setting |
|
|
293
332
|
| `openstack floating ip show` | `set_floating_ip` (action="show") | ✅ | Floating IP details |
|
|
294
333
|
| `openstack floating ip unset` | `set_floating_ip` (action="unset") | ✅ | Floating IP property clearing |
|
|
295
|
-
| `openstack floating ip pool list` | `get_floating_ip_pools` |
|
|
334
|
+
| `openstack floating ip pool list` | `get_floating_ip_pools` | ⚠️ Live unverified | Composite result not independently attributed; available global pool capacity remains unknown |
|
|
296
335
|
| `openstack floating ip port forwarding create` | `set_floating_ip_port_forwarding` (action="create") | ⚠️ Live unverified | Implemented; test platform port-forwarding endpoint returns HTTP 404 |
|
|
297
336
|
| `openstack floating ip port forwarding delete` | `set_floating_ip_port_forwarding` (action="delete") | ⚠️ Live unverified | Implemented; test platform port-forwarding endpoint returns HTTP 404 |
|
|
298
337
|
| `openstack floating ip port forwarding list` | `set_floating_ip_port_forwarding` (action="list") | ⚠️ Live unverified | Implemented; test platform port-forwarding endpoint returns HTTP 404 |
|
|
299
338
|
| `openstack floating ip port forwarding set` | `set_floating_ip_port_forwarding` (action="set") | ⚠️ Live unverified | Implemented; test platform port-forwarding endpoint returns HTTP 404 |
|
|
300
339
|
| `openstack floating ip port forwarding show` | `set_floating_ip_port_forwarding` (action="show") | ⚠️ Live unverified | Implemented; test platform port-forwarding endpoint returns HTTP 404 |
|
|
301
|
-
| `openstack security group list` | `get_security_groups` | ✅ |
|
|
340
|
+
| `openstack security group list` | `get_security_groups` | ✅ | Scoped reader list completed; default and test groups visible |
|
|
302
341
|
| `openstack security group create/delete` | `set_security_groups` | ✅ | Project-owned security groups |
|
|
303
|
-
| `openstack port list` | `
|
|
342
|
+
| `openstack port list` | `set_network_ports` (action="list") | ⚠️ Live unverified | Implemented list action requires modification-tool registration; not exercised in this round |
|
|
304
343
|
| `openstack port create/delete` | `set_network_ports` | ✅ | Port management |
|
|
305
344
|
| `openstack network qos policy list` | `get_network_qos_policies` | ⚠️ Live unverified | Implemented; test platform QoS endpoint returns HTTP 404 |
|
|
306
345
|
| `openstack network qos policy create` | `set_network_qos_policies` | ⚠️ Live unverified | Implemented; test platform QoS endpoint returns HTTP 404. Policy containers only; no bandwidth rules |
|
|
307
|
-
| `openstack network agent list` | `get_service_status` (includes agents) |
|
|
346
|
+
| `openstack network agent list` | `get_service_status` (includes agents) | ⚠️ Live unverified | Reader service-policy restrictions; partial data is not proof of global health |
|
|
308
347
|
| `openstack network agent set` | `set_network_agents` | ✅ | Enable/disable cloud-wide agents; usually admin-only |
|
|
309
348
|
|
|
310
349
|
### 3. 💾 **Storage (Cinder)**
|
|
311
350
|
|
|
312
351
|
| OpenStack CLI Command | MCP Tool | Status | Notes |
|
|
313
352
|
|---------------------|---------|------|------|
|
|
314
|
-
| `openstack volume list` | `get_volume_list` | ✅ |
|
|
315
|
-
| `openstack volume show` | `get_volume_list`
|
|
353
|
+
| `openstack volume list` | `get_volume_list` | ✅ | Exactly ten owned volumes per reader; no other test project volume IDs returned |
|
|
354
|
+
| `openstack volume show` | `get_volume_list` | ✅ | Listing-based client filtering; no dedicated get_volume_list filter argument |
|
|
316
355
|
| `openstack volume create/delete` | `set_volume` | ✅ | Volume creation/deletion |
|
|
317
|
-
| `openstack volume set` |
|
|
356
|
+
| `openstack volume set` | — | ❌ Not implemented | set_volume has no modify/update action; do not send this unsupported action |
|
|
318
357
|
| `openstack volume type list` | `get_volume_types` | ✅ | Volume type listing |
|
|
319
358
|
| `openstack volume type create/delete` | `set_volume_types` | ✅ | Volume type management; usually admin-only |
|
|
320
|
-
| `openstack volume snapshot list` | `get_volume_snapshots` | ✅ |
|
|
321
|
-
| `openstack volume snapshot create/delete` | `set_snapshot` | ✅ |
|
|
322
|
-
| `openstack backup list` | `get_volume_backups` | ✅ |
|
|
359
|
+
| `openstack volume snapshot list` | `get_volume_snapshots` | ✅ | Two owned base snapshots per reader; API final states checked |
|
|
360
|
+
| `openstack volume snapshot create/delete` | `set_snapshot` | ✅ | Explicit member MCP snapshots reached available and were deleted; no restore/I/O claim |
|
|
361
|
+
| `openstack backup list` | `get_volume_backups` | ✅ | Three owned available backups per reader; base backup creation used real Cinder APIs |
|
|
323
362
|
| `openstack backup create/delete` | `set_volume_backups` | ✅ | Volume backup management |
|
|
324
363
|
| `openstack volume transfer request list` | `get_volume_transfers` | ✅ | Request listing only; authorization keys are excluded |
|
|
325
364
|
| `openstack server volume list` | `get_server_volumes` | ✅ | Server volume listing |
|
|
326
|
-
| `openstack server add/remove volume` | `set_server_volume` | ✅ |
|
|
365
|
+
| `openstack server add/remove volume` | `set_server_volume` / `set_volume` (action="attach"/"detach") | ✅ | Both paths reached in-use then available in both member projects; foreign endpoints rejected; guest I/O not tested |
|
|
327
366
|
| `openstack volume group list` | `get_volume_groups` | ✅ | Requires Cinder generic groups (API >= 3.13) |
|
|
328
367
|
| `openstack volume group create` | `set_volume_groups` | ✅ | Create/list/show/delete; create requires group_type and volume_types |
|
|
329
368
|
| `openstack volume qos list` | `get_volume_qos` | ✅ | Cinder QoS specifications; subject to cloud policy |
|
|
@@ -349,22 +388,22 @@ remaining test resources across 24 categories. See also
|
|
|
349
388
|
|
|
350
389
|
| OpenStack CLI Command | MCP Tool | Status | Notes |
|
|
351
390
|
|---------------------|---------|------|------|
|
|
352
|
-
| `openstack user list` | `get_user_list` |
|
|
353
|
-
| `openstack user show` | `get_user_list`
|
|
391
|
+
| `openstack user list` | `get_user_list` | ⚠️ Live unverified | Reader denied by Keystone; explicit MCP failure observed; successful listing not validated in this round |
|
|
392
|
+
| `openstack user show` | `get_user_list` | ⚠️ Live unverified | Depends on policy-limited user listing; not independently validated for the new readers |
|
|
354
393
|
| `openstack user create/delete` | `set_users` | ✅ | Password from a server environment variable; no role grants |
|
|
355
394
|
| `openstack project list` | `get_project_details` | ✅ | Project listing |
|
|
356
395
|
| `openstack project show` | `get_project_details` (name param) | ✅ | Specific project query |
|
|
357
396
|
| `openstack project create/delete` | `set_project` | ✅ | Project management |
|
|
358
397
|
| `openstack role list` | `get_role_assignments` | ✅ | Role listing |
|
|
359
|
-
| `openstack role assignment list` | `get_role_assignments` |
|
|
398
|
+
| `openstack role assignment list` | `get_role_assignments` | ⚠️ Live unverified | Reader Keystone policy denial; not a successful data lookup |
|
|
360
399
|
| `openstack role create/delete` | `set_roles` | ✅ | Role management |
|
|
361
400
|
| `openstack domain list` | `get_domains` | ✅ | Subject to Keystone policy |
|
|
362
401
|
| `openstack domain create/delete` | `set_domains` | ✅ | Disable explicitly with update before delete |
|
|
363
402
|
| `openstack group list` | `get_identity_groups` | ✅ | Subject to Keystone policy |
|
|
364
403
|
| `openstack group create/delete` | `set_identity_groups` | ✅ | Group management |
|
|
365
|
-
| `openstack service list` | `get_service_status` |
|
|
404
|
+
| `openstack service list` | `get_service_status` | ⚠️ Live unverified | Reader service-policy restrictions; partial data is not proof of global health |
|
|
366
405
|
| `openstack service create/delete` | `set_services` | ✅ | Service management |
|
|
367
|
-
| `openstack endpoint list` | `get_service_status` (includes endpoints) |
|
|
406
|
+
| `openstack endpoint list` | `get_service_status` (includes endpoints) | ⚠️ Live unverified | Reader service-policy restrictions; partial data is not proof of global health |
|
|
368
407
|
|
|
369
408
|
### 6. 🔥 **Orchestration (Heat)**
|
|
370
409
|
|
|
@@ -479,9 +518,9 @@ remaining test resources across 24 categories. See also
|
|
|
479
518
|
|
|
480
519
|
| OpenStack CLI Command | MCP Tool | Status | Notes |
|
|
481
520
|
|---------------------|---------|------|------|
|
|
482
|
-
| Resource monitoring | `get_resource_monitoring` |
|
|
483
|
-
| Service status | `get_service_status` |
|
|
484
|
-
| Cluster overview | `get_service_status` + `get_resource_monitoring` |
|
|
521
|
+
| Resource monitoring | `get_resource_monitoring` | ⚠️ Live unverified | Reader physical-capacity policy restrictions; allocations are separate from capacity; no live utilization |
|
|
522
|
+
| Service status | `get_service_status` | ⚠️ Live unverified | Reader service-policy restrictions; partial data is not proof of global health |
|
|
523
|
+
| Cluster overview | `get_service_status` + `get_resource_monitoring` | ⚠️ Live unverified | Reader physical-capacity policy restrictions; allocations are separate from capacity; no live utilization |
|
|
485
524
|
| Service log metadata | `set_service_logs` | Partial | Service listing only; log retrieval is unavailable without a logging backend |
|
|
486
525
|
| Resource metadata | `set_metrics` | Partial | list/summary only; telemetry sample retrieval is unavailable |
|
|
487
526
|
| Alarm management | `set_alarms` | ⚠️ Live unverified | Implemented; Aodh/Gnocchi unavailable in the test platform. Requires services and collected metrics |
|
|
@@ -497,7 +536,7 @@ remaining test resources across 24 categories. See also
|
|
|
497
536
|
| `openstack quota delete` | `set_quota` (action="delete") | ✅ | Resets all three service quotas to defaults; requires modification tools |
|
|
498
537
|
| `openstack usage show` | `get_usage_statistics` | ✅ | Current-project Nova simple tenant usage; not monetary charges |
|
|
499
538
|
| `openstack limits show` | `get_quota` (includes limits) | ✅ | Limits query |
|
|
500
|
-
| Resource allocations | `get_resource_monitoring` |
|
|
539
|
+
| Resource allocations | `get_resource_monitoring` | ⚠️ Live unverified | Reader physical-capacity policy restrictions; allocations are separate from capacity; no live utilization |
|
|
501
540
|
|
|
502
541
|
---
|
|
503
542
|
|
|
@@ -1020,7 +1059,7 @@ get_instance_details(limit=50, offset=50) # Next 50 instances
|
|
|
1020
1059
|
get_instance_details(include_all=True) # All instances (use with caution)
|
|
1021
1060
|
|
|
1022
1061
|
# Optimized search for large datasets
|
|
1023
|
-
search_instances("web", "name", limit=20
|
|
1062
|
+
search_instances("web", "name", limit=20, offset=0, case_sensitive=False)
|
|
1024
1063
|
```
|
|
1025
1064
|
|
|
1026
1065
|
---
|
|
@@ -159,12 +159,51 @@ Post-Action Status:
|
|
|
159
159
|
### **Unified Resource Queries**
|
|
160
160
|
New consolidated `get_instance` tool replaces multiple separate tools:
|
|
161
161
|
- ❌ Old: `get_instance_details`, `get_instance_info`, `get_instance_status`, `get_instance_network_info`
|
|
162
|
-
- ✅ New: `get_instance(
|
|
162
|
+
- ✅ New: `get_instance(names="vm1,vm2")` - Single tool, comprehensive information
|
|
163
163
|
|
|
164
164
|
---
|
|
165
165
|
|
|
166
166
|
## 📊 OpenStack CLI vs MCP Tools Mapping
|
|
167
167
|
|
|
168
|
+
**Latest targeted validation — 2026-11-02:** working tree based on `6a36b6e`.
|
|
169
|
+
See the [fixes and final retest report](docs/expanded-validation-fixes-2026-11-02.md)
|
|
170
|
+
and [sanitized evidence](docs/expanded-validation-fixes-2026-11-02.json).
|
|
171
|
+
The final executable paths were tested with FastMCP **3.4.10** from `uv.lock`,
|
|
172
|
+
two ordinary-user projects, **20 VMs and 20 one-GiB volumes**. Post-test tool
|
|
173
|
+
wording/prompt corrections are identified separately in the report's source
|
|
174
|
+
fingerprints; Claude replay remains unverified.
|
|
175
|
+
|
|
176
|
+
| Verification group | Item | Result |
|
|
177
|
+
| --- | --- | --- |
|
|
178
|
+
| Live tool checks | Unique tools retested in limited scenarios | **14/14 (100%)**, 0 failed/unverified within this scope |
|
|
179
|
+
| Live tool checks | Registered inventory not repeated in this final run | **91 of 105** tools; historical evidence below is not a current full sweep |
|
|
180
|
+
| Named live harness cases | Fixture, isolation, lifecycle and grouped load checks | **101/102**, one Cinder storage-permission fixture failure, 0 skipped |
|
|
181
|
+
| Local unit tests | Locked environment, `python -m pytest -q tests` | **199/199 (100%)**, 0 failed/skipped; 21 added regressions |
|
|
182
|
+
| Bounded load requests | Shared-server, two-project bursts | **14/14**, actual overlap up to 8 |
|
|
183
|
+
| Bounded load requests | Same shared server, 120 seconds, four workers | **209/209**, median 2.03 s, p95 2.70 s, max 3.24 s |
|
|
184
|
+
| Backup recovery | After operator corrected one NFS directory permission | **6/6 fresh backups available**, both reader MCP state checks passed |
|
|
185
|
+
| Claude client | Minimal actual model API preflight | Blocked before tools: credit/balance error; no final-source Claude replay |
|
|
186
|
+
|
|
187
|
+
Network creation now uses the backend's default MTU when omitted; automatic
|
|
188
|
+
1450 and explicit 1400 were verified. Both `set_volume` and `set_server_volume`
|
|
189
|
+
attach/detach reached final states, with cross-project requests rejected. Both
|
|
190
|
+
search wrappers now honor offset/case sensitivity and correct `has_more`.
|
|
191
|
+
Default write restrictions remain in place. These successes do not certify all
|
|
192
|
+
actions of those tools or all 105 registered tools.
|
|
193
|
+
|
|
194
|
+
The Cinder fixture failure occurred through its API, independently of MCP. The
|
|
195
|
+
operator corrected the failing directory's group-write permission; the original
|
|
196
|
+
failure remains recorded alongside the successful targeted recovery. Actual
|
|
197
|
+
Claude same-URL duplicate registration was not established as a product defect;
|
|
198
|
+
single-entry/distinct-URL attempts also failed before tools. Restoring model API
|
|
199
|
+
access is required for that controlled comparison.
|
|
200
|
+
|
|
201
|
+
Earlier same-day results are consolidated in the final report's
|
|
202
|
+
[sanitized evidence](docs/expanded-validation-fixes-2026-11-02.json), under
|
|
203
|
+
`historical_evidence.earlier_runs`. The previous 33-tool classification and
|
|
204
|
+
41 actual Claude template attempts belong to the pre-fix source, not this
|
|
205
|
+
final source. The complete 105-tool snapshot below is also historical.
|
|
206
|
+
|
|
168
207
|
**Validation snapshot — 2026-10-30** (main working tree based on `dd98993`,
|
|
169
208
|
with the uncommitted fixes described in the report):
|
|
170
209
|
|
|
@@ -207,10 +246,10 @@ remaining test resources across 24 categories. See also
|
|
|
207
246
|
|
|
208
247
|
| OpenStack CLI Command | MCP Tool | Status | Notes |
|
|
209
248
|
|---------------------|---------|------|------|
|
|
210
|
-
| `openstack server list` | `get_instance` | ✅ |
|
|
211
|
-
| `openstack server show` | `get_instance` | ✅ |
|
|
249
|
+
| `openstack server list` | `get_instance` | ✅ | Separate reader projects each returned exactly ten owned VMs; bounded lab validation only |
|
|
250
|
+
| `openstack server show` | `get_instance` | ✅ | Own fixture queries completed; foreign private ID returned no details; no 16-owned-ID batch claim |
|
|
212
251
|
| `openstack server create` | `set_instance` (action="create") | ✅ | **ENHANCED** - Bulk creation support |
|
|
213
|
-
| `openstack server start/stop/reboot` | `set_instance` | ✅ |
|
|
252
|
+
| `openstack server start/stop/reboot` | `set_instance` | ✅ | Bulk stop/start final states verified for two test VMs per project; reboot not retested in this round |
|
|
214
253
|
| `openstack server delete` | `set_instance` (action="delete") | ✅ | **ENHANCED** - Bulk deletion with name_contains filtering |
|
|
215
254
|
| `openstack server backup create` | `set_server_backup` | ✅ | Nova backup action with rotation; asynchronous, no custom metadata |
|
|
216
255
|
| `openstack server image create` | `set_instance` (action="snapshot") | ✅ | Image/snapshot creation |
|
|
@@ -240,8 +279,8 @@ remaining test resources across 24 categories. See also
|
|
|
240
279
|
| `openstack server remove fixed ip` | `set_server_fixed_ip` (action="remove") | ✅ | Fixed IP removal |
|
|
241
280
|
| `openstack server add security group` | `set_server_security_group` (action="add") | ✅ | Security group addition |
|
|
242
281
|
| `openstack server remove security group` | `set_server_security_group` (action="remove") | ✅ | Security group removal |
|
|
243
|
-
| `openstack server add volume` | `set_server_volume` (action="attach") | ✅ |
|
|
244
|
-
| `openstack server remove volume` | `set_server_volume` (action="detach") | ✅ |
|
|
282
|
+
| `openstack server add volume` | `set_server_volume` (action="attach") | ✅ | Member attach reached in-use via set_server_volume; guest I/O not tested |
|
|
283
|
+
| `openstack server remove volume` | `set_server_volume` (action="detach") | ✅ | Member detach reached available via set_server_volume |
|
|
245
284
|
| `openstack server set` | `set_server_properties` (action="set") | ✅ | Server property setting |
|
|
246
285
|
| `openstack server unset` | `set_server_properties` (action="unset") | ✅ | Server property unsetting |
|
|
247
286
|
| `openstack server dump create` | `set_server_dump` | ❌ Unsupported | Returns an explicit unsupported result; no dump is created |
|
|
@@ -250,23 +289,23 @@ remaining test resources across 24 categories. See also
|
|
|
250
289
|
| `openstack server group create/delete` | `set_server_group` | ✅ | Server group management |
|
|
251
290
|
| `openstack flavor list` | `set_flavor` (action="list") | ✅ | Requires modification tools to be enabled for registration |
|
|
252
291
|
| `openstack flavor create/delete` | `set_flavor` | ✅ | Flavor management |
|
|
253
|
-
| `openstack keypair list` | `get_keypair_list` | ✅ |
|
|
254
|
-
| `openstack keypair create/delete` | `set_keypair` | ✅ |
|
|
255
|
-
| `openstack hypervisor list` | `get_hypervisor_details` |
|
|
256
|
-
| `openstack availability zone list` | `get_availability_zones` |
|
|
292
|
+
| `openstack keypair list` | `get_keypair_list` | ✅ | Empty scoped read completed; member keypair creation/deletion read-back tested separately |
|
|
293
|
+
| `openstack keypair create/delete` | `set_keypair` | ✅ | Explicit member MCP create/delete read-back passed; no successful Claude write workflow claimed |
|
|
294
|
+
| `openstack hypervisor list` | `get_hypervisor_details` | ⚠️ Live unverified | Reader policy denial; successful administrator MCP lookup was not obtained in this round |
|
|
295
|
+
| `openstack availability zone list` | `get_availability_zones` | ⚠️ Live unverified | Only policy-limited composite requests in this round; individual result not independently attributed |
|
|
257
296
|
|
|
258
297
|
### 2. 🌐 **Network (Neutron)**
|
|
259
298
|
|
|
260
299
|
| OpenStack CLI Command | MCP Tool | Status | Notes |
|
|
261
300
|
|---------------------|---------|------|------|
|
|
262
|
-
| `openstack network list` | `get_network_details` | ✅ |
|
|
263
|
-
| `openstack network show` | `get_network_details` (
|
|
264
|
-
| `openstack network create` | `set_networks` (action="create") | ✅ |
|
|
265
|
-
| `openstack network delete` | `set_networks` (action="delete") | ✅ |
|
|
301
|
+
| `openstack network list` | `get_network_details` | ✅ | Two owned private networks plus one policy-visible shared external network per reader; no other test project private networks |
|
|
302
|
+
| `openstack network show` | `get_network_details` (network_name) | ⚠️ Live unverified | Foreign-ID negative checked; dual-project positive named reader lookup not independently asserted |
|
|
303
|
+
| `openstack network create` | `set_networks` (action="create") | ✅ | Default mtu=0 omits the wire field: backend MTU 1450 verified; explicit 1400 retained in both member projects |
|
|
304
|
+
| `openstack network delete` | `set_networks` (action="delete") | ✅ | Both default/explicit-MTU test networks removed through actual TCP MCP, API absence confirmed |
|
|
266
305
|
| `openstack network set` | `set_networks` (action="update") | ✅ | **ENHANCED** - Bulk updates |
|
|
267
|
-
| `openstack subnet list` | `get_network_details` (includes subnets) | ✅ |
|
|
268
|
-
| `openstack subnet create/delete` | `set_subnets` | ✅ |
|
|
269
|
-
| `openstack router list` | `get_routers` |
|
|
306
|
+
| `openstack subnet list` | `get_network_details` (includes subnets) | ✅ | Owned and shared external network subnets returned; three visible subnets per test reader |
|
|
307
|
+
| `openstack subnet create/delete` | `set_subnets` | ✅ | Member TCP MCP subnet create read back; deletion allowed parent network removal in both projects |
|
|
308
|
+
| `openstack router list` | `get_routers` | ⚠️ Live unverified | Only part of composite error requests in this round; no independent reader result attribution |
|
|
270
309
|
| `openstack router create/delete` | `set_routers` | ✅ | Project-owned routers; attached interfaces are not removed automatically |
|
|
271
310
|
| `openstack floating ip list` | `get_floating_ips` | ✅ | Floating IP listing |
|
|
272
311
|
| `openstack floating ip create` | `set_floating_ip` (action="create") | ✅ | Floating IP creation |
|
|
@@ -274,38 +313,38 @@ remaining test resources across 24 categories. See also
|
|
|
274
313
|
| `openstack floating ip set` | `set_floating_ip` (action="set") | ✅ | Floating IP property setting |
|
|
275
314
|
| `openstack floating ip show` | `set_floating_ip` (action="show") | ✅ | Floating IP details |
|
|
276
315
|
| `openstack floating ip unset` | `set_floating_ip` (action="unset") | ✅ | Floating IP property clearing |
|
|
277
|
-
| `openstack floating ip pool list` | `get_floating_ip_pools` |
|
|
316
|
+
| `openstack floating ip pool list` | `get_floating_ip_pools` | ⚠️ Live unverified | Composite result not independently attributed; available global pool capacity remains unknown |
|
|
278
317
|
| `openstack floating ip port forwarding create` | `set_floating_ip_port_forwarding` (action="create") | ⚠️ Live unverified | Implemented; test platform port-forwarding endpoint returns HTTP 404 |
|
|
279
318
|
| `openstack floating ip port forwarding delete` | `set_floating_ip_port_forwarding` (action="delete") | ⚠️ Live unverified | Implemented; test platform port-forwarding endpoint returns HTTP 404 |
|
|
280
319
|
| `openstack floating ip port forwarding list` | `set_floating_ip_port_forwarding` (action="list") | ⚠️ Live unverified | Implemented; test platform port-forwarding endpoint returns HTTP 404 |
|
|
281
320
|
| `openstack floating ip port forwarding set` | `set_floating_ip_port_forwarding` (action="set") | ⚠️ Live unverified | Implemented; test platform port-forwarding endpoint returns HTTP 404 |
|
|
282
321
|
| `openstack floating ip port forwarding show` | `set_floating_ip_port_forwarding` (action="show") | ⚠️ Live unverified | Implemented; test platform port-forwarding endpoint returns HTTP 404 |
|
|
283
|
-
| `openstack security group list` | `get_security_groups` | ✅ |
|
|
322
|
+
| `openstack security group list` | `get_security_groups` | ✅ | Scoped reader list completed; default and test groups visible |
|
|
284
323
|
| `openstack security group create/delete` | `set_security_groups` | ✅ | Project-owned security groups |
|
|
285
|
-
| `openstack port list` | `
|
|
324
|
+
| `openstack port list` | `set_network_ports` (action="list") | ⚠️ Live unverified | Implemented list action requires modification-tool registration; not exercised in this round |
|
|
286
325
|
| `openstack port create/delete` | `set_network_ports` | ✅ | Port management |
|
|
287
326
|
| `openstack network qos policy list` | `get_network_qos_policies` | ⚠️ Live unverified | Implemented; test platform QoS endpoint returns HTTP 404 |
|
|
288
327
|
| `openstack network qos policy create` | `set_network_qos_policies` | ⚠️ Live unverified | Implemented; test platform QoS endpoint returns HTTP 404. Policy containers only; no bandwidth rules |
|
|
289
|
-
| `openstack network agent list` | `get_service_status` (includes agents) |
|
|
328
|
+
| `openstack network agent list` | `get_service_status` (includes agents) | ⚠️ Live unverified | Reader service-policy restrictions; partial data is not proof of global health |
|
|
290
329
|
| `openstack network agent set` | `set_network_agents` | ✅ | Enable/disable cloud-wide agents; usually admin-only |
|
|
291
330
|
|
|
292
331
|
### 3. 💾 **Storage (Cinder)**
|
|
293
332
|
|
|
294
333
|
| OpenStack CLI Command | MCP Tool | Status | Notes |
|
|
295
334
|
|---------------------|---------|------|------|
|
|
296
|
-
| `openstack volume list` | `get_volume_list` | ✅ |
|
|
297
|
-
| `openstack volume show` | `get_volume_list`
|
|
335
|
+
| `openstack volume list` | `get_volume_list` | ✅ | Exactly ten owned volumes per reader; no other test project volume IDs returned |
|
|
336
|
+
| `openstack volume show` | `get_volume_list` | ✅ | Listing-based client filtering; no dedicated get_volume_list filter argument |
|
|
298
337
|
| `openstack volume create/delete` | `set_volume` | ✅ | Volume creation/deletion |
|
|
299
|
-
| `openstack volume set` |
|
|
338
|
+
| `openstack volume set` | — | ❌ Not implemented | set_volume has no modify/update action; do not send this unsupported action |
|
|
300
339
|
| `openstack volume type list` | `get_volume_types` | ✅ | Volume type listing |
|
|
301
340
|
| `openstack volume type create/delete` | `set_volume_types` | ✅ | Volume type management; usually admin-only |
|
|
302
|
-
| `openstack volume snapshot list` | `get_volume_snapshots` | ✅ |
|
|
303
|
-
| `openstack volume snapshot create/delete` | `set_snapshot` | ✅ |
|
|
304
|
-
| `openstack backup list` | `get_volume_backups` | ✅ |
|
|
341
|
+
| `openstack volume snapshot list` | `get_volume_snapshots` | ✅ | Two owned base snapshots per reader; API final states checked |
|
|
342
|
+
| `openstack volume snapshot create/delete` | `set_snapshot` | ✅ | Explicit member MCP snapshots reached available and were deleted; no restore/I/O claim |
|
|
343
|
+
| `openstack backup list` | `get_volume_backups` | ✅ | Three owned available backups per reader; base backup creation used real Cinder APIs |
|
|
305
344
|
| `openstack backup create/delete` | `set_volume_backups` | ✅ | Volume backup management |
|
|
306
345
|
| `openstack volume transfer request list` | `get_volume_transfers` | ✅ | Request listing only; authorization keys are excluded |
|
|
307
346
|
| `openstack server volume list` | `get_server_volumes` | ✅ | Server volume listing |
|
|
308
|
-
| `openstack server add/remove volume` | `set_server_volume` | ✅ |
|
|
347
|
+
| `openstack server add/remove volume` | `set_server_volume` / `set_volume` (action="attach"/"detach") | ✅ | Both paths reached in-use then available in both member projects; foreign endpoints rejected; guest I/O not tested |
|
|
309
348
|
| `openstack volume group list` | `get_volume_groups` | ✅ | Requires Cinder generic groups (API >= 3.13) |
|
|
310
349
|
| `openstack volume group create` | `set_volume_groups` | ✅ | Create/list/show/delete; create requires group_type and volume_types |
|
|
311
350
|
| `openstack volume qos list` | `get_volume_qos` | ✅ | Cinder QoS specifications; subject to cloud policy |
|
|
@@ -331,22 +370,22 @@ remaining test resources across 24 categories. See also
|
|
|
331
370
|
|
|
332
371
|
| OpenStack CLI Command | MCP Tool | Status | Notes |
|
|
333
372
|
|---------------------|---------|------|------|
|
|
334
|
-
| `openstack user list` | `get_user_list` |
|
|
335
|
-
| `openstack user show` | `get_user_list`
|
|
373
|
+
| `openstack user list` | `get_user_list` | ⚠️ Live unverified | Reader denied by Keystone; explicit MCP failure observed; successful listing not validated in this round |
|
|
374
|
+
| `openstack user show` | `get_user_list` | ⚠️ Live unverified | Depends on policy-limited user listing; not independently validated for the new readers |
|
|
336
375
|
| `openstack user create/delete` | `set_users` | ✅ | Password from a server environment variable; no role grants |
|
|
337
376
|
| `openstack project list` | `get_project_details` | ✅ | Project listing |
|
|
338
377
|
| `openstack project show` | `get_project_details` (name param) | ✅ | Specific project query |
|
|
339
378
|
| `openstack project create/delete` | `set_project` | ✅ | Project management |
|
|
340
379
|
| `openstack role list` | `get_role_assignments` | ✅ | Role listing |
|
|
341
|
-
| `openstack role assignment list` | `get_role_assignments` |
|
|
380
|
+
| `openstack role assignment list` | `get_role_assignments` | ⚠️ Live unverified | Reader Keystone policy denial; not a successful data lookup |
|
|
342
381
|
| `openstack role create/delete` | `set_roles` | ✅ | Role management |
|
|
343
382
|
| `openstack domain list` | `get_domains` | ✅ | Subject to Keystone policy |
|
|
344
383
|
| `openstack domain create/delete` | `set_domains` | ✅ | Disable explicitly with update before delete |
|
|
345
384
|
| `openstack group list` | `get_identity_groups` | ✅ | Subject to Keystone policy |
|
|
346
385
|
| `openstack group create/delete` | `set_identity_groups` | ✅ | Group management |
|
|
347
|
-
| `openstack service list` | `get_service_status` |
|
|
386
|
+
| `openstack service list` | `get_service_status` | ⚠️ Live unverified | Reader service-policy restrictions; partial data is not proof of global health |
|
|
348
387
|
| `openstack service create/delete` | `set_services` | ✅ | Service management |
|
|
349
|
-
| `openstack endpoint list` | `get_service_status` (includes endpoints) |
|
|
388
|
+
| `openstack endpoint list` | `get_service_status` (includes endpoints) | ⚠️ Live unverified | Reader service-policy restrictions; partial data is not proof of global health |
|
|
350
389
|
|
|
351
390
|
### 6. 🔥 **Orchestration (Heat)**
|
|
352
391
|
|
|
@@ -461,9 +500,9 @@ remaining test resources across 24 categories. See also
|
|
|
461
500
|
|
|
462
501
|
| OpenStack CLI Command | MCP Tool | Status | Notes |
|
|
463
502
|
|---------------------|---------|------|------|
|
|
464
|
-
| Resource monitoring | `get_resource_monitoring` |
|
|
465
|
-
| Service status | `get_service_status` |
|
|
466
|
-
| Cluster overview | `get_service_status` + `get_resource_monitoring` |
|
|
503
|
+
| Resource monitoring | `get_resource_monitoring` | ⚠️ Live unverified | Reader physical-capacity policy restrictions; allocations are separate from capacity; no live utilization |
|
|
504
|
+
| Service status | `get_service_status` | ⚠️ Live unverified | Reader service-policy restrictions; partial data is not proof of global health |
|
|
505
|
+
| Cluster overview | `get_service_status` + `get_resource_monitoring` | ⚠️ Live unverified | Reader physical-capacity policy restrictions; allocations are separate from capacity; no live utilization |
|
|
467
506
|
| Service log metadata | `set_service_logs` | Partial | Service listing only; log retrieval is unavailable without a logging backend |
|
|
468
507
|
| Resource metadata | `set_metrics` | Partial | list/summary only; telemetry sample retrieval is unavailable |
|
|
469
508
|
| Alarm management | `set_alarms` | ⚠️ Live unverified | Implemented; Aodh/Gnocchi unavailable in the test platform. Requires services and collected metrics |
|
|
@@ -479,7 +518,7 @@ remaining test resources across 24 categories. See also
|
|
|
479
518
|
| `openstack quota delete` | `set_quota` (action="delete") | ✅ | Resets all three service quotas to defaults; requires modification tools |
|
|
480
519
|
| `openstack usage show` | `get_usage_statistics` | ✅ | Current-project Nova simple tenant usage; not monetary charges |
|
|
481
520
|
| `openstack limits show` | `get_quota` (includes limits) | ✅ | Limits query |
|
|
482
|
-
| Resource allocations | `get_resource_monitoring` |
|
|
521
|
+
| Resource allocations | `get_resource_monitoring` | ⚠️ Live unverified | Reader physical-capacity policy restrictions; allocations are separate from capacity; no live utilization |
|
|
483
522
|
|
|
484
523
|
---
|
|
485
524
|
|
|
@@ -1002,7 +1041,7 @@ get_instance_details(limit=50, offset=50) # Next 50 instances
|
|
|
1002
1041
|
get_instance_details(include_all=True) # All instances (use with caution)
|
|
1003
1042
|
|
|
1004
1043
|
# Optimized search for large datasets
|
|
1005
|
-
search_instances("web", "name", limit=20
|
|
1044
|
+
search_instances("web", "name", limit=20, offset=0, case_sensitive=False)
|
|
1006
1045
|
```
|
|
1007
1046
|
|
|
1008
1047
|
---
|