mcp-openstack-ops 3.6.0__tar.gz → 3.6.2__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.2}/AGENTS.md +6 -4
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/PKG-INFO +49 -78
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/README.md +48 -77
- mcp_openstack_ops-3.6.0/docs/multi-user-phase1.md → mcp_openstack_ops-3.6.2/docs/multi-user-guide.md +27 -133
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/prompt_template.md +22 -22
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/services/compute.py +93 -26
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/services/identity.py +2 -7
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/services/network.py +25 -20
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/services/storage.py +47 -81
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/get_instance.py +26 -13
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/get_instance_details.py +8 -4
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/get_instances_by_status.py +10 -5
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/get_keypair_list.py +5 -4
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/get_network_details.py +10 -5
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/get_routers.py +5 -4
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/get_security_groups.py +5 -1
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/get_server_events.py +5 -1
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/get_user_list.py +5 -4
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/get_volume_list.py +10 -5
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/get_volume_snapshots.py +5 -4
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/search_instances.py +16 -11
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_networks.py +4 -4
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_volume.py +14 -17
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/user_connection.py +80 -12
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops.egg-info/PKG-INFO +49 -78
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops.egg-info/SOURCES.txt +3 -6
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops.egg-info/scm_file_list.json +3 -6
- mcp_openstack_ops-3.6.2/src/mcp_openstack_ops.egg-info/scm_version.json +8 -0
- mcp_openstack_ops-3.6.2/tests/test_expanded_validation_fixes.py +144 -0
- mcp_openstack_ops-3.6.2/tests/test_phase1_stabilization.py +202 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/tests/test_user_connection.py +111 -0
- mcp_openstack_ops-3.6.0/docs/integration-validation.md +0 -64
- mcp_openstack_ops-3.6.0/docs/main-live-retest-2026-10-30.json +0 -2342
- mcp_openstack_ops-3.6.0/docs/main-live-retest-2026-10-30.md +0 -268
- mcp_openstack_ops-3.6.0/docs/main-live-validation-2026-10-30.json +0 -2745
- mcp_openstack_ops-3.6.0/docs/main-live-validation-2026-10-30.md +0 -315
- 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.2}/.env.example +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/.env.test +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/.github/FUNDING.yml +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/.github/copilot-instructions.md +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/.github/dependabot.yml +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/.github/workflows/pypi-publish.yml +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/.github/workflows/tests.yml +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/.gitignore +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/.gitleaks.toml +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/.pre-commit-config.yaml +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/.python-version +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/Dockerfile.MCP-Server +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/Dockerfile.MCPO-Proxy +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/LICENSE +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/MANIFEST.in +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/build-mcp-server-docker-image.sh +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/build-mcpo-server-docker-image.sh +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/diagnose_openstack.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/docker-compose.yml +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/img/MCP-Workflow-of-Quickstart-Tutorial.png +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/img/screenshot-claude-desktop.png +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/img/screenshot-example-cluster-status.png +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/img/screenshot-openstack-dashboard.png +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/main.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/mcp-config.json.http +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/mcp-config.json.multi-project +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/mcp-config.json.stdio +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/pyproject.toml +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/scripts/check_release.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/scripts/mcp-server-docker-cmd.sh +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/scripts/publish_release.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/scripts/run-mcp-inspector-local.sh +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/scripts/run-mcp-inspector-pypi.sh +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/setup.cfg +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/__init__.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/__main__.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/connection.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/functions.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/mcp_main.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/services/__init__.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/services/alarms.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/services/core.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/services/image.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/services/load_balancer/__init__.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/services/load_balancer/amphorae.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/services/load_balancer/core.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/services/load_balancer/health_monitors.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/services/load_balancer/l7_policies.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/services/load_balancer/listeners.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/services/load_balancer/management.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/services/load_balancer/pools.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/services/monitoring.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/services/orchestration.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/__init__.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/get_availability_zones.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/get_domains.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/get_floating_ip_pools.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/get_floating_ips.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/get_heat_stack_details.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/get_heat_stacks.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/get_hypervisor_details.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/get_identity_groups.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/get_image_detail_list.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/get_image_members.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/get_instance_by_name.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/get_load_balancer_amphorae.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/get_load_balancer_availability_zones.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/get_load_balancer_details.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/get_load_balancer_flavors.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/get_load_balancer_health_monitors.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/get_load_balancer_l7_policies.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/get_load_balancer_l7_rules.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/get_load_balancer_list.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/get_load_balancer_listeners.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/get_load_balancer_pool_members.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/get_load_balancer_pools.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/get_load_balancer_providers.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/get_load_balancer_quotas.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/get_network_qos_policies.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/get_project_details.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/get_quota.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/get_resource_monitoring.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/get_role_assignments.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/get_server_groups.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/get_server_volumes.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/get_service_status.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/get_usage_statistics.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/get_volume_backups.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/get_volume_groups.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/get_volume_qos.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/get_volume_transfers.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/get_volume_types.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_alarms.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_compute_agents.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_domains.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_flavor.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_floating_ip.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_floating_ip_port_forwarding.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_heat_stack.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_identity_groups.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_image.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_image_members.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_image_metadata.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_image_visibility.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_instance.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_keypair.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_load_balancer.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_load_balancer_amphora.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_load_balancer_availability_zone.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_load_balancer_flavor.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_load_balancer_health_monitor.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_load_balancer_l7_policy.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_load_balancer_l7_rule.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_load_balancer_listener.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_load_balancer_pool.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_load_balancer_pool_member.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_load_balancer_quota.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_metrics.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_network_agents.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_network_ports.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_network_qos_policies.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_project.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_quota.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_roles.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_routers.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_security_groups.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_server_backup.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_server_dump.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_server_fixed_ip.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_server_floating_ip.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_server_group.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_server_migration.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_server_network.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_server_properties.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_server_security_group.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_server_volume.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_service_logs.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_services.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_snapshot.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_subnets.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_users.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_volume_backups.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_volume_groups.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_volume_qos.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops/tools/set_volume_types.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops.egg-info/dependency_links.txt +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops.egg-info/entry_points.txt +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops.egg-info/requires.txt +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/src/mcp_openstack_ops.egg-info/top_level.txt +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/test_compatibility.sh +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/test_project_isolation.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/tests/test_connection.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/tests/test_floating_ip.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/tests/test_instance_image.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/tests/test_live_regressions.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/tests/test_operational_tools.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/tests/test_publish_release.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/tests/test_release.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/tests/test_tool_registration.py +0 -0
- {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.2}/uv.lock +0 -0
|
@@ -33,10 +33,12 @@ consistent with the resulting implementation and actual verification.
|
|
|
33
33
|
Label targeted retests as partial; do not extrapolate them to the full toolset.
|
|
34
34
|
Document polling limits and distinguish accepted requests from confirmed final
|
|
35
35
|
resource states. Explain changes in test conditions that affect comparisons.
|
|
36
|
-
- Keep
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
36
|
+
- Keep `docs/` for reusable user guidance only. Do not create or retain
|
|
37
|
+
issue-specific reports, dated test results, or evidence JSON in `docs/`, or
|
|
38
|
+
embed those records in usage guides. Report case-specific verification results,
|
|
39
|
+
limits, failures, and cleanup in chat unless the user explicitly requests a
|
|
40
|
+
separate artifact. Never expose credentials, private endpoints, or sensitive
|
|
41
|
+
resource data. Do not add report links to README.md.
|
|
40
42
|
- Before completion, check summary arithmetic, percentages, tool/action names,
|
|
41
43
|
Status/Notes, source identity, and evidence links for agreement. If README.ko.md
|
|
42
44
|
exists, maintain equivalent information in both README files.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mcp-openstack-ops
|
|
3
|
-
Version: 3.6.
|
|
3
|
+
Version: 3.6.2
|
|
4
4
|
Summary: OpenStack operations automation MCP server
|
|
5
5
|
Author-email: JungJungIn <call518@gmail.com>
|
|
6
6
|
Requires-Python: >=3.12
|
|
@@ -42,7 +42,7 @@ Dynamic: license-file
|
|
|
42
42
|
## Features
|
|
43
43
|
|
|
44
44
|
Experimental per-user remote connections are available for testing with the
|
|
45
|
-
opt-in `--multi-user` mode. See the [
|
|
45
|
+
opt-in `--multi-user` mode. See the [multi-user setup and usage guide](docs/multi-user-guide.md)
|
|
46
46
|
for authentication, client limitations, and the test checklist. Administrator
|
|
47
47
|
cross-project queries are outside this phase.
|
|
48
48
|
|
|
@@ -177,47 +177,18 @@ 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
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
</thead>
|
|
193
|
-
<tbody>
|
|
194
|
-
<tr><td rowspan="5">Live tool checks</td><td>Registered tools invoked and classified</td><td><strong>105</strong></td></tr>
|
|
195
|
-
<tr><td>Passed within the exercised live scenarios</td><td><strong>74</strong></td></tr>
|
|
196
|
-
<tr><td>Implemented, live unverified: service/API unavailable</td><td><strong>28</strong></td></tr>
|
|
197
|
-
<tr><td>Intentional capability limitations</td><td><strong>3</strong></td></tr>
|
|
198
|
-
<tr><td>Reproduced code defects / state-check timeouts in the retest</td><td><strong>0 / 0</strong></td></tr>
|
|
199
|
-
<tr><td>Local unit tests</td><td>Test cases in <code>tests/test_*.py</code></td><td><strong>160/160 (100%)</strong></td></tr>
|
|
200
|
-
</tbody>
|
|
201
|
-
</table>
|
|
202
|
-
|
|
203
|
-
State polling allowed 180 seconds; soft reboot completed in 131.66 seconds
|
|
204
|
-
(previously it exceeded the 90-second check). No reboot implementation change
|
|
205
|
-
was needed.
|
|
206
|
-
|
|
207
|
-
The 10 previously reproduced tool defects were corrected. The 28 unavailable
|
|
208
|
-
paths are **not live-validated successes**: 24 Octavia tools, two Neutron QoS
|
|
209
|
-
tools, one Aodh tool, and one Neutron port-forwarding tool. Each affected table
|
|
210
|
-
row is marked **⚠️ Live unverified**. An absent tool/action is marked **❌ Not
|
|
211
|
-
implemented** rather than presented as an available feature.
|
|
212
|
-
|
|
213
|
-
✅ means an implemented API path; it does not certify every action or backend.
|
|
214
|
-
The live-pass count covers only the scenarios in the
|
|
215
|
-
[latest retest report](docs/main-live-retest-2026-10-30.md), with
|
|
216
|
-
[sanitized evidence](docs/main-live-retest-2026-10-30.json). API policy, asynchronous
|
|
217
|
-
completion, production HTTPS/client compatibility, load, and guest I/O limits
|
|
218
|
-
are stated there. All test resources were cleaned up; the final audit found zero
|
|
219
|
-
remaining test resources across 24 categories. See also
|
|
220
|
-
[API prerequisites and result semantics](#api-prerequisites-and-result-semantics).
|
|
186
|
+
✅ denotes an implemented API path, not certification of every action or
|
|
187
|
+
OpenStack deployment. **⚠️ Live unverified** identifies paths without successful
|
|
188
|
+
live validation; **❌ Not implemented** identifies unavailable capabilities.
|
|
189
|
+
Service availability, permissions, and asynchronous completion affect results.
|
|
190
|
+
See [API prerequisites and result semantics](#api-prerequisites-and-result-semantics)
|
|
191
|
+
and the [multi-user setup guide](docs/multi-user-guide.md).
|
|
221
192
|
|
|
222
193
|
**Detailed Mapping by Category**
|
|
223
194
|
|
|
@@ -225,10 +196,10 @@ remaining test resources across 24 categories. See also
|
|
|
225
196
|
|
|
226
197
|
| OpenStack CLI Command | MCP Tool | Status | Notes |
|
|
227
198
|
|---------------------|---------|------|------|
|
|
228
|
-
| `openstack server list` | `get_instance` | ✅ |
|
|
229
|
-
| `openstack server show` | `get_instance` | ✅ |
|
|
199
|
+
| `openstack server list` | `get_instance` | ✅ | Separate reader projects each returned exactly ten owned VMs; bounded lab validation only |
|
|
200
|
+
| `openstack server show` | `get_instance` | ✅ | Own fixture queries completed; foreign private ID returned no details; no 16-owned-ID batch claim |
|
|
230
201
|
| `openstack server create` | `set_instance` (action="create") | ✅ | **ENHANCED** - Bulk creation support |
|
|
231
|
-
| `openstack server start/stop/reboot` | `set_instance` | ✅ |
|
|
202
|
+
| `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
203
|
| `openstack server delete` | `set_instance` (action="delete") | ✅ | **ENHANCED** - Bulk deletion with name_contains filtering |
|
|
233
204
|
| `openstack server backup create` | `set_server_backup` | ✅ | Nova backup action with rotation; asynchronous, no custom metadata |
|
|
234
205
|
| `openstack server image create` | `set_instance` (action="snapshot") | ✅ | Image/snapshot creation |
|
|
@@ -258,33 +229,33 @@ remaining test resources across 24 categories. See also
|
|
|
258
229
|
| `openstack server remove fixed ip` | `set_server_fixed_ip` (action="remove") | ✅ | Fixed IP removal |
|
|
259
230
|
| `openstack server add security group` | `set_server_security_group` (action="add") | ✅ | Security group addition |
|
|
260
231
|
| `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") | ✅ |
|
|
232
|
+
| `openstack server add volume` | `set_server_volume` (action="attach") | ✅ | Member attach reached in-use via set_server_volume; guest I/O not tested |
|
|
233
|
+
| `openstack server remove volume` | `set_server_volume` (action="detach") | ✅ | Member detach reached available via set_server_volume |
|
|
263
234
|
| `openstack server set` | `set_server_properties` (action="set") | ✅ | Server property setting |
|
|
264
235
|
| `openstack server unset` | `set_server_properties` (action="unset") | ✅ | Server property unsetting |
|
|
265
236
|
| `openstack server dump create` | `set_server_dump` | ❌ Unsupported | Returns an explicit unsupported result; no dump is created |
|
|
266
|
-
| `openstack server event list` | `get_server_events` | ✅ |
|
|
237
|
+
| `openstack server event list` | `get_server_events` | ✅ | Pass the server name or UUID via `instance_name`, not `server_id`; event visibility follows Nova policy |
|
|
267
238
|
| `openstack server group list` | `get_server_groups` | ✅ | Server group listing |
|
|
268
239
|
| `openstack server group create/delete` | `set_server_group` | ✅ | Server group management |
|
|
269
240
|
| `openstack flavor list` | `set_flavor` (action="list") | ✅ | Requires modification tools to be enabled for registration |
|
|
270
241
|
| `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` |
|
|
242
|
+
| `openstack keypair list` | `get_keypair_list` | ✅ | Empty scoped read completed; member keypair creation/deletion read-back tested separately |
|
|
243
|
+
| `openstack keypair create/delete` | `set_keypair` | ✅ | Explicit member MCP create/delete read-back passed; no successful Claude write workflow claimed |
|
|
244
|
+
| `openstack hypervisor list` | `get_hypervisor_details` | ⚠️ Live unverified | Reader policy denial; successful administrator MCP lookup was not obtained in this round |
|
|
245
|
+
| `openstack availability zone list` | `get_availability_zones` | ⚠️ Live unverified | Only policy-limited composite requests in this round; individual result not independently attributed |
|
|
275
246
|
|
|
276
247
|
### 2. 🌐 **Network (Neutron)**
|
|
277
248
|
|
|
278
249
|
| OpenStack CLI Command | MCP Tool | Status | Notes |
|
|
279
250
|
|---------------------|---------|------|------|
|
|
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") | ✅ |
|
|
251
|
+
| `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 |
|
|
252
|
+
| `openstack network show` | `get_network_details` (network_name) | ⚠️ Live unverified | Foreign-ID negative checked; dual-project positive named reader lookup not independently asserted |
|
|
253
|
+
| `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 |
|
|
254
|
+
| `openstack network delete` | `set_networks` (action="delete") | ✅ | Both default/explicit-MTU test networks removed through actual TCP MCP, API absence confirmed |
|
|
284
255
|
| `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` |
|
|
256
|
+
| `openstack subnet list` | `get_network_details` (includes subnets) | ✅ | Owned and shared external network subnets returned; three visible subnets per test reader |
|
|
257
|
+
| `openstack subnet create/delete` | `set_subnets` | ✅ | Member TCP MCP subnet create read back; deletion allowed parent network removal in both projects |
|
|
258
|
+
| `openstack router list` | `get_routers` | ⚠️ Live unverified | Only part of composite error requests in this round; no independent reader result attribution |
|
|
288
259
|
| `openstack router create/delete` | `set_routers` | ✅ | Project-owned routers; attached interfaces are not removed automatically |
|
|
289
260
|
| `openstack floating ip list` | `get_floating_ips` | ✅ | Floating IP listing |
|
|
290
261
|
| `openstack floating ip create` | `set_floating_ip` (action="create") | ✅ | Floating IP creation |
|
|
@@ -292,38 +263,38 @@ remaining test resources across 24 categories. See also
|
|
|
292
263
|
| `openstack floating ip set` | `set_floating_ip` (action="set") | ✅ | Floating IP property setting |
|
|
293
264
|
| `openstack floating ip show` | `set_floating_ip` (action="show") | ✅ | Floating IP details |
|
|
294
265
|
| `openstack floating ip unset` | `set_floating_ip` (action="unset") | ✅ | Floating IP property clearing |
|
|
295
|
-
| `openstack floating ip pool list` | `get_floating_ip_pools` |
|
|
266
|
+
| `openstack floating ip pool list` | `get_floating_ip_pools` | ⚠️ Live unverified | Composite result not independently attributed; available global pool capacity remains unknown |
|
|
296
267
|
| `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
268
|
| `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
269
|
| `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
270
|
| `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
271
|
| `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` | ✅ |
|
|
272
|
+
| `openstack security group list` | `get_security_groups` | ✅ | Scoped reader list completed; default and test groups visible |
|
|
302
273
|
| `openstack security group create/delete` | `set_security_groups` | ✅ | Project-owned security groups |
|
|
303
|
-
| `openstack port list` | `
|
|
274
|
+
| `openstack port list` | `set_network_ports` (action="list") | ⚠️ Live unverified | Implemented list action requires modification-tool registration; not exercised in this round |
|
|
304
275
|
| `openstack port create/delete` | `set_network_ports` | ✅ | Port management |
|
|
305
276
|
| `openstack network qos policy list` | `get_network_qos_policies` | ⚠️ Live unverified | Implemented; test platform QoS endpoint returns HTTP 404 |
|
|
306
277
|
| `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) |
|
|
278
|
+
| `openstack network agent list` | `get_service_status` (includes agents) | ⚠️ Live unverified | Reader service-policy restrictions; partial data is not proof of global health |
|
|
308
279
|
| `openstack network agent set` | `set_network_agents` | ✅ | Enable/disable cloud-wide agents; usually admin-only |
|
|
309
280
|
|
|
310
281
|
### 3. 💾 **Storage (Cinder)**
|
|
311
282
|
|
|
312
283
|
| OpenStack CLI Command | MCP Tool | Status | Notes |
|
|
313
284
|
|---------------------|---------|------|------|
|
|
314
|
-
| `openstack volume list` | `get_volume_list` | ✅ |
|
|
315
|
-
| `openstack volume show` | `get_volume_list`
|
|
285
|
+
| `openstack volume list` | `get_volume_list` | ✅ | Exactly ten owned volumes per reader; no other test project volume IDs returned |
|
|
286
|
+
| `openstack volume show` | `get_volume_list` | ✅ | Listing-based client filtering; no dedicated get_volume_list filter argument |
|
|
316
287
|
| `openstack volume create/delete` | `set_volume` | ✅ | Volume creation/deletion |
|
|
317
|
-
| `openstack volume set` |
|
|
288
|
+
| `openstack volume set` | — | ❌ Not implemented | set_volume has no modify/update action; do not send this unsupported action |
|
|
318
289
|
| `openstack volume type list` | `get_volume_types` | ✅ | Volume type listing |
|
|
319
290
|
| `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` | ✅ |
|
|
291
|
+
| `openstack volume snapshot list` | `get_volume_snapshots` | ✅ | Two owned base snapshots per reader; API final states checked |
|
|
292
|
+
| `openstack volume snapshot create/delete` | `set_snapshot` | ✅ | Explicit member MCP snapshots reached available and were deleted; no restore/I/O claim |
|
|
293
|
+
| `openstack backup list` | `get_volume_backups` | ✅ | Three owned available backups per reader; base backup creation used real Cinder APIs |
|
|
323
294
|
| `openstack backup create/delete` | `set_volume_backups` | ✅ | Volume backup management |
|
|
324
295
|
| `openstack volume transfer request list` | `get_volume_transfers` | ✅ | Request listing only; authorization keys are excluded |
|
|
325
296
|
| `openstack server volume list` | `get_server_volumes` | ✅ | Server volume listing |
|
|
326
|
-
| `openstack server add/remove volume` | `set_server_volume` | ✅ |
|
|
297
|
+
| `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
298
|
| `openstack volume group list` | `get_volume_groups` | ✅ | Requires Cinder generic groups (API >= 3.13) |
|
|
328
299
|
| `openstack volume group create` | `set_volume_groups` | ✅ | Create/list/show/delete; create requires group_type and volume_types |
|
|
329
300
|
| `openstack volume qos list` | `get_volume_qos` | ✅ | Cinder QoS specifications; subject to cloud policy |
|
|
@@ -349,22 +320,22 @@ remaining test resources across 24 categories. See also
|
|
|
349
320
|
|
|
350
321
|
| OpenStack CLI Command | MCP Tool | Status | Notes |
|
|
351
322
|
|---------------------|---------|------|------|
|
|
352
|
-
| `openstack user list` | `get_user_list` |
|
|
353
|
-
| `openstack user show` | `get_user_list`
|
|
323
|
+
| `openstack user list` | `get_user_list` | ⚠️ Live unverified | Reader denied by Keystone; explicit MCP failure observed; successful listing not validated in this round |
|
|
324
|
+
| `openstack user show` | `get_user_list` | ⚠️ Live unverified | Depends on policy-limited user listing; not independently validated for the new readers |
|
|
354
325
|
| `openstack user create/delete` | `set_users` | ✅ | Password from a server environment variable; no role grants |
|
|
355
326
|
| `openstack project list` | `get_project_details` | ✅ | Project listing |
|
|
356
327
|
| `openstack project show` | `get_project_details` (name param) | ✅ | Specific project query |
|
|
357
328
|
| `openstack project create/delete` | `set_project` | ✅ | Project management |
|
|
358
329
|
| `openstack role list` | `get_role_assignments` | ✅ | Role listing |
|
|
359
|
-
| `openstack role assignment list` | `get_role_assignments` |
|
|
330
|
+
| `openstack role assignment list` | `get_role_assignments` | ⚠️ Live unverified | Reader Keystone policy denial; not a successful data lookup |
|
|
360
331
|
| `openstack role create/delete` | `set_roles` | ✅ | Role management |
|
|
361
332
|
| `openstack domain list` | `get_domains` | ✅ | Subject to Keystone policy |
|
|
362
333
|
| `openstack domain create/delete` | `set_domains` | ✅ | Disable explicitly with update before delete |
|
|
363
334
|
| `openstack group list` | `get_identity_groups` | ✅ | Subject to Keystone policy |
|
|
364
335
|
| `openstack group create/delete` | `set_identity_groups` | ✅ | Group management |
|
|
365
|
-
| `openstack service list` | `get_service_status` |
|
|
336
|
+
| `openstack service list` | `get_service_status` | ⚠️ Live unverified | Reader service-policy restrictions; partial data is not proof of global health |
|
|
366
337
|
| `openstack service create/delete` | `set_services` | ✅ | Service management |
|
|
367
|
-
| `openstack endpoint list` | `get_service_status` (includes endpoints) |
|
|
338
|
+
| `openstack endpoint list` | `get_service_status` (includes endpoints) | ⚠️ Live unverified | Reader service-policy restrictions; partial data is not proof of global health |
|
|
368
339
|
|
|
369
340
|
### 6. 🔥 **Orchestration (Heat)**
|
|
370
341
|
|
|
@@ -479,9 +450,9 @@ remaining test resources across 24 categories. See also
|
|
|
479
450
|
|
|
480
451
|
| OpenStack CLI Command | MCP Tool | Status | Notes |
|
|
481
452
|
|---------------------|---------|------|------|
|
|
482
|
-
| Resource monitoring | `get_resource_monitoring` |
|
|
483
|
-
| Service status | `get_service_status` |
|
|
484
|
-
| Cluster overview | `get_service_status` + `get_resource_monitoring` |
|
|
453
|
+
| Resource monitoring | `get_resource_monitoring` | ⚠️ Live unverified | Reader physical-capacity policy restrictions; allocations are separate from capacity; no live utilization |
|
|
454
|
+
| Service status | `get_service_status` | ⚠️ Live unverified | Reader service-policy restrictions; partial data is not proof of global health |
|
|
455
|
+
| Cluster overview | `get_service_status` + `get_resource_monitoring` | ⚠️ Live unverified | Reader physical-capacity policy restrictions; allocations are separate from capacity; no live utilization |
|
|
485
456
|
| Service log metadata | `set_service_logs` | Partial | Service listing only; log retrieval is unavailable without a logging backend |
|
|
486
457
|
| Resource metadata | `set_metrics` | Partial | list/summary only; telemetry sample retrieval is unavailable |
|
|
487
458
|
| Alarm management | `set_alarms` | ⚠️ Live unverified | Implemented; Aodh/Gnocchi unavailable in the test platform. Requires services and collected metrics |
|
|
@@ -497,13 +468,13 @@ remaining test resources across 24 categories. See also
|
|
|
497
468
|
| `openstack quota delete` | `set_quota` (action="delete") | ✅ | Resets all three service quotas to defaults; requires modification tools |
|
|
498
469
|
| `openstack usage show` | `get_usage_statistics` | ✅ | Current-project Nova simple tenant usage; not monetary charges |
|
|
499
470
|
| `openstack limits show` | `get_quota` (includes limits) | ✅ | Limits query |
|
|
500
|
-
| Resource allocations | `get_resource_monitoring` |
|
|
471
|
+
| Resource allocations | `get_resource_monitoring` | ⚠️ Live unverified | Reader physical-capacity policy restrictions; allocations are separate from capacity; no live utilization |
|
|
501
472
|
|
|
502
473
|
---
|
|
503
474
|
|
|
504
475
|
### API prerequisites and result semantics
|
|
505
476
|
|
|
506
|
-
The feature table marks implemented API paths, not verification against every OpenStack deployment.
|
|
477
|
+
The feature table marks implemented API paths, not verification against every OpenStack deployment. Service and policy requirements must be checked in the target deployment. A missing service, extension, required microversion, or permission is an operation failure, not an empty successful result.
|
|
507
478
|
|
|
508
479
|
- **Modification tools:** the MCP server registers `set_*` management tools only when `ALLOW_MODIFY_OPERATIONS=true`. Existing action guards also reject writes when disabled. Dedicated read-only `get_*` tools remain available. API authorization is enforced by the target cloud; agent, user, domain, type and QoS administration may require elevated OpenStack roles.
|
|
509
480
|
- **Alarms:** `set_alarms` calls the Keystone catalog's `alarming` endpoint for the configured interface/region. It supports list/create/show/delete of project alarms and creates `gnocchi_resources_threshold` alarms. Aodh, Gnocchi, the specified resource and a collected metric are required. The default metric is `cpu_util`, which is not collected by every deployment. `metric`, `resource_type`, `aggregation_method`, `granularity`, `evaluation_periods`, and `alarm_actions` can be supplied. An empty action list creates an alarm without notifications. There is no simulation fallback.
|
|
@@ -705,7 +676,7 @@ unset OPENSTACK_MCP_TOKEN
|
|
|
705
676
|
```
|
|
706
677
|
|
|
707
678
|
This Bearer configuration uses the server's configured OpenStack account. For
|
|
708
|
-
experimental per-user authentication, see the [
|
|
679
|
+
experimental per-user authentication, see the [multi-user guide](docs/multi-user-guide.md).
|
|
709
680
|
See also the [Claude Code MCP documentation](https://code.claude.com/docs/en/mcp).
|
|
710
681
|
|
|
711
682
|
## Server Configuration
|
|
@@ -1020,7 +991,7 @@ get_instance_details(limit=50, offset=50) # Next 50 instances
|
|
|
1020
991
|
get_instance_details(include_all=True) # All instances (use with caution)
|
|
1021
992
|
|
|
1022
993
|
# Optimized search for large datasets
|
|
1023
|
-
search_instances("web", "name", limit=20
|
|
994
|
+
search_instances("web", "name", limit=20, offset=0, case_sensitive=False)
|
|
1024
995
|
```
|
|
1025
996
|
|
|
1026
997
|
---
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
## Features
|
|
25
25
|
|
|
26
26
|
Experimental per-user remote connections are available for testing with the
|
|
27
|
-
opt-in `--multi-user` mode. See the [
|
|
27
|
+
opt-in `--multi-user` mode. See the [multi-user setup and usage guide](docs/multi-user-guide.md)
|
|
28
28
|
for authentication, client limitations, and the test checklist. Administrator
|
|
29
29
|
cross-project queries are outside this phase.
|
|
30
30
|
|
|
@@ -159,47 +159,18 @@ 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
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
</thead>
|
|
175
|
-
<tbody>
|
|
176
|
-
<tr><td rowspan="5">Live tool checks</td><td>Registered tools invoked and classified</td><td><strong>105</strong></td></tr>
|
|
177
|
-
<tr><td>Passed within the exercised live scenarios</td><td><strong>74</strong></td></tr>
|
|
178
|
-
<tr><td>Implemented, live unverified: service/API unavailable</td><td><strong>28</strong></td></tr>
|
|
179
|
-
<tr><td>Intentional capability limitations</td><td><strong>3</strong></td></tr>
|
|
180
|
-
<tr><td>Reproduced code defects / state-check timeouts in the retest</td><td><strong>0 / 0</strong></td></tr>
|
|
181
|
-
<tr><td>Local unit tests</td><td>Test cases in <code>tests/test_*.py</code></td><td><strong>160/160 (100%)</strong></td></tr>
|
|
182
|
-
</tbody>
|
|
183
|
-
</table>
|
|
184
|
-
|
|
185
|
-
State polling allowed 180 seconds; soft reboot completed in 131.66 seconds
|
|
186
|
-
(previously it exceeded the 90-second check). No reboot implementation change
|
|
187
|
-
was needed.
|
|
188
|
-
|
|
189
|
-
The 10 previously reproduced tool defects were corrected. The 28 unavailable
|
|
190
|
-
paths are **not live-validated successes**: 24 Octavia tools, two Neutron QoS
|
|
191
|
-
tools, one Aodh tool, and one Neutron port-forwarding tool. Each affected table
|
|
192
|
-
row is marked **⚠️ Live unverified**. An absent tool/action is marked **❌ Not
|
|
193
|
-
implemented** rather than presented as an available feature.
|
|
194
|
-
|
|
195
|
-
✅ means an implemented API path; it does not certify every action or backend.
|
|
196
|
-
The live-pass count covers only the scenarios in the
|
|
197
|
-
[latest retest report](docs/main-live-retest-2026-10-30.md), with
|
|
198
|
-
[sanitized evidence](docs/main-live-retest-2026-10-30.json). API policy, asynchronous
|
|
199
|
-
completion, production HTTPS/client compatibility, load, and guest I/O limits
|
|
200
|
-
are stated there. All test resources were cleaned up; the final audit found zero
|
|
201
|
-
remaining test resources across 24 categories. See also
|
|
202
|
-
[API prerequisites and result semantics](#api-prerequisites-and-result-semantics).
|
|
168
|
+
✅ denotes an implemented API path, not certification of every action or
|
|
169
|
+
OpenStack deployment. **⚠️ Live unverified** identifies paths without successful
|
|
170
|
+
live validation; **❌ Not implemented** identifies unavailable capabilities.
|
|
171
|
+
Service availability, permissions, and asynchronous completion affect results.
|
|
172
|
+
See [API prerequisites and result semantics](#api-prerequisites-and-result-semantics)
|
|
173
|
+
and the [multi-user setup guide](docs/multi-user-guide.md).
|
|
203
174
|
|
|
204
175
|
**Detailed Mapping by Category**
|
|
205
176
|
|
|
@@ -207,10 +178,10 @@ remaining test resources across 24 categories. See also
|
|
|
207
178
|
|
|
208
179
|
| OpenStack CLI Command | MCP Tool | Status | Notes |
|
|
209
180
|
|---------------------|---------|------|------|
|
|
210
|
-
| `openstack server list` | `get_instance` | ✅ |
|
|
211
|
-
| `openstack server show` | `get_instance` | ✅ |
|
|
181
|
+
| `openstack server list` | `get_instance` | ✅ | Separate reader projects each returned exactly ten owned VMs; bounded lab validation only |
|
|
182
|
+
| `openstack server show` | `get_instance` | ✅ | Own fixture queries completed; foreign private ID returned no details; no 16-owned-ID batch claim |
|
|
212
183
|
| `openstack server create` | `set_instance` (action="create") | ✅ | **ENHANCED** - Bulk creation support |
|
|
213
|
-
| `openstack server start/stop/reboot` | `set_instance` | ✅ |
|
|
184
|
+
| `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
185
|
| `openstack server delete` | `set_instance` (action="delete") | ✅ | **ENHANCED** - Bulk deletion with name_contains filtering |
|
|
215
186
|
| `openstack server backup create` | `set_server_backup` | ✅ | Nova backup action with rotation; asynchronous, no custom metadata |
|
|
216
187
|
| `openstack server image create` | `set_instance` (action="snapshot") | ✅ | Image/snapshot creation |
|
|
@@ -240,33 +211,33 @@ remaining test resources across 24 categories. See also
|
|
|
240
211
|
| `openstack server remove fixed ip` | `set_server_fixed_ip` (action="remove") | ✅ | Fixed IP removal |
|
|
241
212
|
| `openstack server add security group` | `set_server_security_group` (action="add") | ✅ | Security group addition |
|
|
242
213
|
| `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") | ✅ |
|
|
214
|
+
| `openstack server add volume` | `set_server_volume` (action="attach") | ✅ | Member attach reached in-use via set_server_volume; guest I/O not tested |
|
|
215
|
+
| `openstack server remove volume` | `set_server_volume` (action="detach") | ✅ | Member detach reached available via set_server_volume |
|
|
245
216
|
| `openstack server set` | `set_server_properties` (action="set") | ✅ | Server property setting |
|
|
246
217
|
| `openstack server unset` | `set_server_properties` (action="unset") | ✅ | Server property unsetting |
|
|
247
218
|
| `openstack server dump create` | `set_server_dump` | ❌ Unsupported | Returns an explicit unsupported result; no dump is created |
|
|
248
|
-
| `openstack server event list` | `get_server_events` | ✅ |
|
|
219
|
+
| `openstack server event list` | `get_server_events` | ✅ | Pass the server name or UUID via `instance_name`, not `server_id`; event visibility follows Nova policy |
|
|
249
220
|
| `openstack server group list` | `get_server_groups` | ✅ | Server group listing |
|
|
250
221
|
| `openstack server group create/delete` | `set_server_group` | ✅ | Server group management |
|
|
251
222
|
| `openstack flavor list` | `set_flavor` (action="list") | ✅ | Requires modification tools to be enabled for registration |
|
|
252
223
|
| `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` |
|
|
224
|
+
| `openstack keypair list` | `get_keypair_list` | ✅ | Empty scoped read completed; member keypair creation/deletion read-back tested separately |
|
|
225
|
+
| `openstack keypair create/delete` | `set_keypair` | ✅ | Explicit member MCP create/delete read-back passed; no successful Claude write workflow claimed |
|
|
226
|
+
| `openstack hypervisor list` | `get_hypervisor_details` | ⚠️ Live unverified | Reader policy denial; successful administrator MCP lookup was not obtained in this round |
|
|
227
|
+
| `openstack availability zone list` | `get_availability_zones` | ⚠️ Live unverified | Only policy-limited composite requests in this round; individual result not independently attributed |
|
|
257
228
|
|
|
258
229
|
### 2. 🌐 **Network (Neutron)**
|
|
259
230
|
|
|
260
231
|
| OpenStack CLI Command | MCP Tool | Status | Notes |
|
|
261
232
|
|---------------------|---------|------|------|
|
|
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") | ✅ |
|
|
233
|
+
| `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 |
|
|
234
|
+
| `openstack network show` | `get_network_details` (network_name) | ⚠️ Live unverified | Foreign-ID negative checked; dual-project positive named reader lookup not independently asserted |
|
|
235
|
+
| `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 |
|
|
236
|
+
| `openstack network delete` | `set_networks` (action="delete") | ✅ | Both default/explicit-MTU test networks removed through actual TCP MCP, API absence confirmed |
|
|
266
237
|
| `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` |
|
|
238
|
+
| `openstack subnet list` | `get_network_details` (includes subnets) | ✅ | Owned and shared external network subnets returned; three visible subnets per test reader |
|
|
239
|
+
| `openstack subnet create/delete` | `set_subnets` | ✅ | Member TCP MCP subnet create read back; deletion allowed parent network removal in both projects |
|
|
240
|
+
| `openstack router list` | `get_routers` | ⚠️ Live unverified | Only part of composite error requests in this round; no independent reader result attribution |
|
|
270
241
|
| `openstack router create/delete` | `set_routers` | ✅ | Project-owned routers; attached interfaces are not removed automatically |
|
|
271
242
|
| `openstack floating ip list` | `get_floating_ips` | ✅ | Floating IP listing |
|
|
272
243
|
| `openstack floating ip create` | `set_floating_ip` (action="create") | ✅ | Floating IP creation |
|
|
@@ -274,38 +245,38 @@ remaining test resources across 24 categories. See also
|
|
|
274
245
|
| `openstack floating ip set` | `set_floating_ip` (action="set") | ✅ | Floating IP property setting |
|
|
275
246
|
| `openstack floating ip show` | `set_floating_ip` (action="show") | ✅ | Floating IP details |
|
|
276
247
|
| `openstack floating ip unset` | `set_floating_ip` (action="unset") | ✅ | Floating IP property clearing |
|
|
277
|
-
| `openstack floating ip pool list` | `get_floating_ip_pools` |
|
|
248
|
+
| `openstack floating ip pool list` | `get_floating_ip_pools` | ⚠️ Live unverified | Composite result not independently attributed; available global pool capacity remains unknown |
|
|
278
249
|
| `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
250
|
| `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
251
|
| `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
252
|
| `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
253
|
| `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` | ✅ |
|
|
254
|
+
| `openstack security group list` | `get_security_groups` | ✅ | Scoped reader list completed; default and test groups visible |
|
|
284
255
|
| `openstack security group create/delete` | `set_security_groups` | ✅ | Project-owned security groups |
|
|
285
|
-
| `openstack port list` | `
|
|
256
|
+
| `openstack port list` | `set_network_ports` (action="list") | ⚠️ Live unverified | Implemented list action requires modification-tool registration; not exercised in this round |
|
|
286
257
|
| `openstack port create/delete` | `set_network_ports` | ✅ | Port management |
|
|
287
258
|
| `openstack network qos policy list` | `get_network_qos_policies` | ⚠️ Live unverified | Implemented; test platform QoS endpoint returns HTTP 404 |
|
|
288
259
|
| `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) |
|
|
260
|
+
| `openstack network agent list` | `get_service_status` (includes agents) | ⚠️ Live unverified | Reader service-policy restrictions; partial data is not proof of global health |
|
|
290
261
|
| `openstack network agent set` | `set_network_agents` | ✅ | Enable/disable cloud-wide agents; usually admin-only |
|
|
291
262
|
|
|
292
263
|
### 3. 💾 **Storage (Cinder)**
|
|
293
264
|
|
|
294
265
|
| OpenStack CLI Command | MCP Tool | Status | Notes |
|
|
295
266
|
|---------------------|---------|------|------|
|
|
296
|
-
| `openstack volume list` | `get_volume_list` | ✅ |
|
|
297
|
-
| `openstack volume show` | `get_volume_list`
|
|
267
|
+
| `openstack volume list` | `get_volume_list` | ✅ | Exactly ten owned volumes per reader; no other test project volume IDs returned |
|
|
268
|
+
| `openstack volume show` | `get_volume_list` | ✅ | Listing-based client filtering; no dedicated get_volume_list filter argument |
|
|
298
269
|
| `openstack volume create/delete` | `set_volume` | ✅ | Volume creation/deletion |
|
|
299
|
-
| `openstack volume set` |
|
|
270
|
+
| `openstack volume set` | — | ❌ Not implemented | set_volume has no modify/update action; do not send this unsupported action |
|
|
300
271
|
| `openstack volume type list` | `get_volume_types` | ✅ | Volume type listing |
|
|
301
272
|
| `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` | ✅ |
|
|
273
|
+
| `openstack volume snapshot list` | `get_volume_snapshots` | ✅ | Two owned base snapshots per reader; API final states checked |
|
|
274
|
+
| `openstack volume snapshot create/delete` | `set_snapshot` | ✅ | Explicit member MCP snapshots reached available and were deleted; no restore/I/O claim |
|
|
275
|
+
| `openstack backup list` | `get_volume_backups` | ✅ | Three owned available backups per reader; base backup creation used real Cinder APIs |
|
|
305
276
|
| `openstack backup create/delete` | `set_volume_backups` | ✅ | Volume backup management |
|
|
306
277
|
| `openstack volume transfer request list` | `get_volume_transfers` | ✅ | Request listing only; authorization keys are excluded |
|
|
307
278
|
| `openstack server volume list` | `get_server_volumes` | ✅ | Server volume listing |
|
|
308
|
-
| `openstack server add/remove volume` | `set_server_volume` | ✅ |
|
|
279
|
+
| `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
280
|
| `openstack volume group list` | `get_volume_groups` | ✅ | Requires Cinder generic groups (API >= 3.13) |
|
|
310
281
|
| `openstack volume group create` | `set_volume_groups` | ✅ | Create/list/show/delete; create requires group_type and volume_types |
|
|
311
282
|
| `openstack volume qos list` | `get_volume_qos` | ✅ | Cinder QoS specifications; subject to cloud policy |
|
|
@@ -331,22 +302,22 @@ remaining test resources across 24 categories. See also
|
|
|
331
302
|
|
|
332
303
|
| OpenStack CLI Command | MCP Tool | Status | Notes |
|
|
333
304
|
|---------------------|---------|------|------|
|
|
334
|
-
| `openstack user list` | `get_user_list` |
|
|
335
|
-
| `openstack user show` | `get_user_list`
|
|
305
|
+
| `openstack user list` | `get_user_list` | ⚠️ Live unverified | Reader denied by Keystone; explicit MCP failure observed; successful listing not validated in this round |
|
|
306
|
+
| `openstack user show` | `get_user_list` | ⚠️ Live unverified | Depends on policy-limited user listing; not independently validated for the new readers |
|
|
336
307
|
| `openstack user create/delete` | `set_users` | ✅ | Password from a server environment variable; no role grants |
|
|
337
308
|
| `openstack project list` | `get_project_details` | ✅ | Project listing |
|
|
338
309
|
| `openstack project show` | `get_project_details` (name param) | ✅ | Specific project query |
|
|
339
310
|
| `openstack project create/delete` | `set_project` | ✅ | Project management |
|
|
340
311
|
| `openstack role list` | `get_role_assignments` | ✅ | Role listing |
|
|
341
|
-
| `openstack role assignment list` | `get_role_assignments` |
|
|
312
|
+
| `openstack role assignment list` | `get_role_assignments` | ⚠️ Live unverified | Reader Keystone policy denial; not a successful data lookup |
|
|
342
313
|
| `openstack role create/delete` | `set_roles` | ✅ | Role management |
|
|
343
314
|
| `openstack domain list` | `get_domains` | ✅ | Subject to Keystone policy |
|
|
344
315
|
| `openstack domain create/delete` | `set_domains` | ✅ | Disable explicitly with update before delete |
|
|
345
316
|
| `openstack group list` | `get_identity_groups` | ✅ | Subject to Keystone policy |
|
|
346
317
|
| `openstack group create/delete` | `set_identity_groups` | ✅ | Group management |
|
|
347
|
-
| `openstack service list` | `get_service_status` |
|
|
318
|
+
| `openstack service list` | `get_service_status` | ⚠️ Live unverified | Reader service-policy restrictions; partial data is not proof of global health |
|
|
348
319
|
| `openstack service create/delete` | `set_services` | ✅ | Service management |
|
|
349
|
-
| `openstack endpoint list` | `get_service_status` (includes endpoints) |
|
|
320
|
+
| `openstack endpoint list` | `get_service_status` (includes endpoints) | ⚠️ Live unverified | Reader service-policy restrictions; partial data is not proof of global health |
|
|
350
321
|
|
|
351
322
|
### 6. 🔥 **Orchestration (Heat)**
|
|
352
323
|
|
|
@@ -461,9 +432,9 @@ remaining test resources across 24 categories. See also
|
|
|
461
432
|
|
|
462
433
|
| OpenStack CLI Command | MCP Tool | Status | Notes |
|
|
463
434
|
|---------------------|---------|------|------|
|
|
464
|
-
| Resource monitoring | `get_resource_monitoring` |
|
|
465
|
-
| Service status | `get_service_status` |
|
|
466
|
-
| Cluster overview | `get_service_status` + `get_resource_monitoring` |
|
|
435
|
+
| Resource monitoring | `get_resource_monitoring` | ⚠️ Live unverified | Reader physical-capacity policy restrictions; allocations are separate from capacity; no live utilization |
|
|
436
|
+
| Service status | `get_service_status` | ⚠️ Live unverified | Reader service-policy restrictions; partial data is not proof of global health |
|
|
437
|
+
| Cluster overview | `get_service_status` + `get_resource_monitoring` | ⚠️ Live unverified | Reader physical-capacity policy restrictions; allocations are separate from capacity; no live utilization |
|
|
467
438
|
| Service log metadata | `set_service_logs` | Partial | Service listing only; log retrieval is unavailable without a logging backend |
|
|
468
439
|
| Resource metadata | `set_metrics` | Partial | list/summary only; telemetry sample retrieval is unavailable |
|
|
469
440
|
| Alarm management | `set_alarms` | ⚠️ Live unverified | Implemented; Aodh/Gnocchi unavailable in the test platform. Requires services and collected metrics |
|
|
@@ -479,13 +450,13 @@ remaining test resources across 24 categories. See also
|
|
|
479
450
|
| `openstack quota delete` | `set_quota` (action="delete") | ✅ | Resets all three service quotas to defaults; requires modification tools |
|
|
480
451
|
| `openstack usage show` | `get_usage_statistics` | ✅ | Current-project Nova simple tenant usage; not monetary charges |
|
|
481
452
|
| `openstack limits show` | `get_quota` (includes limits) | ✅ | Limits query |
|
|
482
|
-
| Resource allocations | `get_resource_monitoring` |
|
|
453
|
+
| Resource allocations | `get_resource_monitoring` | ⚠️ Live unverified | Reader physical-capacity policy restrictions; allocations are separate from capacity; no live utilization |
|
|
483
454
|
|
|
484
455
|
---
|
|
485
456
|
|
|
486
457
|
### API prerequisites and result semantics
|
|
487
458
|
|
|
488
|
-
The feature table marks implemented API paths, not verification against every OpenStack deployment.
|
|
459
|
+
The feature table marks implemented API paths, not verification against every OpenStack deployment. Service and policy requirements must be checked in the target deployment. A missing service, extension, required microversion, or permission is an operation failure, not an empty successful result.
|
|
489
460
|
|
|
490
461
|
- **Modification tools:** the MCP server registers `set_*` management tools only when `ALLOW_MODIFY_OPERATIONS=true`. Existing action guards also reject writes when disabled. Dedicated read-only `get_*` tools remain available. API authorization is enforced by the target cloud; agent, user, domain, type and QoS administration may require elevated OpenStack roles.
|
|
491
462
|
- **Alarms:** `set_alarms` calls the Keystone catalog's `alarming` endpoint for the configured interface/region. It supports list/create/show/delete of project alarms and creates `gnocchi_resources_threshold` alarms. Aodh, Gnocchi, the specified resource and a collected metric are required. The default metric is `cpu_util`, which is not collected by every deployment. `metric`, `resource_type`, `aggregation_method`, `granularity`, `evaluation_periods`, and `alarm_actions` can be supplied. An empty action list creates an alarm without notifications. There is no simulation fallback.
|
|
@@ -687,7 +658,7 @@ unset OPENSTACK_MCP_TOKEN
|
|
|
687
658
|
```
|
|
688
659
|
|
|
689
660
|
This Bearer configuration uses the server's configured OpenStack account. For
|
|
690
|
-
experimental per-user authentication, see the [
|
|
661
|
+
experimental per-user authentication, see the [multi-user guide](docs/multi-user-guide.md).
|
|
691
662
|
See also the [Claude Code MCP documentation](https://code.claude.com/docs/en/mcp).
|
|
692
663
|
|
|
693
664
|
## Server Configuration
|
|
@@ -1002,7 +973,7 @@ get_instance_details(limit=50, offset=50) # Next 50 instances
|
|
|
1002
973
|
get_instance_details(include_all=True) # All instances (use with caution)
|
|
1003
974
|
|
|
1004
975
|
# Optimized search for large datasets
|
|
1005
|
-
search_instances("web", "name", limit=20
|
|
976
|
+
search_instances("web", "name", limit=20, offset=0, case_sensitive=False)
|
|
1006
977
|
```
|
|
1007
978
|
|
|
1008
979
|
---
|