mcp-proxy-adapter 6.4.29__tar.gz → 6.4.33__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 (135) hide show
  1. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/PKG-INFO +1 -1
  2. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/api/middleware/user_info_middleware.py +18 -9
  3. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/examples/setup_test_environment.py +67 -0
  4. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/version.py +1 -1
  5. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter.egg-info/PKG-INFO +1 -1
  6. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/pyproject.toml +1 -1
  7. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/README.md +0 -0
  8. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/__init__.py +0 -0
  9. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/__main__.py +0 -0
  10. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/api/__init__.py +0 -0
  11. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/api/app.py +0 -0
  12. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/api/handlers.py +0 -0
  13. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/api/middleware/__init__.py +0 -0
  14. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/api/middleware/base.py +0 -0
  15. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/api/middleware/command_permission_middleware.py +0 -0
  16. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/api/middleware/error_handling.py +0 -0
  17. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/api/middleware/factory.py +0 -0
  18. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/api/middleware/logging.py +0 -0
  19. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/api/middleware/performance.py +0 -0
  20. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/api/middleware/protocol_middleware.py +0 -0
  21. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/api/middleware/transport_middleware.py +0 -0
  22. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/api/middleware/unified_security.py +0 -0
  23. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/api/schemas.py +0 -0
  24. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/api/tool_integration.py +0 -0
  25. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/api/tools.py +0 -0
  26. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/commands/__init__.py +0 -0
  27. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/commands/auth_validation_command.py +0 -0
  28. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/commands/base.py +0 -0
  29. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/commands/builtin_commands.py +0 -0
  30. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/commands/catalog_manager.py +0 -0
  31. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/commands/cert_monitor_command.py +0 -0
  32. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/commands/certificate_management_command.py +0 -0
  33. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/commands/command_registry.py +0 -0
  34. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/commands/config_command.py +0 -0
  35. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/commands/dependency_container.py +0 -0
  36. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/commands/dependency_manager.py +0 -0
  37. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/commands/echo_command.py +0 -0
  38. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/commands/health_command.py +0 -0
  39. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/commands/help_command.py +0 -0
  40. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/commands/hooks.py +0 -0
  41. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/commands/key_management_command.py +0 -0
  42. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/commands/load_command.py +0 -0
  43. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/commands/plugins_command.py +0 -0
  44. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/commands/protocol_management_command.py +0 -0
  45. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/commands/proxy_registration_command.py +0 -0
  46. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/commands/reload_command.py +0 -0
  47. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/commands/result.py +0 -0
  48. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/commands/role_test_command.py +0 -0
  49. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/commands/roles_management_command.py +0 -0
  50. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/commands/security_command.py +0 -0
  51. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/commands/settings_command.py +0 -0
  52. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/commands/ssl_setup_command.py +0 -0
  53. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/commands/token_management_command.py +0 -0
  54. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/commands/transport_management_command.py +0 -0
  55. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/commands/unload_command.py +0 -0
  56. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/config.py +0 -0
  57. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/core/__init__.py +0 -0
  58. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/core/app_factory.py +0 -0
  59. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/core/app_runner.py +0 -0
  60. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/core/auth_validator.py +0 -0
  61. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/core/certificate_utils.py +0 -0
  62. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/core/client.py +0 -0
  63. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/core/client_manager.py +0 -0
  64. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/core/client_security.py +0 -0
  65. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/core/config_converter.py +0 -0
  66. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/core/config_validator.py +0 -0
  67. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/core/crl_utils.py +0 -0
  68. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/core/errors.py +0 -0
  69. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/core/logging.py +0 -0
  70. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/core/mtls_asgi.py +0 -0
  71. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/core/mtls_asgi_app.py +0 -0
  72. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/core/mtls_server.py +0 -0
  73. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/core/protocol_manager.py +0 -0
  74. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/core/proxy_client.py +0 -0
  75. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/core/proxy_registration.py +0 -0
  76. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/core/role_utils.py +0 -0
  77. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/core/security_adapter.py +0 -0
  78. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/core/security_factory.py +0 -0
  79. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/core/security_integration.py +0 -0
  80. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/core/server_adapter.py +0 -0
  81. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/core/server_engine.py +0 -0
  82. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/core/settings.py +0 -0
  83. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/core/ssl_utils.py +0 -0
  84. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/core/transport_manager.py +0 -0
  85. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/core/unified_config_adapter.py +0 -0
  86. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/core/utils.py +0 -0
  87. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/custom_openapi.py +0 -0
  88. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/examples/__init__.py +0 -0
  89. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/examples/basic_framework/__init__.py +0 -0
  90. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/examples/basic_framework/commands/__init__.py +0 -0
  91. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/examples/basic_framework/hooks/__init__.py +0 -0
  92. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/examples/basic_framework/main.py +0 -0
  93. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/examples/commands/__init__.py +0 -0
  94. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/examples/create_certificates_simple.py +0 -0
  95. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/examples/create_test_configs.py +0 -0
  96. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/examples/debug_request_state.py +0 -0
  97. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/examples/debug_role_chain.py +0 -0
  98. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/examples/demo_client.py +0 -0
  99. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/examples/full_application/__init__.py +0 -0
  100. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/examples/full_application/commands/__init__.py +0 -0
  101. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/examples/full_application/commands/custom_echo_command.py +0 -0
  102. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/examples/full_application/commands/dynamic_calculator_command.py +0 -0
  103. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/examples/full_application/hooks/__init__.py +0 -0
  104. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/examples/full_application/hooks/application_hooks.py +0 -0
  105. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/examples/full_application/hooks/builtin_command_hooks.py +0 -0
  106. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/examples/full_application/main.py +0 -0
  107. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/examples/full_application/proxy_endpoints.py +0 -0
  108. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/examples/generate_all_certificates.py +0 -0
  109. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/examples/generate_certificates.py +0 -0
  110. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/examples/generate_certificates_and_tokens.py +0 -0
  111. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/examples/generate_test_configs.py +0 -0
  112. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/examples/proxy_registration_example.py +0 -0
  113. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/examples/run_example.py +0 -0
  114. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/examples/run_full_test_suite.py +0 -0
  115. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/examples/run_proxy_server.py +0 -0
  116. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/examples/run_security_tests.py +0 -0
  117. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/examples/run_security_tests_fixed.py +0 -0
  118. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/examples/scripts/config_generator.py +0 -0
  119. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/examples/scripts/create_certificates_simple.py +0 -0
  120. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/examples/scripts/generate_certificates_and_tokens.py +0 -0
  121. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/examples/security_test_client.py +0 -0
  122. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/examples/test_config.py +0 -0
  123. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/examples/test_config_generator.py +0 -0
  124. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/examples/test_examples.py +0 -0
  125. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/examples/universal_client.py +0 -0
  126. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/main.py +0 -0
  127. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter/openapi.py +0 -0
  128. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter.egg-info/SOURCES.txt +0 -0
  129. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter.egg-info/dependency_links.txt +0 -0
  130. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter.egg-info/entry_points.txt +0 -0
  131. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter.egg-info/not-zip-safe +0 -0
  132. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter.egg-info/requires.txt +0 -0
  133. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/mcp_proxy_adapter.egg-info/top_level.txt +0 -0
  134. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/setup.cfg +0 -0
  135. {mcp_proxy_adapter-6.4.29 → mcp_proxy_adapter-6.4.33}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcp-proxy-adapter
3
- Version: 6.4.29
3
+ Version: 6.4.33
4
4
  Summary: Powerful JSON-RPC microservices framework with built-in security, authentication, and proxy registration
5
5
  Home-page: https://github.com/maverikod/mcp-proxy-adapter
6
6
  Author: Vasiliy Zdanovskiy
@@ -119,12 +119,16 @@ class UserInfoMiddleware(BaseHTTPMiddleware):
119
119
  logger.warning(f"⚠️ Failed to initialize AuthManager: {e}")
120
120
  self._security_available = False
121
121
 
122
+ # Always initialize api_keys for fallback
123
+ security_config = config.get("security", {})
124
+ auth_config = security_config.get("auth", {})
125
+ self.api_keys = auth_config.get("api_keys", {})
126
+
122
127
  if not self._security_available:
123
128
  # Fallback to basic API key handling
124
- security_config = config.get("security", {})
125
- auth_config = security_config.get("auth", {})
126
- self.api_keys = auth_config.get("api_keys", {})
127
129
  logger.info("ℹ️ User info middleware initialized with basic auth")
130
+ else:
131
+ logger.info("ℹ️ User info middleware initialized with mcp_security_framework (fallback enabled)")
128
132
 
129
133
  async def dispatch(
130
134
  self, request: Request, call_next: Callable[[Request], Awaitable[Response]]
@@ -190,9 +194,15 @@ class UserInfoMiddleware(BaseHTTPMiddleware):
190
194
 
191
195
  if not self._security_available:
192
196
  # Fallback to basic API key handling
193
- if api_key in getattr(self, "api_keys", {}):
194
- user_role = self.api_keys[api_key]
195
-
197
+ api_keys_dict = getattr(self, "api_keys", {})
198
+ # Find role by API key value (not key)
199
+ user_role = None
200
+ for role, key_value in api_keys_dict.items():
201
+ if key_value == api_key:
202
+ user_role = role
203
+ break
204
+
205
+ if user_role:
196
206
  # Get permissions for this role from roles file if available
197
207
  role_permissions = ["read"] # default permissions
198
208
  if (
@@ -211,10 +221,9 @@ class UserInfoMiddleware(BaseHTTPMiddleware):
211
221
  "roles": [user_role],
212
222
  "permissions": role_permissions,
213
223
  }
214
-
215
224
  logger.debug(
216
- f"✅ Authenticated user with basic auth: "
217
- f"{request.state.user}"
225
+ f"✅ User authenticated with API key: "
226
+ f"{api_key[:8]}..."
218
227
  )
219
228
  else:
220
229
  # API key not found
@@ -1220,6 +1220,66 @@ def validate_output_directory(output_dir: Path) -> bool:
1220
1220
  return True
1221
1221
 
1222
1222
 
1223
+ def check_ports_available() -> bool:
1224
+ """
1225
+ Check if all required test ports are available.
1226
+ Returns True if all ports are free, False otherwise.
1227
+ """
1228
+ import socket
1229
+
1230
+ # Ports used by the test suite
1231
+ test_ports = [
1232
+ 20000, # basic_http
1233
+ 20001, # http_token
1234
+ 20002, # https_simple
1235
+ 20003, # https_token
1236
+ 20004, # mtls_no_roles
1237
+ 20005, # test_proxy_server
1238
+ 20010, # proxy_port
1239
+ 20020, # base_port (run_security_tests)
1240
+ 20021, # base_port + 1
1241
+ 20022, # base_port + 2
1242
+ 20023, # base_port + 3
1243
+ 20024, # base_port + 4
1244
+ 20025, # base_port + 5
1245
+ 20026, # base_port + 6
1246
+ 20027, # base_port + 7
1247
+ 20028, # base_port + 8
1248
+ 20029, # base_port + 9
1249
+ 3006, # proxy registration
1250
+ ]
1251
+
1252
+ occupied_ports = []
1253
+
1254
+ print("🔍 Checking port availability...")
1255
+ for port in test_ports:
1256
+ try:
1257
+ with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
1258
+ sock.settimeout(1)
1259
+ result = sock.connect_ex(('127.0.0.1', port))
1260
+ if result == 0:
1261
+ occupied_ports.append(port)
1262
+ print(f" ❌ Port {port} is occupied")
1263
+ else:
1264
+ print(f" ✅ Port {port} is available")
1265
+ except Exception as e:
1266
+ print(f" ⚠️ Could not check port {port}: {e}")
1267
+ occupied_ports.append(port)
1268
+
1269
+ if occupied_ports:
1270
+ print(f"\n❌ CRITICAL: {len(occupied_ports)} ports are occupied: {occupied_ports}")
1271
+ print("💡 Please free these ports before running the test suite:")
1272
+ for port in occupied_ports:
1273
+ print(f" - Port {port}: kill processes using this port")
1274
+ print("\n🔧 You can use these commands to free ports:")
1275
+ for port in occupied_ports:
1276
+ print(f" fuser -k {port}/tcp")
1277
+ return False
1278
+
1279
+ print(f"✅ All {len(test_ports)} required ports are available")
1280
+ return True
1281
+
1282
+
1223
1283
  def main() -> int:
1224
1284
  """Main function for command line execution."""
1225
1285
  parser = argparse.ArgumentParser(
@@ -1243,6 +1303,13 @@ def main() -> int:
1243
1303
  )
1244
1304
  args = parser.parse_args()
1245
1305
 
1306
+ # FIRST: Check port availability - if this fails, don't proceed
1307
+ print("🔍 STEP 1: Port Availability Check")
1308
+ if not check_ports_available():
1309
+ print("\n❌ FAILED: Required ports are occupied. Aborting setup.")
1310
+ print("💡 Please free the occupied ports and try again.")
1311
+ return 1
1312
+
1246
1313
  try:
1247
1314
  # Determine target directory
1248
1315
  if args.output_dir is None:
@@ -2,4 +2,4 @@
2
2
  Version information for MCP Proxy Adapter.
3
3
  """
4
4
 
5
- __version__ = "6.4.29"
5
+ __version__ = "6.4.33"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcp-proxy-adapter
3
- Version: 6.4.29
3
+ Version: 6.4.33
4
4
  Summary: Powerful JSON-RPC microservices framework with built-in security, authentication, and proxy registration
5
5
  Home-page: https://github.com/maverikod/mcp-proxy-adapter
6
6
  Author: Vasiliy Zdanovskiy
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "mcp-proxy-adapter"
7
- version = "6.4.29"
7
+ version = "6.4.33"
8
8
  description = "Powerful JSON-RPC microservices framework with built-in security, authentication, and proxy registration"
9
9
  readme = "README.md"
10
10
  license = {text = "MIT"}