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.
Files changed (199) hide show
  1. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/PKG-INFO +78 -39
  2. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/README.md +77 -38
  3. mcp_openstack_ops-3.6.1/docs/expanded-validation-fixes-2026-11-02.json +18906 -0
  4. mcp_openstack_ops-3.6.1/docs/expanded-validation-fixes-2026-11-02.md +205 -0
  5. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/prompt_template.md +21 -21
  6. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/services/compute.py +93 -26
  7. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/services/identity.py +2 -7
  8. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/services/network.py +25 -20
  9. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/services/storage.py +47 -81
  10. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_instance.py +26 -13
  11. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_instance_details.py +8 -4
  12. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_instances_by_status.py +10 -5
  13. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_keypair_list.py +5 -4
  14. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_network_details.py +10 -5
  15. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_routers.py +5 -4
  16. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_security_groups.py +5 -1
  17. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_user_list.py +5 -4
  18. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_volume_list.py +10 -5
  19. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_volume_snapshots.py +5 -4
  20. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/search_instances.py +16 -11
  21. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_networks.py +4 -4
  22. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_volume.py +14 -17
  23. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/user_connection.py +31 -12
  24. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops.egg-info/PKG-INFO +78 -39
  25. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops.egg-info/SOURCES.txt +4 -0
  26. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops.egg-info/scm_file_list.json +4 -0
  27. mcp_openstack_ops-3.6.1/src/mcp_openstack_ops.egg-info/scm_version.json +8 -0
  28. mcp_openstack_ops-3.6.1/tests/test_expanded_validation_fixes.py +144 -0
  29. mcp_openstack_ops-3.6.1/tests/test_phase1_stabilization.py +190 -0
  30. mcp_openstack_ops-3.6.0/src/mcp_openstack_ops.egg-info/scm_version.json +0 -8
  31. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/.env.example +0 -0
  32. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/.env.test +0 -0
  33. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/.github/FUNDING.yml +0 -0
  34. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/.github/copilot-instructions.md +0 -0
  35. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/.github/dependabot.yml +0 -0
  36. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/.github/workflows/pypi-publish.yml +0 -0
  37. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/.github/workflows/tests.yml +0 -0
  38. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/.gitignore +0 -0
  39. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/.gitleaks.toml +0 -0
  40. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/.pre-commit-config.yaml +0 -0
  41. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/.python-version +0 -0
  42. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/AGENTS.md +0 -0
  43. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/Dockerfile.MCP-Server +0 -0
  44. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/Dockerfile.MCPO-Proxy +0 -0
  45. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/LICENSE +0 -0
  46. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/MANIFEST.in +0 -0
  47. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/build-mcp-server-docker-image.sh +0 -0
  48. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/build-mcpo-server-docker-image.sh +0 -0
  49. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/diagnose_openstack.py +0 -0
  50. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/docker-compose.yml +0 -0
  51. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/docs/integration-validation.md +0 -0
  52. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/docs/main-live-retest-2026-10-30.json +0 -0
  53. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/docs/main-live-retest-2026-10-30.md +0 -0
  54. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/docs/main-live-validation-2026-10-30.json +0 -0
  55. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/docs/main-live-validation-2026-10-30.md +0 -0
  56. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/docs/multi-user-phase1.md +0 -0
  57. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/img/MCP-Workflow-of-Quickstart-Tutorial.png +0 -0
  58. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/img/screenshot-claude-desktop.png +0 -0
  59. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/img/screenshot-example-cluster-status.png +0 -0
  60. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/img/screenshot-openstack-dashboard.png +0 -0
  61. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/main.py +0 -0
  62. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/mcp-config.json.http +0 -0
  63. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/mcp-config.json.multi-project +0 -0
  64. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/mcp-config.json.stdio +0 -0
  65. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/pyproject.toml +0 -0
  66. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/scripts/check_release.py +0 -0
  67. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/scripts/mcp-server-docker-cmd.sh +0 -0
  68. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/scripts/publish_release.py +0 -0
  69. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/scripts/run-mcp-inspector-local.sh +0 -0
  70. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/scripts/run-mcp-inspector-pypi.sh +0 -0
  71. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/setup.cfg +0 -0
  72. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/__init__.py +0 -0
  73. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/__main__.py +0 -0
  74. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/connection.py +0 -0
  75. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/functions.py +0 -0
  76. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/mcp_main.py +0 -0
  77. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/services/__init__.py +0 -0
  78. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/services/alarms.py +0 -0
  79. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/services/core.py +0 -0
  80. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/services/image.py +0 -0
  81. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/services/load_balancer/__init__.py +0 -0
  82. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/services/load_balancer/amphorae.py +0 -0
  83. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/services/load_balancer/core.py +0 -0
  84. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/services/load_balancer/health_monitors.py +0 -0
  85. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/services/load_balancer/l7_policies.py +0 -0
  86. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/services/load_balancer/listeners.py +0 -0
  87. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/services/load_balancer/management.py +0 -0
  88. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/services/load_balancer/pools.py +0 -0
  89. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/services/monitoring.py +0 -0
  90. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/services/orchestration.py +0 -0
  91. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/__init__.py +0 -0
  92. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_availability_zones.py +0 -0
  93. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_domains.py +0 -0
  94. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_floating_ip_pools.py +0 -0
  95. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_floating_ips.py +0 -0
  96. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_heat_stack_details.py +0 -0
  97. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_heat_stacks.py +0 -0
  98. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_hypervisor_details.py +0 -0
  99. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_identity_groups.py +0 -0
  100. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_image_detail_list.py +0 -0
  101. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_image_members.py +0 -0
  102. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_instance_by_name.py +0 -0
  103. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_load_balancer_amphorae.py +0 -0
  104. {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
  105. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_load_balancer_details.py +0 -0
  106. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_load_balancer_flavors.py +0 -0
  107. {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
  108. {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
  109. {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
  110. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_load_balancer_list.py +0 -0
  111. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_load_balancer_listeners.py +0 -0
  112. {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
  113. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_load_balancer_pools.py +0 -0
  114. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_load_balancer_providers.py +0 -0
  115. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_load_balancer_quotas.py +0 -0
  116. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_network_qos_policies.py +0 -0
  117. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_project_details.py +0 -0
  118. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_quota.py +0 -0
  119. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_resource_monitoring.py +0 -0
  120. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_role_assignments.py +0 -0
  121. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_server_events.py +0 -0
  122. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_server_groups.py +0 -0
  123. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_server_volumes.py +0 -0
  124. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_service_status.py +0 -0
  125. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_usage_statistics.py +0 -0
  126. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_volume_backups.py +0 -0
  127. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_volume_groups.py +0 -0
  128. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_volume_qos.py +0 -0
  129. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_volume_transfers.py +0 -0
  130. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/get_volume_types.py +0 -0
  131. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_alarms.py +0 -0
  132. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_compute_agents.py +0 -0
  133. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_domains.py +0 -0
  134. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_flavor.py +0 -0
  135. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_floating_ip.py +0 -0
  136. {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
  137. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_heat_stack.py +0 -0
  138. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_identity_groups.py +0 -0
  139. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_image.py +0 -0
  140. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_image_members.py +0 -0
  141. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_image_metadata.py +0 -0
  142. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_image_visibility.py +0 -0
  143. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_instance.py +0 -0
  144. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_keypair.py +0 -0
  145. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_load_balancer.py +0 -0
  146. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_load_balancer_amphora.py +0 -0
  147. {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
  148. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_load_balancer_flavor.py +0 -0
  149. {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
  150. {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
  151. {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
  152. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_load_balancer_listener.py +0 -0
  153. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_load_balancer_pool.py +0 -0
  154. {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
  155. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_load_balancer_quota.py +0 -0
  156. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_metrics.py +0 -0
  157. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_network_agents.py +0 -0
  158. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_network_ports.py +0 -0
  159. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_network_qos_policies.py +0 -0
  160. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_project.py +0 -0
  161. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_quota.py +0 -0
  162. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_roles.py +0 -0
  163. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_routers.py +0 -0
  164. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_security_groups.py +0 -0
  165. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_server_backup.py +0 -0
  166. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_server_dump.py +0 -0
  167. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_server_fixed_ip.py +0 -0
  168. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_server_floating_ip.py +0 -0
  169. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_server_group.py +0 -0
  170. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_server_migration.py +0 -0
  171. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_server_network.py +0 -0
  172. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_server_properties.py +0 -0
  173. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_server_security_group.py +0 -0
  174. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_server_volume.py +0 -0
  175. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_service_logs.py +0 -0
  176. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_services.py +0 -0
  177. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_snapshot.py +0 -0
  178. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_subnets.py +0 -0
  179. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_users.py +0 -0
  180. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_volume_backups.py +0 -0
  181. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_volume_groups.py +0 -0
  182. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_volume_qos.py +0 -0
  183. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops/tools/set_volume_types.py +0 -0
  184. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops.egg-info/dependency_links.txt +0 -0
  185. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops.egg-info/entry_points.txt +0 -0
  186. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops.egg-info/requires.txt +0 -0
  187. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/src/mcp_openstack_ops.egg-info/top_level.txt +0 -0
  188. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/test_compatibility.sh +0 -0
  189. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/test_project_isolation.py +0 -0
  190. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/tests/test_connection.py +0 -0
  191. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/tests/test_floating_ip.py +0 -0
  192. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/tests/test_instance_image.py +0 -0
  193. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/tests/test_live_regressions.py +0 -0
  194. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/tests/test_operational_tools.py +0 -0
  195. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/tests/test_publish_release.py +0 -0
  196. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/tests/test_release.py +0 -0
  197. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/tests/test_tool_registration.py +0 -0
  198. {mcp_openstack_ops-3.6.0 → mcp_openstack_ops-3.6.1}/tests/test_user_connection.py +0 -0
  199. {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.0
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(instance_names="vm1,vm2")` - Single tool, comprehensive information
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` | ✅ | **NEW UNIFIED** - Pagination, filtering support |
229
- | `openstack server show` | `get_instance` | ✅ | **ENHANCED** - Replaces get_instance_by_name, get_instance_by_id |
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` | ✅ | **ENHANCED** - Bulk operations with filtering |
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") | ✅ | Volume attachment |
262
- | `openstack server remove volume` | `set_server_volume` (action="detach") | ✅ | Volume detachment |
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` | ✅ | Keypair listing |
272
- | `openstack keypair create/delete` | `set_keypair` | ✅ | Keypair management |
273
- | `openstack hypervisor list` | `get_hypervisor_details` | ✅ | Hypervisor querying |
274
- | `openstack availability zone list` | `get_availability_zones` | ✅ | Availability zone listing |
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` | ✅ | Detailed network information |
281
- | `openstack network show` | `get_network_details` (name param) | ✅ | Specific network query |
282
- | `openstack network create` | `set_networks` (action="create") | ✅ | **ENHANCED** - Bulk network creation |
283
- | `openstack network delete` | `set_networks` (action="delete") | ✅ | **ENHANCED** - Bulk deletion with filtering |
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) | ✅ | Subnet information included |
286
- | `openstack subnet create/delete` | `set_subnets` | ✅ | Subnet management |
287
- | `openstack router list` | `get_routers` | ✅ | Router listing |
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` | ✅ | Floating IP pool listing |
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` | ✅ | Security group listing |
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` | `get_network_details` (includes ports) | ✅ | Port information included |
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) | ✅ | Network 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` | ✅ | Volume listing |
315
- | `openstack volume show` | `get_volume_list` (filtering) | ✅ | Specific volume query |
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` | `set_volume` (action="modify") | ✅ | Volume property modification |
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` | ✅ | Snapshot listing |
321
- | `openstack volume snapshot create/delete` | `set_snapshot` | ✅ | Snapshot management |
322
- | `openstack backup list` | `get_volume_backups` | ✅ | Current-project backup listing |
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` | ✅ | Server volume attach/detach |
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` | ✅ | User listing |
353
- | `openstack user show` | `get_user_list` (filtering) | ✅ | Specific user query |
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` | ✅ | Role assignment listing |
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` | ✅ | Service listing |
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) | ✅ | Endpoint information |
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` | ✅ | Project allocations, separate quotas and visible hypervisor capacity; no live utilization |
483
- | Service status | `get_service_status` | ✅ | Service status query |
484
- | Cluster overview | `get_service_status` + `get_resource_monitoring` | ✅ | Service probes and current inventory |
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` | ✅ | Flavor allocations; not CPU load or resident memory samples |
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) # Search with reasonable limit
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(instance_names="vm1,vm2")` - Single tool, comprehensive information
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` | ✅ | **NEW UNIFIED** - Pagination, filtering support |
211
- | `openstack server show` | `get_instance` | ✅ | **ENHANCED** - Replaces get_instance_by_name, get_instance_by_id |
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` | ✅ | **ENHANCED** - Bulk operations with filtering |
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") | ✅ | Volume attachment |
244
- | `openstack server remove volume` | `set_server_volume` (action="detach") | ✅ | Volume detachment |
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` | ✅ | Keypair listing |
254
- | `openstack keypair create/delete` | `set_keypair` | ✅ | Keypair management |
255
- | `openstack hypervisor list` | `get_hypervisor_details` | ✅ | Hypervisor querying |
256
- | `openstack availability zone list` | `get_availability_zones` | ✅ | Availability zone listing |
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` | ✅ | Detailed network information |
263
- | `openstack network show` | `get_network_details` (name param) | ✅ | Specific network query |
264
- | `openstack network create` | `set_networks` (action="create") | ✅ | **ENHANCED** - Bulk network creation |
265
- | `openstack network delete` | `set_networks` (action="delete") | ✅ | **ENHANCED** - Bulk deletion with filtering |
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) | ✅ | Subnet information included |
268
- | `openstack subnet create/delete` | `set_subnets` | ✅ | Subnet management |
269
- | `openstack router list` | `get_routers` | ✅ | Router listing |
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` | ✅ | Floating IP pool listing |
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` | ✅ | Security group listing |
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` | `get_network_details` (includes ports) | ✅ | Port information included |
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) | ✅ | Network 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` | ✅ | Volume listing |
297
- | `openstack volume show` | `get_volume_list` (filtering) | ✅ | Specific volume query |
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` | `set_volume` (action="modify") | ✅ | Volume property modification |
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` | ✅ | Snapshot listing |
303
- | `openstack volume snapshot create/delete` | `set_snapshot` | ✅ | Snapshot management |
304
- | `openstack backup list` | `get_volume_backups` | ✅ | Current-project backup listing |
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` | ✅ | Server volume attach/detach |
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` | ✅ | User listing |
335
- | `openstack user show` | `get_user_list` (filtering) | ✅ | Specific user query |
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` | ✅ | Role assignment listing |
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` | ✅ | Service listing |
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) | ✅ | Endpoint information |
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` | ✅ | Project allocations, separate quotas and visible hypervisor capacity; no live utilization |
465
- | Service status | `get_service_status` | ✅ | Service status query |
466
- | Cluster overview | `get_service_status` + `get_resource_monitoring` | ✅ | Service probes and current inventory |
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` | ✅ | Flavor allocations; not CPU load or resident memory samples |
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) # Search with reasonable limit
1044
+ search_instances("web", "name", limit=20, offset=0, case_sensitive=False)
1006
1045
  ```
1007
1046
 
1008
1047
  ---