mcp-openstack-ops 3.5.9__tar.gz → 3.6.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (197) hide show
  1. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/.env.example +3 -2
  2. mcp_openstack_ops-3.6.0/.github/workflows/tests.yml +28 -0
  3. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/.gitignore +4 -1
  4. mcp_openstack_ops-3.6.0/AGENTS.md +42 -0
  5. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/PKG-INFO +175 -93
  6. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/README.md +174 -92
  7. mcp_openstack_ops-3.6.0/docs/main-live-retest-2026-10-30.json +2342 -0
  8. mcp_openstack_ops-3.6.0/docs/main-live-retest-2026-10-30.md +268 -0
  9. mcp_openstack_ops-3.6.0/docs/main-live-validation-2026-10-30.json +2745 -0
  10. mcp_openstack_ops-3.6.0/docs/main-live-validation-2026-10-30.md +315 -0
  11. mcp_openstack_ops-3.6.0/docs/multi-user-phase1.md +300 -0
  12. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/connection.py +6 -2
  13. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/mcp_main.py +29 -2
  14. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/services/compute.py +71 -50
  15. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/services/core.py +26 -18
  16. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/services/monitoring.py +20 -2
  17. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/services/network.py +12 -6
  18. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/services/orchestration.py +2 -2
  19. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_load_balancer_health_monitors.py +1 -1
  20. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_load_balancer_pool_members.py +1 -1
  21. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_heat_stack.py +0 -1
  22. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_image.py +0 -1
  23. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_load_balancer_pool.py +1 -1
  24. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_load_balancer_pool_member.py +1 -1
  25. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_quota.py +36 -1
  26. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_server_backup.py +2 -2
  27. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_server_properties.py +4 -4
  28. mcp_openstack_ops-3.6.0/src/mcp_openstack_ops/user_connection.py +294 -0
  29. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops.egg-info/PKG-INFO +175 -93
  30. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops.egg-info/SOURCES.txt +12 -2
  31. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops.egg-info/scm_file_list.json +11 -1
  32. mcp_openstack_ops-3.6.0/src/mcp_openstack_ops.egg-info/scm_version.json +8 -0
  33. mcp_openstack_ops-3.6.0/tests/test_floating_ip.py +99 -0
  34. mcp_openstack_ops-3.6.0/tests/test_instance_image.py +108 -0
  35. mcp_openstack_ops-3.6.0/tests/test_live_regressions.py +242 -0
  36. mcp_openstack_ops-3.6.0/tests/test_user_connection.py +362 -0
  37. mcp_openstack_ops-3.5.9/img/screenshot-claude-desktop.png:Zone.Identifier +0 -4
  38. mcp_openstack_ops-3.5.9/src/mcp_openstack_ops.egg-info/scm_version.json +0 -8
  39. mcp_openstack_ops-3.5.9/tests/test_floating_ip.py +0 -42
  40. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/.env.test +0 -0
  41. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/.github/FUNDING.yml +0 -0
  42. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/.github/copilot-instructions.md +0 -0
  43. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/.github/dependabot.yml +0 -0
  44. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/.github/workflows/pypi-publish.yml +0 -0
  45. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/.gitleaks.toml +0 -0
  46. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/.pre-commit-config.yaml +0 -0
  47. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/.python-version +0 -0
  48. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/Dockerfile.MCP-Server +0 -0
  49. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/Dockerfile.MCPO-Proxy +0 -0
  50. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/LICENSE +0 -0
  51. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/MANIFEST.in +0 -0
  52. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/build-mcp-server-docker-image.sh +0 -0
  53. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/build-mcpo-server-docker-image.sh +0 -0
  54. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/diagnose_openstack.py +0 -0
  55. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/docker-compose.yml +0 -0
  56. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/docs/integration-validation.md +0 -0
  57. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/img/MCP-Workflow-of-Quickstart-Tutorial.png +0 -0
  58. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/img/screenshot-claude-desktop.png +0 -0
  59. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/img/screenshot-example-cluster-status.png +0 -0
  60. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/img/screenshot-openstack-dashboard.png +0 -0
  61. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/main.py +0 -0
  62. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/mcp-config.json.http +0 -0
  63. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/mcp-config.json.multi-project +0 -0
  64. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/mcp-config.json.stdio +0 -0
  65. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/pyproject.toml +0 -0
  66. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/scripts/check_release.py +0 -0
  67. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/scripts/mcp-server-docker-cmd.sh +0 -0
  68. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/scripts/publish_release.py +0 -0
  69. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/scripts/run-mcp-inspector-local.sh +0 -0
  70. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/scripts/run-mcp-inspector-pypi.sh +0 -0
  71. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/setup.cfg +0 -0
  72. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/__init__.py +0 -0
  73. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/__main__.py +0 -0
  74. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/functions.py +0 -0
  75. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/prompt_template.md +0 -0
  76. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/services/__init__.py +0 -0
  77. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/services/alarms.py +0 -0
  78. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/services/identity.py +0 -0
  79. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/services/image.py +0 -0
  80. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/services/load_balancer/__init__.py +0 -0
  81. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/services/load_balancer/amphorae.py +0 -0
  82. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/services/load_balancer/core.py +0 -0
  83. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/services/load_balancer/health_monitors.py +0 -0
  84. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/services/load_balancer/l7_policies.py +0 -0
  85. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/services/load_balancer/listeners.py +0 -0
  86. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/services/load_balancer/management.py +0 -0
  87. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/services/load_balancer/pools.py +0 -0
  88. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/services/storage.py +0 -0
  89. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/__init__.py +0 -0
  90. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_availability_zones.py +0 -0
  91. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_domains.py +0 -0
  92. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_floating_ip_pools.py +0 -0
  93. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_floating_ips.py +0 -0
  94. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_heat_stack_details.py +0 -0
  95. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_heat_stacks.py +0 -0
  96. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_hypervisor_details.py +0 -0
  97. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_identity_groups.py +0 -0
  98. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_image_detail_list.py +0 -0
  99. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_image_members.py +0 -0
  100. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_instance.py +0 -0
  101. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_instance_by_name.py +0 -0
  102. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_instance_details.py +0 -0
  103. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_instances_by_status.py +0 -0
  104. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_keypair_list.py +0 -0
  105. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_load_balancer_amphorae.py +0 -0
  106. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_load_balancer_availability_zones.py +0 -0
  107. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_load_balancer_details.py +0 -0
  108. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_load_balancer_flavors.py +0 -0
  109. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_load_balancer_l7_policies.py +0 -0
  110. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_load_balancer_l7_rules.py +0 -0
  111. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_load_balancer_list.py +0 -0
  112. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_load_balancer_listeners.py +0 -0
  113. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_load_balancer_pools.py +0 -0
  114. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_load_balancer_providers.py +0 -0
  115. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_load_balancer_quotas.py +0 -0
  116. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_network_details.py +0 -0
  117. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_network_qos_policies.py +0 -0
  118. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_project_details.py +0 -0
  119. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_quota.py +0 -0
  120. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_resource_monitoring.py +0 -0
  121. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_role_assignments.py +0 -0
  122. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_routers.py +0 -0
  123. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_security_groups.py +0 -0
  124. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_server_events.py +0 -0
  125. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_server_groups.py +0 -0
  126. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_server_volumes.py +0 -0
  127. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_service_status.py +0 -0
  128. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_usage_statistics.py +0 -0
  129. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_user_list.py +0 -0
  130. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_volume_backups.py +0 -0
  131. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_volume_groups.py +0 -0
  132. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_volume_list.py +0 -0
  133. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_volume_qos.py +0 -0
  134. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_volume_snapshots.py +0 -0
  135. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_volume_transfers.py +0 -0
  136. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_volume_types.py +0 -0
  137. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/search_instances.py +0 -0
  138. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_alarms.py +0 -0
  139. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_compute_agents.py +0 -0
  140. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_domains.py +0 -0
  141. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_flavor.py +0 -0
  142. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_floating_ip.py +0 -0
  143. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_floating_ip_port_forwarding.py +0 -0
  144. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_identity_groups.py +0 -0
  145. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_image_members.py +0 -0
  146. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_image_metadata.py +0 -0
  147. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_image_visibility.py +0 -0
  148. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_instance.py +0 -0
  149. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_keypair.py +0 -0
  150. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_load_balancer.py +0 -0
  151. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_load_balancer_amphora.py +0 -0
  152. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_load_balancer_availability_zone.py +0 -0
  153. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_load_balancer_flavor.py +0 -0
  154. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_load_balancer_health_monitor.py +0 -0
  155. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_load_balancer_l7_policy.py +0 -0
  156. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_load_balancer_l7_rule.py +0 -0
  157. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_load_balancer_listener.py +0 -0
  158. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_load_balancer_quota.py +0 -0
  159. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_metrics.py +0 -0
  160. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_network_agents.py +0 -0
  161. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_network_ports.py +0 -0
  162. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_network_qos_policies.py +0 -0
  163. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_networks.py +0 -0
  164. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_project.py +0 -0
  165. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_roles.py +0 -0
  166. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_routers.py +0 -0
  167. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_security_groups.py +0 -0
  168. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_server_dump.py +0 -0
  169. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_server_fixed_ip.py +0 -0
  170. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_server_floating_ip.py +0 -0
  171. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_server_group.py +0 -0
  172. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_server_migration.py +0 -0
  173. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_server_network.py +0 -0
  174. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_server_security_group.py +0 -0
  175. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_server_volume.py +0 -0
  176. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_service_logs.py +0 -0
  177. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_services.py +0 -0
  178. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_snapshot.py +0 -0
  179. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_subnets.py +0 -0
  180. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_users.py +0 -0
  181. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_volume.py +0 -0
  182. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_volume_backups.py +0 -0
  183. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_volume_groups.py +0 -0
  184. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_volume_qos.py +0 -0
  185. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_volume_types.py +0 -0
  186. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops.egg-info/dependency_links.txt +0 -0
  187. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops.egg-info/entry_points.txt +0 -0
  188. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops.egg-info/requires.txt +0 -0
  189. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops.egg-info/top_level.txt +0 -0
  190. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/test_compatibility.sh +0 -0
  191. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/test_project_isolation.py +0 -0
  192. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/tests/test_connection.py +0 -0
  193. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/tests/test_operational_tools.py +0 -0
  194. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/tests/test_publish_release.py +0 -0
  195. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/tests/test_release.py +0 -0
  196. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/tests/test_tool_registration.py +0 -0
  197. {mcp_openstack_ops-3.5.9 → mcp_openstack_ops-3.6.0}/uv.lock +0 -0
@@ -19,8 +19,9 @@ FASTMCP_TYPE=streamable-http
19
19
  FASTMCP_HOST=0.0.0.0
20
20
  FASTMCP_PORT=8000
21
21
 
22
- # (Optional) Enable authentication for streamable-http mode
23
- # Recommended for production environments
22
+ # (Optional) Enable HTTP Bearer token authentication for streamable-http mode.
23
+ # Clients must send Authorization: Bearer <REMOTE_SECRET_KEY> when enabled.
24
+ # Recommended for production; use a strong, unique REMOTE_SECRET_KEY.
24
25
  REMOTE_AUTH_ENABLE=false
25
26
  REMOTE_SECRET_KEY=your-secure-secret-key-here
26
27
 
@@ -0,0 +1,28 @@
1
+ name: Unit tests
2
+
3
+ on:
4
+ push:
5
+ branches: ["main", "feat/73-per-user-connections"]
6
+ pull_request:
7
+
8
+ permissions:
9
+ contents: read
10
+
11
+ jobs:
12
+ test:
13
+ runs-on: ubuntu-latest
14
+ timeout-minutes: 10
15
+ steps:
16
+ - uses: actions/checkout@v7
17
+ with:
18
+ persist-credentials: false
19
+ fetch-depth: 0
20
+ - uses: actions/setup-python@v7
21
+ with:
22
+ python-version: "3.12.x"
23
+ - name: Install uv
24
+ run: pip install uv==0.7.20
25
+ - name: Install locked test dependencies
26
+ run: uv sync --locked --extra dev
27
+ - name: Run unit tests without cloud credentials
28
+ run: uv run --locked --extra dev python -m pytest -q tests
@@ -17,4 +17,7 @@ wheels/
17
17
 
18
18
  .vscode*
19
19
  #.github/copilot-instructions.md
20
- *.swp
20
+ *.swp
21
+
22
+ # Windows download metadata
23
+ *:Zone.Identifier
@@ -0,0 +1,42 @@
1
+ # Repository instructions
2
+
3
+ These instructions supplement the user's global guidelines. They do not authorize
4
+ Git writes, external publication, or changes to existing cloud resources.
5
+
6
+ ## Maintain the CLI-to-tool mapping and validation snapshot
7
+
8
+ For every improvement or fix, review README.md's **OpenStack CLI vs MCP Tools
9
+ Mapping** section. Keep its summary, tool rows, Status, Notes, and linked evidence
10
+ consistent with the resulting implementation and actual verification.
11
+
12
+ - Update affected rows whenever tools, actions, parameters, prerequisites,
13
+ permissions, limitations, or behavior change. Use registered tool names and
14
+ supported actions; do not advertise missing tools or unimplemented actions.
15
+ - Distinguish implementation from verification. Mark implemented paths without
16
+ successful live validation as **Live unverified**, with the specific reason.
17
+ Missing services/APIs, policy denials, failures, and timeouts are not passes.
18
+ Keep intentional capability limitations and unimplemented actions explicit.
19
+ - Keep **Live tool checks** and **Local unit tests** in separate summary groups.
20
+ Live classifications count unique tools; unit tests count test cases. Multiple
21
+ tests for one tool do not increase the unique-tool count. Keep classification
22
+ totals consistent with the stated inventory and scope.
23
+ - Show unit-test results concisely as `160/160 (100%)`, using the actual results,
24
+ not this example's values. Account for failures and skipped tests separately
25
+ when present; do not count skipped tests as passes. Do not treat unit-test
26
+ success as proof of live service functionality.
27
+ - Run relevant verification after functional changes. Update dates, source
28
+ revision or working-tree identity, counts, percentages, and evidence links only
29
+ from checks actually performed. Do not present an older snapshot as validation
30
+ of newer code. Mark affected paths as unverified or the snapshot as outdated
31
+ when validation cannot be repeated.
32
+ - Replace a complete live summary only after repeating its stated coverage.
33
+ Label targeted retests as partial; do not extrapolate them to the full toolset.
34
+ Document polling limits and distinguish accepted requests from confirmed final
35
+ resource states. Explain changes in test conditions that affect comparisons.
36
+ - Keep dated reports as historical evidence and link the latest applicable
37
+ report from README.md. Reports must state verification limits, observed
38
+ failures, and cleanup results without exposing credentials, private endpoints,
39
+ or sensitive resource data.
40
+ - Before completion, check summary arithmetic, percentages, tool/action names,
41
+ Status/Notes, source identity, and evidence links for agreement. If README.ko.md
42
+ 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.5.9
3
+ Version: 3.6.0
4
4
  Summary: OpenStack operations automation MCP server
5
5
  Author-email: JungJungIn <call518@gmail.com>
6
6
  Requires-Python: >=3.12
@@ -41,6 +41,11 @@ Dynamic: license-file
41
41
 
42
42
  ## Features
43
43
 
44
+ Experimental per-user remote connections are available for testing with the
45
+ opt-in `--multi-user` mode. See the [phase 1 setup and validation guide](docs/multi-user-phase1.md)
46
+ for authentication, client limitations, and the test checklist. Administrator
47
+ cross-project queries are outside this phase.
48
+
44
49
  - ✅ **Project-Scoped Operations**: Every tool enforces the configured `OS_PROJECT_NAME`, validating resource ownership so actions stay inside a single tenant.
45
50
  - ✅ **Safety-Gated Writes**: Modify (`set_*`) tooling only registers when `ALLOW_MODIFY_OPERATIONS=true`, keeping default deployments read-only and auditable.
46
51
  - ✅ **90+ Purpose-Built Tools**: Broad coverage across compute, networking, storage, images, identity, Heat, and Octavia load balancing tasks. Project resources are scoped to the active project; cloud-wide administrative APIs remain subject to OpenStack policy.
@@ -178,13 +183,44 @@ New consolidated `get_instance` tool replaces multiple separate tools:
178
183
 
179
184
  ## 📊 OpenStack CLI vs MCP Tools Mapping
180
185
 
181
- **Detailed Mapping by Category**
182
-
183
- ✅ indicates an implemented API path, subject to cloud services and policy.
184
- Live-validated paths and deployment limits are listed in
185
- [integration validation](docs/integration-validation.md). Also see
186
+ **Validation snapshot — 2026-10-30** (main working tree based on `dd98993`,
187
+ with the uncommitted fixes described in the report):
188
+
189
+ <table border="1" rules="cols">
190
+ <thead>
191
+ <tr><th>Verification type</th><th>Item</th><th>Result</th></tr>
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
186
220
  [API prerequisites and result semantics](#api-prerequisites-and-result-semantics).
187
221
 
222
+ **Detailed Mapping by Category**
223
+
188
224
  ### 1. 🖥️ **Compute (Nova)**
189
225
 
190
226
  | OpenStack CLI Command | MCP Tool | Status | Notes |
@@ -194,7 +230,7 @@ Live-validated paths and deployment limits are listed in
194
230
  | `openstack server create` | `set_instance` (action="create") | ✅ | **ENHANCED** - Bulk creation support |
195
231
  | `openstack server start/stop/reboot` | `set_instance` | ✅ | **ENHANCED** - Bulk operations with filtering |
196
232
  | `openstack server delete` | `set_instance` (action="delete") | ✅ | **ENHANCED** - Bulk deletion with name_contains filtering |
197
- | `openstack server backup create` | `set_server_backup` | ✅ | Backup creation with rotation |
233
+ | `openstack server backup create` | `set_server_backup` | ✅ | Nova backup action with rotation; asynchronous, no custom metadata |
198
234
  | `openstack server image create` | `set_instance` (action="snapshot") | ✅ | Image/snapshot creation |
199
235
  | `openstack server shelve/unshelve` | `set_instance` | ✅ | Instance shelving |
200
236
  | `openstack server lock/unlock` | `set_instance` | ✅ | Instance locking |
@@ -226,11 +262,11 @@ Live-validated paths and deployment limits are listed in
226
262
  | `openstack server remove volume` | `set_server_volume` (action="detach") | ✅ | Volume detachment |
227
263
  | `openstack server set` | `set_server_properties` (action="set") | ✅ | Server property setting |
228
264
  | `openstack server unset` | `set_server_properties` (action="unset") | ✅ | Server property unsetting |
229
- | `openstack server dump create` | `set_server_dump` | ✅ | Server dump creation |
265
+ | `openstack server dump create` | `set_server_dump` | ❌ Unsupported | Returns an explicit unsupported result; no dump is created |
230
266
  | `openstack server event list` | `get_server_events` | ✅ | Server event tracking |
231
267
  | `openstack server group list` | `get_server_groups` | ✅ | Server group listing |
232
268
  | `openstack server group create/delete` | `set_server_group` | ✅ | Server group management |
233
- | `openstack flavor list` | `get_flavor_list` (via cluster_status) | ✅ | Flavor listing |
269
+ | `openstack flavor list` | `set_flavor` (action="list") | ✅ | Requires modification tools to be enabled for registration |
234
270
  | `openstack flavor create/delete` | `set_flavor` | ✅ | Flavor management |
235
271
  | `openstack keypair list` | `get_keypair_list` | ✅ | Keypair listing |
236
272
  | `openstack keypair create/delete` | `set_keypair` | ✅ | Keypair management |
@@ -257,17 +293,17 @@ Live-validated paths and deployment limits are listed in
257
293
  | `openstack floating ip show` | `set_floating_ip` (action="show") | ✅ | Floating IP details |
258
294
  | `openstack floating ip unset` | `set_floating_ip` (action="unset") | ✅ | Floating IP property clearing |
259
295
  | `openstack floating ip pool list` | `get_floating_ip_pools` | ✅ | Floating IP pool listing |
260
- | `openstack floating ip port forwarding create` | `set_floating_ip_port_forwarding` (action="create") | ✅ | Port forwarding creation |
261
- | `openstack floating ip port forwarding delete` | `set_floating_ip_port_forwarding` (action="delete") | ✅ | Port forwarding deletion |
262
- | `openstack floating ip port forwarding list` | `set_floating_ip_port_forwarding` (action="list") | ✅ | Port forwarding listing |
263
- | `openstack floating ip port forwarding set` | `set_floating_ip_port_forwarding` (action="set") | ✅ | Port forwarding updates |
264
- | `openstack floating ip port forwarding show` | `set_floating_ip_port_forwarding` (action="show") | ✅ | Port forwarding details |
296
+ | `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
+ | `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
+ | `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
+ | `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
+ | `openstack floating ip port forwarding show` | `set_floating_ip_port_forwarding` (action="show") | ⚠️ Live unverified | Implemented; test platform port-forwarding endpoint returns HTTP 404 |
265
301
  | `openstack security group list` | `get_security_groups` | ✅ | Security group listing |
266
302
  | `openstack security group create/delete` | `set_security_groups` | ✅ | Project-owned security groups |
267
303
  | `openstack port list` | `get_network_details` (includes ports) | ✅ | Port information included |
268
304
  | `openstack port create/delete` | `set_network_ports` | ✅ | Port management |
269
- | `openstack network qos policy list` | `get_network_qos_policies` | ✅ | Current-project policy containers |
270
- | `openstack network qos policy create` | `set_network_qos_policies` | ✅ | Create/list/delete policy containers; does not create bandwidth rules |
305
+ | `openstack network qos policy list` | `get_network_qos_policies` | ⚠️ Live unverified | Implemented; test platform QoS endpoint returns HTTP 404 |
306
+ | `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 |
271
307
  | `openstack network agent list` | `get_service_status` (includes agents) | ✅ | Network agents |
272
308
  | `openstack network agent set` | `set_network_agents` | ✅ | Enable/disable cloud-wide agents; usually admin-only |
273
309
 
@@ -349,95 +385,95 @@ Live-validated paths and deployment limits are listed in
349
385
 
350
386
  | OpenStack CLI Command | MCP Tool | Status | Notes |
351
387
  |---------------------|---------|------|------|
352
- | `openstack loadbalancer list` | `get_load_balancer_status` | ✅ | Load balancer listing with pagination |
353
- | `openstack loadbalancer show` | `get_load_balancer_status` | ✅ | Load balancer detailed information |
354
- | `openstack loadbalancer create` | `set_load_balancer` (action="create") | ✅ | Load balancer creation |
355
- | `openstack loadbalancer delete` | `set_load_balancer` (action="delete") | ✅ | Load balancer deletion |
356
- | `openstack loadbalancer set` | `set_load_balancer` (action="update") | ✅ | Load balancer property update |
357
- | `openstack loadbalancer stats show` | `get_load_balancer_status` | ✅ | Load balancer statistics |
358
- | `openstack loadbalancer status show` | `get_load_balancer_status` | ✅ | Load balancer status tree |
359
- | `openstack loadbalancer failover` | `set_load_balancer` (action="failover") | ✅ | Load balancer failover |
360
- | `openstack loadbalancer unset` | `set_load_balancer` (action="unset") | ✅ | Load balancer property unset |
388
+ | `openstack loadbalancer list` | `get_load_balancer_list` | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. Load balancer listing with pagination |
389
+ | `openstack loadbalancer show` | `get_load_balancer_details` | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. Load balancer detailed information |
390
+ | `openstack loadbalancer create` | `set_load_balancer` (action="create") | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. Load balancer creation |
391
+ | `openstack loadbalancer delete` | `set_load_balancer` (action="delete") | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. Load balancer deletion |
392
+ | `openstack loadbalancer set` | `set_load_balancer` (action="update") | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. Load balancer property update |
393
+ | `openstack loadbalancer stats show` | `set_load_balancer` (action="stats") | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. Load balancer statistics |
394
+ | `openstack loadbalancer status show` | `set_load_balancer` (action="status") | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. Load balancer status tree |
395
+ | `openstack loadbalancer failover` | `set_load_balancer` (action="failover") | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. Load balancer failover |
396
+ | `openstack loadbalancer unset` | `set_load_balancer` (action="unset") | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. Load balancer property unset |
361
397
  | **Listener Management** | | | |
362
- | `openstack loadbalancer listener list` | `get_load_balancer_listeners` | ✅ | Listener listing for load balancer |
363
- | `openstack loadbalancer listener create` | `set_load_balancer_listener` (action="create") | ✅ | Listener creation (HTTP/HTTPS/TCP/UDP) |
364
- | `openstack loadbalancer listener delete` | `set_load_balancer_listener` (action="delete") | ✅ | Listener deletion |
365
- | `openstack loadbalancer listener show` | `get_load_balancer_listeners` | ✅ | Listener detailed information |
366
- | `openstack loadbalancer listener set` | `set_load_balancer_listener` (action="update") | ✅ | Listener property update |
367
- | `openstack loadbalancer listener stats show` | `get_load_balancer_listeners` | ✅ | Listener statistics |
368
- | `openstack loadbalancer listener unset` | `set_load_balancer_listener` (action="unset") | ✅ | Listener property unset |
398
+ | `openstack loadbalancer listener list` | `get_load_balancer_listeners` | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. Listener listing for load balancer |
399
+ | `openstack loadbalancer listener create` | `set_load_balancer_listener` (action="create") | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. Listener creation (HTTP/HTTPS/TCP/UDP) |
400
+ | `openstack loadbalancer listener delete` | `set_load_balancer_listener` (action="delete") | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. Listener deletion |
401
+ | `openstack loadbalancer listener show` | `get_load_balancer_listeners` | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. Listener detailed information |
402
+ | `openstack loadbalancer listener set` | `set_load_balancer_listener` (action="update") | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. Listener property update |
403
+ | `openstack loadbalancer listener stats show` | `set_load_balancer_listener` (action="stats") | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. Listener statistics |
404
+ | `openstack loadbalancer listener unset` | `set_load_balancer_listener` (action="unset") | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. Listener property unset |
369
405
  | **Pool Management** | | | |
370
- | `openstack loadbalancer pool list` | `get_load_balancer_pools` | ✅ | Pool listing (all or by listener) |
371
- | `openstack loadbalancer pool create` | `set_load_balancer_pool` (action="create") | ✅ | Pool creation with algorithms |
372
- | `openstack loadbalancer pool delete` | `set_load_balancer_pool` (action="delete") | ✅ | Pool deletion |
373
- | `openstack loadbalancer pool set` | `set_load_balancer_pool` (action="update") | ✅ | Pool property update |
374
- | `openstack loadbalancer pool show` | `get_load_balancer_pools` | ✅ | Pool detailed information |
375
- | `openstack loadbalancer pool stats show` | `get_load_balancer_pools` | ✅ | Pool statistics |
376
- | `openstack loadbalancer pool unset` | `set_load_balancer_pool` (action="unset") | ✅ | Pool property unset |
406
+ | `openstack loadbalancer pool list` | `get_load_balancer_pools` | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. Pool listing (all or by listener) |
407
+ | `openstack loadbalancer pool create` | `set_load_balancer_pool` (action="create") | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. Pool creation with algorithms |
408
+ | `openstack loadbalancer pool delete` | `set_load_balancer_pool` (action="delete") | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. Pool deletion |
409
+ | `openstack loadbalancer pool set` | `set_load_balancer_pool` (action="set") | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. Pool property update |
410
+ | `openstack loadbalancer pool show` | `get_load_balancer_pools` | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. Pool detailed information |
411
+ | `openstack loadbalancer pool stats show` | N/A | ❌ Not implemented | No registered tool/action for this CLI operation |
412
+ | `openstack loadbalancer pool unset` | N/A | ❌ Not implemented | No registered tool/action for this CLI operation |
377
413
  | **Member Management** | | | |
378
- | `openstack loadbalancer member list` | `get_load_balancer_members` | ✅ | Pool member listing |
379
- | `openstack loadbalancer member create` | `set_load_balancer_member` (action="create") | ✅ | Pool member creation |
380
- | `openstack loadbalancer member delete` | `set_load_balancer_member` (action="delete") | ✅ | Pool member deletion |
381
- | `openstack loadbalancer member set` | `set_load_balancer_member` (action="update") | ✅ | Pool member property update |
382
- | `openstack loadbalancer member show` | `get_load_balancer_members` | ✅ | Pool member detailed information |
383
- | `openstack loadbalancer member unset` | `set_load_balancer_member` (action="unset") | ✅ | Pool member property unset |
414
+ | `openstack loadbalancer member list` | `get_load_balancer_pool_members` | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. Pool member listing |
415
+ | `openstack loadbalancer member create` | `set_load_balancer_pool_member` (action="create") | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. Pool member creation |
416
+ | `openstack loadbalancer member delete` | `set_load_balancer_pool_member` (action="delete") | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. Pool member deletion |
417
+ | `openstack loadbalancer member set` | `set_load_balancer_pool_member` (action="set") | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. Pool member property update |
418
+ | `openstack loadbalancer member show` | `get_load_balancer_pool_members` | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. Pool member detailed information |
419
+ | `openstack loadbalancer member unset` | N/A | ❌ Not implemented | No registered tool/action for this CLI operation |
384
420
  | **Health Monitor Management** | | | |
385
- | `openstack loadbalancer healthmonitor list` | `get_load_balancer_health_monitors` | ✅ | Health monitor listing |
386
- | `openstack loadbalancer healthmonitor create` | `set_load_balancer_health_monitor` (action="create") | ✅ | Health monitor creation |
387
- | `openstack loadbalancer healthmonitor delete` | `set_load_balancer_health_monitor` (action="delete") | ✅ | Health monitor deletion |
388
- | `openstack loadbalancer healthmonitor set` | `set_load_balancer_health_monitor` (action="update") | ✅ | Health monitor update |
389
- | `openstack loadbalancer healthmonitor show` | `get_load_balancer_health_monitors` | ✅ | Health monitor detailed information |
390
- | `openstack loadbalancer healthmonitor unset` | `set_load_balancer_health_monitor` (action="unset") | ✅ | Health monitor property unset |
421
+ | `openstack loadbalancer healthmonitor list` | `get_load_balancer_health_monitors` | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. Health monitor listing |
422
+ | `openstack loadbalancer healthmonitor create` | `set_load_balancer_health_monitor` (action="create") | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. Health monitor creation |
423
+ | `openstack loadbalancer healthmonitor delete` | `set_load_balancer_health_monitor` (action="delete") | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. Health monitor deletion |
424
+ | `openstack loadbalancer healthmonitor set` | `set_load_balancer_health_monitor` (action="set") | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. Health monitor update |
425
+ | `openstack loadbalancer healthmonitor show` | `get_load_balancer_health_monitors` | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. Health monitor detailed information |
426
+ | `openstack loadbalancer healthmonitor unset` | N/A | ❌ Not implemented | No registered tool/action for this CLI operation |
391
427
  | **L7 Policy Management** | | | |
392
- | `openstack loadbalancer l7policy list` | `get_load_balancer_l7_policies` | ✅ | L7 policy listing |
393
- | `openstack loadbalancer l7policy create` | `set_load_balancer_l7_policy` (action="create") | ✅ | L7 policy creation |
394
- | `openstack loadbalancer l7policy delete` | `set_load_balancer_l7_policy` (action="delete") | ✅ | L7 policy deletion |
395
- | `openstack loadbalancer l7policy set` | `set_load_balancer_l7_policy` (action="update") | ✅ | L7 policy update |
396
- | `openstack loadbalancer l7policy show` | `get_load_balancer_l7_policies` | ✅ | L7 policy details |
397
- | `openstack loadbalancer l7policy unset` | `set_load_balancer_l7_policy` (action="unset") | ✅ | L7 policy property unset |
428
+ | `openstack loadbalancer l7policy list` | `get_load_balancer_l7_policies` | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. L7 policy listing |
429
+ | `openstack loadbalancer l7policy create` | `set_load_balancer_l7_policy` (action="create") | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. L7 policy creation |
430
+ | `openstack loadbalancer l7policy delete` | `set_load_balancer_l7_policy` (action="delete") | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. L7 policy deletion |
431
+ | `openstack loadbalancer l7policy set` | N/A | ❌ Not implemented | No registered tool/action for this CLI operation |
432
+ | `openstack loadbalancer l7policy show` | `get_load_balancer_l7_policies` | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. L7 policy details |
433
+ | `openstack loadbalancer l7policy unset` | N/A | ❌ Not implemented | No registered tool/action for this CLI operation |
398
434
  | **L7 Rule Management** 🆕 | | | |
399
- | `openstack loadbalancer l7rule list` | `get_load_balancer_l7_rules` | ✅ | L7 rule listing |
400
- | `openstack loadbalancer l7rule create` | `set_load_balancer_l7_rule` (action="create") | ✅ | L7 rule creation |
401
- | `openstack loadbalancer l7rule delete` | `set_load_balancer_l7_rule` (action="delete") | ✅ | L7 rule deletion |
402
- | `openstack loadbalancer l7rule set` | `set_load_balancer_l7_rule` (action="update") | ✅ | L7 rule update |
403
- | `openstack loadbalancer l7rule show` | `get_load_balancer_l7_rules` | ✅ | L7 rule details |
404
- | `openstack loadbalancer l7rule unset` | `set_load_balancer_l7_rule` (action="unset") | ✅ | L7 rule property unset |
435
+ | `openstack loadbalancer l7rule list` | `get_load_balancer_l7_rules` | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. L7 rule listing |
436
+ | `openstack loadbalancer l7rule create` | `set_load_balancer_l7_rule` (action="create") | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. L7 rule creation |
437
+ | `openstack loadbalancer l7rule delete` | `set_load_balancer_l7_rule` (action="delete") | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. L7 rule deletion |
438
+ | `openstack loadbalancer l7rule set` | N/A | ❌ Not implemented | No registered tool/action for this CLI operation |
439
+ | `openstack loadbalancer l7rule show` | `get_load_balancer_l7_rules` | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. L7 rule details |
440
+ | `openstack loadbalancer l7rule unset` | N/A | ❌ Not implemented | No registered tool/action for this CLI operation |
405
441
  | **Amphora Management** 🆕 | | | |
406
- | `openstack loadbalancer amphora list` | `get_load_balancer_amphorae` | ✅ | Amphora listing |
407
- | `openstack loadbalancer amphora show` | `set_load_balancer_amphora` (action="show") | ✅ | Amphora details |
408
- | `openstack loadbalancer amphora configure` | `set_load_balancer_amphora` (action="configure") | ✅ | Amphora configuration |
409
- | `openstack loadbalancer amphora failover` | `set_load_balancer_amphora` (action="failover") | ✅ | Amphora failover |
442
+ | `openstack loadbalancer amphora list` | `get_load_balancer_amphorae` | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. Amphora listing |
443
+ | `openstack loadbalancer amphora show` | `set_load_balancer_amphora` (action="show") | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. Amphora details |
444
+ | `openstack loadbalancer amphora configure` | `set_load_balancer_amphora` (action="configure") | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. Amphora configuration |
445
+ | `openstack loadbalancer amphora failover` | `set_load_balancer_amphora` (action="failover") | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. Amphora failover |
410
446
  | `openstack loadbalancer amphora delete` | N/A | ❌ | Not supported by OpenStack SDK |
411
447
  | `openstack loadbalancer amphora stats show` | N/A | ❌ | Not supported by OpenStack SDK |
412
448
  | **Provider Management** | | | |
413
- | `openstack loadbalancer provider list` | `get_load_balancer_providers` | ✅ | Provider listing |
414
- | `openstack loadbalancer provider capability list` | `get_load_balancer_providers` | ✅ | Provider capability listing |
449
+ | `openstack loadbalancer provider list` | `get_load_balancer_providers` | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. Provider listing |
450
+ | `openstack loadbalancer provider capability list` | N/A | ❌ Not implemented | No registered tool/action for this CLI operation |
415
451
  | **Availability Zone Management** 🆕 | | | |
416
- | `openstack loadbalancer availabilityzone list` | `get_load_balancer_availability_zones` | ✅ | Availability zone listing |
417
- | `openstack loadbalancer availabilityzone show` | `get_load_balancer_availability_zones` | ✅ | Availability zone details |
418
- | `openstack loadbalancer availabilityzone create` | `set_load_balancer_availability_zone` (action="create") | ✅ | Availability zone creation |
419
- | `openstack loadbalancer availabilityzone delete` | `set_load_balancer_availability_zone` (action="delete") | ✅ | Availability zone deletion |
420
- | `openstack loadbalancer availabilityzone set` | `set_load_balancer_availability_zone` (action="update") | ✅ | Availability zone update |
421
- | `openstack loadbalancer availabilityzone unset` | `set_load_balancer_availability_zone` (action="unset") | ✅ | Availability zone property unset |
452
+ | `openstack loadbalancer availabilityzone list` | `get_load_balancer_availability_zones` | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. Availability zone listing |
453
+ | `openstack loadbalancer availabilityzone show` | `get_load_balancer_availability_zones` | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. Availability zone details |
454
+ | `openstack loadbalancer availabilityzone create` | `set_load_balancer_availability_zone` (action="create") | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. Availability zone creation |
455
+ | `openstack loadbalancer availabilityzone delete` | `set_load_balancer_availability_zone` (action="delete") | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. Availability zone deletion |
456
+ | `openstack loadbalancer availabilityzone set` | N/A | ❌ Not implemented | No registered tool/action for this CLI operation |
457
+ | `openstack loadbalancer availabilityzone unset` | N/A | ❌ Not implemented | No registered tool/action for this CLI operation |
422
458
  | **Flavor Management** 🆕 | | | |
423
- | `openstack loadbalancer flavor list` | `get_load_balancer_flavors` | ✅ | Flavor listing |
424
- | `openstack loadbalancer flavor show` | `get_load_balancer_flavors` | ✅ | Flavor details |
425
- | `openstack loadbalancer flavor create` | `set_load_balancer_flavor` (action="create") | ✅ | Flavor creation |
426
- | `openstack loadbalancer flavor delete` | `set_load_balancer_flavor` (action="delete") | ✅ | Flavor deletion |
427
- | `openstack loadbalancer flavor set` | `set_load_balancer_flavor` (action="update") | ✅ | Flavor update |
428
- | `openstack loadbalancer flavor unset` | `set_load_balancer_flavor` (action="unset") | ✅ | Flavor property unset |
459
+ | `openstack loadbalancer flavor list` | `get_load_balancer_flavors` | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. Flavor listing |
460
+ | `openstack loadbalancer flavor show` | `get_load_balancer_flavors` | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. Flavor details |
461
+ | `openstack loadbalancer flavor create` | `set_load_balancer_flavor` (action="create") | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. Flavor creation |
462
+ | `openstack loadbalancer flavor delete` | `set_load_balancer_flavor` (action="delete") | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. Flavor deletion |
463
+ | `openstack loadbalancer flavor set` | N/A | ❌ Not implemented | No registered tool/action for this CLI operation |
464
+ | `openstack loadbalancer flavor unset` | N/A | ❌ Not implemented | No registered tool/action for this CLI operation |
429
465
  | **Flavor Profile Management** | | | |
430
- | `openstack loadbalancer flavorprofile list` | `get_load_balancer_flavor_profiles` | ✅ | Flavor profile listing |
431
- | `openstack loadbalancer flavorprofile show` | `get_load_balancer_flavor_profiles` | ✅ | Flavor profile details |
432
- | `openstack loadbalancer flavorprofile create` | `set_load_balancer_flavor_profile` (action="create") | ✅ | Flavor profile creation |
433
- | `openstack loadbalancer flavorprofile set` | `set_load_balancer_flavor_profile` (action="update") | ✅ | Flavor profile update |
434
- | `openstack loadbalancer flavorprofile unset` | `set_load_balancer_flavor_profile` (action="unset") | ✅ | Flavor profile property unset |
435
- | `openstack loadbalancer flavorprofile delete` | `set_load_balancer_flavor_profile` (action="delete") | 🚧 | Pending implementation |
466
+ | `openstack loadbalancer flavorprofile list` | N/A | ❌ Not implemented | No registered tool/action for this CLI operation |
467
+ | `openstack loadbalancer flavorprofile show` | N/A | ❌ Not implemented | No registered tool/action for this CLI operation |
468
+ | `openstack loadbalancer flavorprofile create` | N/A | ❌ Not implemented | No registered tool/action for this CLI operation |
469
+ | `openstack loadbalancer flavorprofile set` | N/A | ❌ Not implemented | No registered tool/action for this CLI operation |
470
+ | `openstack loadbalancer flavorprofile unset` | N/A | ❌ Not implemented | No registered tool/action for this CLI operation |
471
+ | `openstack loadbalancer flavorprofile delete` | N/A | ❌ Not implemented | No registered tool/action for this CLI operation |
436
472
  | **Quota Management** 🆕 | | | |
437
- | `openstack loadbalancer quota list` | `get_load_balancer_quotas` | ✅ | Quota listing |
438
- | `openstack loadbalancer quota show` | `get_load_balancer_quotas` | ✅ | Quota details |
439
- | `openstack loadbalancer quota set` | `set_load_balancer_quota` (action="set") | ✅ | Quota setting |
440
- | `openstack loadbalancer quota reset` | `set_load_balancer_quota` (action="reset") | ✅ | Quota reset |
473
+ | `openstack loadbalancer quota list` | `get_load_balancer_quotas` | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. Quota listing |
474
+ | `openstack loadbalancer quota show` | `get_load_balancer_quotas` | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. Quota details |
475
+ | `openstack loadbalancer quota set` | `set_load_balancer_quota` (action="set") | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. Quota setting |
476
+ | `openstack loadbalancer quota reset` | `set_load_balancer_quota` (action="reset") | ⚠️ Live unverified | Implemented; Octavia unavailable in the test platform. Quota reset |
441
477
 
442
478
  ### 8. 📊 **Monitoring & Logging**
443
479
 
@@ -448,7 +484,7 @@ Live-validated paths and deployment limits are listed in
448
484
  | Cluster overview | `get_service_status` + `get_resource_monitoring` | ✅ | Service probes and current inventory |
449
485
  | Service log metadata | `set_service_logs` | Partial | Service listing only; log retrieval is unavailable without a logging backend |
450
486
  | Resource metadata | `set_metrics` | Partial | list/summary only; telemetry sample retrieval is unavailable |
451
- | Alarm management | `set_alarms` | ✅ | Real Aodh/Gnocchi resource threshold alarms; requires services and collected metrics |
487
+ | Alarm management | `set_alarms` | ⚠️ Live unverified | Implemented; Aodh/Gnocchi unavailable in the test platform. Requires services and collected metrics |
452
488
  | Compute agents | `set_compute_agents` | ✅ | Compute agent management |
453
489
  | Usage statistics | `get_usage_statistics` | ✅ | Period compute allocation-hours plus separately labeled current snapshots |
454
490
 
@@ -457,7 +493,8 @@ Live-validated paths and deployment limits are listed in
457
493
  | OpenStack CLI Command | MCP Tool | Status | Notes |
458
494
  |---------------------|---------|------|------|
459
495
  | `openstack quota show` | `get_quota` | ✅ | Quota query |
460
- | `openstack quota set` | `set_quota` | ✅ | Quota setting |
496
+ | `openstack quota set` | `set_quota` (action="set") | ✅ | Routes supplied fields to Nova/Neutron/Cinder; partial failures are reported |
497
+ | `openstack quota delete` | `set_quota` (action="delete") | ✅ | Resets all three service quotas to defaults; requires modification tools |
461
498
  | `openstack usage show` | `get_usage_statistics` | ✅ | Current-project Nova simple tenant usage; not monetary charges |
462
499
  | `openstack limits show` | `get_quota` (includes limits) | ✅ | Limits query |
463
500
  | Resource allocations | `get_resource_monitoring` | ✅ | Flavor allocations; not CPU load or resident memory samples |
@@ -626,6 +663,51 @@ Add to your Claude Desktop configuration:
626
663
 
627
664
  ---
628
665
 
666
+ ## Claude Code Integration
667
+
668
+ Install Claude Code and start the MCP server in `streamable-http` mode first.
669
+ Register the MCP server's `/mcp` URL, not the MCPO/OpenAPI proxy URL. The example
670
+ below uses the Docker host port `18005`; replace the host/port for your deployment
671
+ and use HTTPS for remote connections. Registration does not start the server.
672
+
673
+ For the existing single-account mode with `REMOTE_AUTH_ENABLE=true`, enter the
674
+ server's `REMOTE_SECRET_KEY` without saving its literal value in shell history:
675
+
676
+ ```bash
677
+ read -rsp 'MCP Bearer token: ' OPENSTACK_MCP_TOKEN
678
+ echo
679
+ export OPENSTACK_MCP_TOKEN
680
+
681
+ claude mcp add-json --scope user openstack-ops '{"type":"http","url":"http://127.0.0.1:18005/mcp","headers":{"Authorization":"Bearer ${OPENSTACK_MCP_TOKEN}"}}'
682
+ claude mcp list
683
+ claude
684
+ ```
685
+
686
+ Keep `OPENSTACK_MCP_TOKEN` exported in the terminal that launches Claude Code.
687
+ `--scope user` saves the registration in your normal user configuration. If server
688
+ authentication is disabled, use this registration command instead:
689
+
690
+ ```bash
691
+ claude mcp add --transport http --scope user openstack-ops http://127.0.0.1:18005/mcp
692
+ ```
693
+
694
+ In Claude Code, check `/mcp` and ask, for example:
695
+
696
+ ```text
697
+ Use openstack-ops to list all instances in the project.
698
+ ```
699
+
700
+ Remove the registration when no longer needed (this does not stop the server):
701
+
702
+ ```bash
703
+ claude mcp remove --scope user openstack-ops
704
+ unset OPENSTACK_MCP_TOKEN
705
+ ```
706
+
707
+ This Bearer configuration uses the server's configured OpenStack account. For
708
+ experimental per-user authentication, see the [phase 1 guide](docs/multi-user-phase1.md).
709
+ See also the [Claude Code MCP documentation](https://code.claude.com/docs/en/mcp).
710
+
629
711
  ## Server Configuration
630
712
 
631
713
  ### Command Line Options