mcp-openstack-ops 3.5.8__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 (196) hide show
  1. {mcp_openstack_ops-3.5.8 → 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.8 → 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.8 → mcp_openstack_ops-3.6.0}/PKG-INFO +218 -118
  6. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/README.md +216 -116
  7. mcp_openstack_ops-3.6.0/docs/integration-validation.md +64 -0
  8. mcp_openstack_ops-3.6.0/docs/main-live-retest-2026-10-30.json +2342 -0
  9. mcp_openstack_ops-3.6.0/docs/main-live-retest-2026-10-30.md +268 -0
  10. mcp_openstack_ops-3.6.0/docs/main-live-validation-2026-10-30.json +2745 -0
  11. mcp_openstack_ops-3.6.0/docs/main-live-validation-2026-10-30.md +315 -0
  12. mcp_openstack_ops-3.6.0/docs/multi-user-phase1.md +300 -0
  13. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/pyproject.toml +1 -1
  14. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/connection.py +16 -4
  15. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/functions.py +68 -213
  16. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/mcp_main.py +29 -2
  17. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/prompt_template.md +38 -20
  18. mcp_openstack_ops-3.6.0/src/mcp_openstack_ops/services/alarms.py +107 -0
  19. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/services/compute.py +71 -50
  20. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/services/core.py +26 -18
  21. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/services/identity.py +63 -3
  22. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/services/image.py +9 -15
  23. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/services/monitoring.py +206 -115
  24. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/services/network.py +152 -10
  25. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/services/orchestration.py +34 -3
  26. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/services/storage.py +165 -201
  27. mcp_openstack_ops-3.6.0/src/mcp_openstack_ops/tools/get_domains.py +11 -0
  28. mcp_openstack_ops-3.6.0/src/mcp_openstack_ops/tools/get_heat_stack_details.py +12 -0
  29. mcp_openstack_ops-3.6.0/src/mcp_openstack_ops/tools/get_identity_groups.py +11 -0
  30. mcp_openstack_ops-3.6.0/src/mcp_openstack_ops/tools/get_image_members.py +11 -0
  31. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_load_balancer_health_monitors.py +1 -1
  32. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_load_balancer_pool_members.py +1 -1
  33. mcp_openstack_ops-3.6.0/src/mcp_openstack_ops/tools/get_network_qos_policies.py +13 -0
  34. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_resource_monitoring.py +7 -5
  35. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_usage_statistics.py +7 -5
  36. mcp_openstack_ops-3.6.0/src/mcp_openstack_ops/tools/get_volume_backups.py +11 -0
  37. mcp_openstack_ops-3.6.0/src/mcp_openstack_ops/tools/get_volume_groups.py +11 -0
  38. mcp_openstack_ops-3.6.0/src/mcp_openstack_ops/tools/get_volume_qos.py +11 -0
  39. mcp_openstack_ops-3.6.0/src/mcp_openstack_ops/tools/get_volume_transfers.py +12 -0
  40. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_alarms.py +23 -6
  41. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_domains.py +3 -2
  42. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_floating_ip.py +1 -1
  43. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_heat_stack.py +0 -1
  44. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_identity_groups.py +3 -2
  45. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_image.py +0 -1
  46. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_load_balancer_pool.py +1 -1
  47. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_load_balancer_pool_member.py +1 -1
  48. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_metrics.py +2 -2
  49. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_network_qos_policies.py +3 -1
  50. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_quota.py +36 -1
  51. mcp_openstack_ops-3.6.0/src/mcp_openstack_ops/tools/set_routers.py +22 -0
  52. mcp_openstack_ops-3.6.0/src/mcp_openstack_ops/tools/set_security_groups.py +22 -0
  53. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_server_backup.py +2 -2
  54. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_server_properties.py +4 -4
  55. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_service_logs.py +2 -2
  56. mcp_openstack_ops-3.6.0/src/mcp_openstack_ops/tools/set_users.py +31 -0
  57. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_volume_backups.py +9 -5
  58. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_volume_groups.py +7 -2
  59. mcp_openstack_ops-3.6.0/src/mcp_openstack_ops/tools/set_volume_types.py +22 -0
  60. mcp_openstack_ops-3.6.0/src/mcp_openstack_ops/user_connection.py +294 -0
  61. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops.egg-info/PKG-INFO +218 -118
  62. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops.egg-info/SOURCES.txt +31 -2
  63. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops.egg-info/requires.txt +1 -1
  64. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops.egg-info/scm_file_list.json +30 -1
  65. mcp_openstack_ops-3.6.0/src/mcp_openstack_ops.egg-info/scm_version.json +8 -0
  66. mcp_openstack_ops-3.6.0/tests/test_connection.py +32 -0
  67. mcp_openstack_ops-3.6.0/tests/test_floating_ip.py +99 -0
  68. mcp_openstack_ops-3.6.0/tests/test_instance_image.py +108 -0
  69. mcp_openstack_ops-3.6.0/tests/test_live_regressions.py +242 -0
  70. mcp_openstack_ops-3.6.0/tests/test_operational_tools.py +618 -0
  71. mcp_openstack_ops-3.6.0/tests/test_tool_registration.py +80 -0
  72. mcp_openstack_ops-3.6.0/tests/test_user_connection.py +362 -0
  73. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/uv.lock +8 -7
  74. mcp_openstack_ops-3.5.8/img/screenshot-claude-desktop.png:Zone.Identifier +0 -4
  75. mcp_openstack_ops-3.5.8/src/mcp_openstack_ops.egg-info/scm_version.json +0 -8
  76. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/.env.test +0 -0
  77. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/.github/FUNDING.yml +0 -0
  78. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/.github/copilot-instructions.md +0 -0
  79. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/.github/dependabot.yml +0 -0
  80. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/.github/workflows/pypi-publish.yml +0 -0
  81. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/.gitleaks.toml +0 -0
  82. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/.pre-commit-config.yaml +0 -0
  83. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/.python-version +0 -0
  84. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/Dockerfile.MCP-Server +0 -0
  85. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/Dockerfile.MCPO-Proxy +0 -0
  86. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/LICENSE +0 -0
  87. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/MANIFEST.in +0 -0
  88. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/build-mcp-server-docker-image.sh +0 -0
  89. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/build-mcpo-server-docker-image.sh +0 -0
  90. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/diagnose_openstack.py +0 -0
  91. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/docker-compose.yml +0 -0
  92. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/img/MCP-Workflow-of-Quickstart-Tutorial.png +0 -0
  93. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/img/screenshot-claude-desktop.png +0 -0
  94. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/img/screenshot-example-cluster-status.png +0 -0
  95. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/img/screenshot-openstack-dashboard.png +0 -0
  96. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/main.py +0 -0
  97. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/mcp-config.json.http +0 -0
  98. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/mcp-config.json.multi-project +0 -0
  99. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/mcp-config.json.stdio +0 -0
  100. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/scripts/check_release.py +0 -0
  101. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/scripts/mcp-server-docker-cmd.sh +0 -0
  102. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/scripts/publish_release.py +0 -0
  103. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/scripts/run-mcp-inspector-local.sh +0 -0
  104. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/scripts/run-mcp-inspector-pypi.sh +0 -0
  105. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/setup.cfg +0 -0
  106. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/__init__.py +0 -0
  107. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/__main__.py +0 -0
  108. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/services/__init__.py +0 -0
  109. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/services/load_balancer/__init__.py +0 -0
  110. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/services/load_balancer/amphorae.py +0 -0
  111. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/services/load_balancer/core.py +0 -0
  112. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/services/load_balancer/health_monitors.py +0 -0
  113. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/services/load_balancer/l7_policies.py +0 -0
  114. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/services/load_balancer/listeners.py +0 -0
  115. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/services/load_balancer/management.py +0 -0
  116. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/services/load_balancer/pools.py +0 -0
  117. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/__init__.py +0 -0
  118. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_availability_zones.py +0 -0
  119. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_floating_ip_pools.py +0 -0
  120. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_floating_ips.py +0 -0
  121. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_heat_stacks.py +0 -0
  122. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_hypervisor_details.py +0 -0
  123. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_image_detail_list.py +0 -0
  124. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_instance.py +0 -0
  125. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_instance_by_name.py +0 -0
  126. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_instance_details.py +0 -0
  127. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_instances_by_status.py +0 -0
  128. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_keypair_list.py +0 -0
  129. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_load_balancer_amphorae.py +0 -0
  130. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_load_balancer_availability_zones.py +0 -0
  131. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_load_balancer_details.py +0 -0
  132. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_load_balancer_flavors.py +0 -0
  133. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_load_balancer_l7_policies.py +0 -0
  134. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_load_balancer_l7_rules.py +0 -0
  135. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_load_balancer_list.py +0 -0
  136. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_load_balancer_listeners.py +0 -0
  137. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_load_balancer_pools.py +0 -0
  138. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_load_balancer_providers.py +0 -0
  139. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_load_balancer_quotas.py +0 -0
  140. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_network_details.py +0 -0
  141. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_project_details.py +0 -0
  142. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_quota.py +0 -0
  143. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_role_assignments.py +0 -0
  144. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_routers.py +0 -0
  145. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_security_groups.py +0 -0
  146. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_server_events.py +0 -0
  147. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_server_groups.py +0 -0
  148. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_server_volumes.py +0 -0
  149. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_service_status.py +0 -0
  150. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_user_list.py +0 -0
  151. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_volume_list.py +0 -0
  152. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_volume_snapshots.py +0 -0
  153. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/get_volume_types.py +0 -0
  154. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/search_instances.py +0 -0
  155. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_compute_agents.py +0 -0
  156. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_flavor.py +0 -0
  157. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_floating_ip_port_forwarding.py +0 -0
  158. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_image_members.py +0 -0
  159. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_image_metadata.py +0 -0
  160. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_image_visibility.py +0 -0
  161. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_instance.py +0 -0
  162. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_keypair.py +0 -0
  163. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_load_balancer.py +0 -0
  164. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_load_balancer_amphora.py +0 -0
  165. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_load_balancer_availability_zone.py +0 -0
  166. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_load_balancer_flavor.py +0 -0
  167. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_load_balancer_health_monitor.py +0 -0
  168. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_load_balancer_l7_policy.py +0 -0
  169. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_load_balancer_l7_rule.py +0 -0
  170. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_load_balancer_listener.py +0 -0
  171. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_load_balancer_quota.py +0 -0
  172. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_network_agents.py +0 -0
  173. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_network_ports.py +0 -0
  174. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_networks.py +0 -0
  175. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_project.py +0 -0
  176. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_roles.py +0 -0
  177. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_server_dump.py +0 -0
  178. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_server_fixed_ip.py +0 -0
  179. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_server_floating_ip.py +0 -0
  180. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_server_group.py +0 -0
  181. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_server_migration.py +0 -0
  182. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_server_network.py +0 -0
  183. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_server_security_group.py +0 -0
  184. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_server_volume.py +0 -0
  185. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_services.py +0 -0
  186. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_snapshot.py +0 -0
  187. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_subnets.py +0 -0
  188. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_volume.py +0 -0
  189. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops/tools/set_volume_qos.py +0 -0
  190. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops.egg-info/dependency_links.txt +0 -0
  191. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops.egg-info/entry_points.txt +0 -0
  192. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/src/mcp_openstack_ops.egg-info/top_level.txt +0 -0
  193. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/test_compatibility.sh +0 -0
  194. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/test_project_isolation.py +0 -0
  195. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/tests/test_publish_release.py +0 -0
  196. {mcp_openstack_ops-3.5.8 → mcp_openstack_ops-3.6.0}/tests/test_release.py +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.