mcp-proxy-adapter 6.9.23__tar.gz → 6.9.25__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.

Potentially problematic release.


This version of mcp-proxy-adapter might be problematic. Click here for more details.

Files changed (164) hide show
  1. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/PKG-INFO +2 -2
  2. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/core/config_validator.py +81 -0
  3. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/core/proxy_registration.py +19 -0
  4. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/config_builder.py +1 -1
  5. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter.egg-info/PKG-INFO +2 -2
  6. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter.egg-info/requires.txt +1 -1
  7. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/pyproject.toml +2 -2
  8. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/README.md +0 -0
  9. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/__init__.py +0 -0
  10. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/__main__.py +0 -0
  11. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/api/__init__.py +0 -0
  12. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/api/app.py +0 -0
  13. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/api/handlers.py +0 -0
  14. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/api/middleware/__init__.py +0 -0
  15. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/api/middleware/base.py +0 -0
  16. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/api/middleware/command_permission_middleware.py +0 -0
  17. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/api/middleware/error_handling.py +0 -0
  18. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/api/middleware/factory.py +0 -0
  19. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/api/middleware/logging.py +0 -0
  20. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/api/middleware/performance.py +0 -0
  21. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/api/middleware/protocol_middleware.py +0 -0
  22. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/api/middleware/transport_middleware.py +0 -0
  23. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/api/middleware/unified_security.py +0 -0
  24. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/api/middleware/user_info_middleware.py +0 -0
  25. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/api/schemas.py +0 -0
  26. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/api/tool_integration.py +0 -0
  27. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/api/tools.py +0 -0
  28. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/commands/__init__.py +0 -0
  29. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/commands/auth_validation_command.py +0 -0
  30. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/commands/base.py +0 -0
  31. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/commands/builtin_commands.py +0 -0
  32. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/commands/catalog_manager.py +0 -0
  33. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/commands/cert_monitor_command.py +0 -0
  34. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/commands/certificate_management_command.py +0 -0
  35. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/commands/command_registry.py +0 -0
  36. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/commands/config_command.py +0 -0
  37. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/commands/dependency_container.py +0 -0
  38. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/commands/dependency_manager.py +0 -0
  39. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/commands/echo_command.py +0 -0
  40. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/commands/health_command.py +0 -0
  41. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/commands/help_command.py +0 -0
  42. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/commands/hooks.py +0 -0
  43. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/commands/key_management_command.py +0 -0
  44. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/commands/load_command.py +0 -0
  45. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/commands/plugins_command.py +0 -0
  46. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/commands/protocol_management_command.py +0 -0
  47. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/commands/proxy_registration_command.py +0 -0
  48. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/commands/registration_status_command.py +0 -0
  49. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/commands/reload_command.py +0 -0
  50. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/commands/result.py +0 -0
  51. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/commands/role_test_command.py +0 -0
  52. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/commands/roles_management_command.py +0 -0
  53. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/commands/security_command.py +0 -0
  54. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/commands/settings_command.py +0 -0
  55. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/commands/ssl_setup_command.py +0 -0
  56. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/commands/token_management_command.py +0 -0
  57. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/commands/transport_management_command.py +0 -0
  58. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/commands/unload_command.py +0 -0
  59. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/config.py +0 -0
  60. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/core/__init__.py +0 -0
  61. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/core/app_factory.py +0 -0
  62. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/core/app_runner.py +0 -0
  63. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/core/auth_validator.py +0 -0
  64. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/core/certificate_utils.py +0 -0
  65. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/core/client.py +0 -0
  66. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/core/client_manager.py +0 -0
  67. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/core/client_security.py +0 -0
  68. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/core/config_converter.py +0 -0
  69. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/core/crl_utils.py +0 -0
  70. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/core/errors.py +0 -0
  71. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/core/logging.py +0 -0
  72. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/core/mtls_asgi.py +0 -0
  73. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/core/mtls_asgi_app.py +0 -0
  74. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/core/mtls_proxy.py +0 -0
  75. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/core/mtls_server.py +0 -0
  76. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/core/protocol_manager.py +0 -0
  77. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/core/proxy_client.py +0 -0
  78. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/core/role_utils.py +0 -0
  79. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/core/security_adapter.py +0 -0
  80. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/core/security_factory.py +0 -0
  81. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/core/security_integration.py +0 -0
  82. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/core/server_adapter.py +0 -0
  83. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/core/server_engine.py +0 -0
  84. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/core/settings.py +0 -0
  85. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/core/signal_handler.py +0 -0
  86. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/core/ssl_utils.py +0 -0
  87. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/core/transport_manager.py +0 -0
  88. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/core/unified_config_adapter.py +0 -0
  89. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/core/utils.py +0 -0
  90. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/custom_openapi.py +0 -0
  91. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/__init__.py +0 -0
  92. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/basic_framework/__init__.py +0 -0
  93. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/basic_framework/commands/__init__.py +0 -0
  94. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/basic_framework/hooks/__init__.py +0 -0
  95. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/basic_framework/main.py +0 -0
  96. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/bugfix_certificate_config.py +0 -0
  97. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/cert_manager_bugfix.py +0 -0
  98. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/check_config.py +0 -0
  99. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/commands/__init__.py +0 -0
  100. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/config_cli.py +0 -0
  101. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/create_test_configs.py +0 -0
  102. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/debug_request_state.py +0 -0
  103. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/debug_role_chain.py +0 -0
  104. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/demo_client.py +0 -0
  105. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/full_application/__init__.py +0 -0
  106. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/full_application/commands/__init__.py +0 -0
  107. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/full_application/commands/custom_echo_command.py +0 -0
  108. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/full_application/commands/dynamic_calculator_command.py +0 -0
  109. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/full_application/commands/echo_command.py +0 -0
  110. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/full_application/commands/help_command.py +0 -0
  111. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/full_application/commands/list_command.py +0 -0
  112. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/full_application/hooks/__init__.py +0 -0
  113. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/full_application/hooks/application_hooks.py +0 -0
  114. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/full_application/hooks/builtin_command_hooks.py +0 -0
  115. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/full_application/main.py +0 -0
  116. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/full_application/proxy_endpoints.py +0 -0
  117. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/full_application/run_mtls.py +0 -0
  118. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/full_application/run_simple.py +0 -0
  119. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/full_application/test_minimal_server.py +0 -0
  120. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/full_application/test_server.py +0 -0
  121. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/full_application/test_simple_server.py +0 -0
  122. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/generate_config.py +0 -0
  123. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/proxy_registration_example.py +0 -0
  124. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/required_certificates.py +0 -0
  125. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/run_example.py +0 -0
  126. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/run_full_test_suite.py +0 -0
  127. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/run_proxy_server.py +0 -0
  128. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/run_security_tests_fixed.py +0 -0
  129. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/security_test_client.py +0 -0
  130. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/setup_test_environment.py +0 -0
  131. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/simple_protocol_test.py +0 -0
  132. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/test_chk_hostname_automated.py +0 -0
  133. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/test_config.py +0 -0
  134. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/test_config_builder.py +0 -0
  135. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/test_examples.py +0 -0
  136. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/test_framework_complete.py +0 -0
  137. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/test_mcp_server.py +0 -0
  138. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/test_protocol_examples.py +0 -0
  139. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/universal_client.py +0 -0
  140. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/update_config_certificates.py +0 -0
  141. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/validate_generator_compatibility.py +0 -0
  142. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/examples/validate_generator_compatibility_simple.py +0 -0
  143. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/main.py +0 -0
  144. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/openapi.py +0 -0
  145. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/schemas/base_schema.json +0 -0
  146. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/schemas/openapi_schema.json +0 -0
  147. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/schemas/roles.json +0 -0
  148. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/schemas/roles_schema.json +0 -0
  149. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter/version.py +0 -0
  150. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter.egg-info/SOURCES.txt +0 -0
  151. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter.egg-info/dependency_links.txt +0 -0
  152. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter.egg-info/entry_points.txt +0 -0
  153. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter.egg-info/not-zip-safe +0 -0
  154. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/mcp_proxy_adapter.egg-info/top_level.txt +0 -0
  155. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/setup.cfg +0 -0
  156. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/setup.py +0 -0
  157. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/tests/test_certificate_validation.py +0 -0
  158. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/tests/test_config_integration.py +0 -0
  159. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/tests/test_config_validation.py +0 -0
  160. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/tests/test_config_validation_isolated.py +0 -0
  161. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/tests/test_direct_import.py +0 -0
  162. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/tests/test_isolated_validation.py +0 -0
  163. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/tests/test_no_defaults.py +0 -0
  164. {mcp_proxy_adapter-6.9.23 → mcp_proxy_adapter-6.9.25}/tests/test_simple_validation.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcp-proxy-adapter
3
- Version: 6.9.23
3
+ Version: 6.9.25
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
@@ -35,7 +35,7 @@ Requires-Dist: docstring-parser<1.0.0,>=0.15
35
35
  Requires-Dist: typing-extensions<5.0.0,>=4.5.0
36
36
  Requires-Dist: jsonrpc>=1.2.0
37
37
  Requires-Dist: psutil>=5.9.0
38
- Requires-Dist: mcp_security_framework>=1.2.6
38
+ Requires-Dist: mcp_security_framework>=1.2.8
39
39
  Requires-Dist: flask>=3.1.0
40
40
  Requires-Dist: packaging>=20.0
41
41
  Requires-Dist: aiohttp<4.0.0,>=3.8.0
@@ -9,6 +9,7 @@ email: vasilyvz@gmail.com
9
9
  import json
10
10
  import os
11
11
  import logging
12
+ import re
12
13
  from pathlib import Path
13
14
  from typing import Dict, List, Any, Optional, Tuple, Set
14
15
  from enum import Enum
@@ -247,6 +248,8 @@ class ConfigValidator:
247
248
  self._validate_ssl_configuration()
248
249
  self._validate_proxy_registration()
249
250
  self._validate_roles_configuration()
251
+ self._validate_uuid_format()
252
+ self._validate_unknown_fields()
250
253
 
251
254
  return self.validation_results
252
255
 
@@ -1195,6 +1198,84 @@ class ConfigValidator:
1195
1198
  key="cert_file"
1196
1199
  ))
1197
1200
 
1201
+ def _validate_uuid_format(self) -> None:
1202
+ """Validate UUID4 format in configuration."""
1203
+
1204
+ # Check root level UUID
1205
+ if "uuid" in self.config_data:
1206
+ uuid_value = self.config_data["uuid"]
1207
+ if not self._is_valid_uuid4(uuid_value):
1208
+ self.validation_results.append(ValidationResult(
1209
+ level="error",
1210
+ message=f"Invalid UUID4 format: '{uuid_value}'. Expected format: xxxxxxxx-xxxx-4xxx-xxxx-xxxxxxxxxxxx",
1211
+ section="uuid",
1212
+ key="uuid"
1213
+ ))
1214
+
1215
+ # Check proxy_registration UUID if it exists
1216
+ if self._has_nested_key("proxy_registration.uuid"):
1217
+ uuid_value = self._get_nested_value("proxy_registration.uuid")
1218
+ if not self._is_valid_uuid4(uuid_value):
1219
+ self.validation_results.append(ValidationResult(
1220
+ level="error",
1221
+ message=f"Invalid UUID4 format in proxy_registration: '{uuid_value}'. Expected format: xxxxxxxx-xxxx-4xxx-xxxx-xxxxxxxxxxxx",
1222
+ section="proxy_registration",
1223
+ key="uuid"
1224
+ ))
1225
+
1226
+ def _is_valid_uuid4(self, uuid_str: str) -> bool:
1227
+ """Check if string is a valid UUID4."""
1228
+ if not isinstance(uuid_str, str):
1229
+ return False
1230
+
1231
+ uuid4_pattern = r'^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$'
1232
+ return bool(re.match(uuid4_pattern, uuid_str, re.IGNORECASE))
1233
+
1234
+ def _validate_unknown_fields(self) -> None:
1235
+ """Validate that no unknown fields are present in configuration."""
1236
+ # Define all known sections and their allowed fields
1237
+ known_sections = {
1238
+ "server": {"host", "port", "protocol", "debug", "log_level"},
1239
+ "logging": {"level", "file", "log_dir", "log_file", "error_log_file", "access_log_file",
1240
+ "max_file_size", "backup_count", "format", "date_format", "console_output", "file_output"},
1241
+ "commands": {"auto_discovery", "commands_directory", "catalog_directory", "plugin_servers",
1242
+ "auto_install_dependencies", "enabled_commands", "disabled_commands", "custom_commands_path"},
1243
+ "transport": {"type", "port", "verify_client", "chk_hostname", "ssl"},
1244
+ "proxy_registration": {"enabled", "proxy_url", "server_id", "server_name", "description", "version",
1245
+ "registration_timeout", "retry_attempts", "retry_delay", "auto_register_on_startup",
1246
+ "auto_unregister_on_shutdown", "uuid", "heartbeat"},
1247
+ "debug": {"enabled", "level"},
1248
+ "security": {"enabled", "tokens", "roles", "roles_file"},
1249
+ "roles": {"enabled", "config_file", "default_policy", "auto_load", "validation_enabled"},
1250
+ "ssl": {"enabled", "cert_file", "key_file", "ca_cert"},
1251
+ "uuid": set() # Root level UUID
1252
+ }
1253
+
1254
+ # Check for unknown root level fields
1255
+ for field in self.config_data:
1256
+ if field not in known_sections:
1257
+ self.validation_results.append(ValidationResult(
1258
+ level="warning",
1259
+ message=f"Unknown field '{field}' at root level",
1260
+ section=field,
1261
+ suggestion="Check if this field is needed or if it's a typo"
1262
+ ))
1263
+
1264
+ # Check for unknown fields in known sections
1265
+ for section_name, allowed_fields in known_sections.items():
1266
+ if section_name in self.config_data:
1267
+ section_data = self.config_data[section_name]
1268
+ if isinstance(section_data, dict):
1269
+ for field in section_data:
1270
+ if field not in allowed_fields:
1271
+ self.validation_results.append(ValidationResult(
1272
+ level="warning",
1273
+ message=f"Unknown field '{field}' in section '{section_name}'",
1274
+ section=section_name,
1275
+ key=field,
1276
+ suggestion="Check if this field is needed or if it's a typo"
1277
+ ))
1278
+
1198
1279
  def get_validation_summary(self) -> Dict[str, Any]:
1199
1280
  """Get summary of validation results."""
1200
1281
  error_count = sum(1 for r in self.validation_results if r.level == "error")
@@ -93,6 +93,23 @@ class ProxyRegistrationManager:
93
93
  "server_id is required in registration configuration. "
94
94
  "Please specify a server_id or proxy_info.name in your configuration."
95
95
  )
96
+ # UUID is mandatory for registration payload
97
+ self.uuid = self.registration_config.get("uuid")
98
+ if not self.uuid:
99
+ raise ValueError(
100
+ "uuid is required in registration configuration. "
101
+ "Please specify a UUID under 'proxy_registration.uuid' in your configuration."
102
+ )
103
+
104
+ # Validate UUID4 format
105
+ import re
106
+ uuid4_pattern = r'^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$'
107
+ if not re.match(uuid4_pattern, self.uuid, re.IGNORECASE):
108
+ error_msg = f"Invalid UUID4 format: '{self.uuid}'. Expected format: xxxxxxxx-xxxx-4xxx-xxxx-xxxxxxxxxxxx"
109
+ get_global_logger().error(f"❌ UUID validation failed: {error_msg}")
110
+ raise ValueError(error_msg)
111
+
112
+ get_global_logger().info(f"✅ UUID validation passed: {self.uuid}")
96
113
  self.server_name = self.registration_config.get("server_name")
97
114
  if not self.server_name:
98
115
  # Try to get from proxy_info.name as fallback
@@ -113,6 +130,7 @@ class ProxyRegistrationManager:
113
130
  )
114
131
  else:
115
132
  self.server_id = None
133
+ self.uuid = None
116
134
  self.server_name = None
117
135
  self.description = None
118
136
 
@@ -419,6 +437,7 @@ class ProxyRegistrationManager:
419
437
  proxy_info = self.registration_config.get("proxy_info", {})
420
438
  registration_data = {
421
439
  "server_id": self.server_id,
440
+ "uuid": self.uuid,
422
441
  "server_url": self.server_url,
423
442
  "server_name": self.server_name,
424
443
  "description": self.description,
@@ -27,7 +27,7 @@ def generate_complete_config(host: str = "0.0.0.0", port: int = 8000) -> Dict[st
27
27
  Complete configuration dictionary
28
28
  """
29
29
  return {
30
- "uuid": str(uuid.uuid4()),
30
+ "uuid": str(uuid.uuid4()), # This generates valid UUID4
31
31
  "server": {
32
32
  "host": host,
33
33
  "port": port,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcp-proxy-adapter
3
- Version: 6.9.23
3
+ Version: 6.9.25
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
@@ -35,7 +35,7 @@ Requires-Dist: docstring-parser<1.0.0,>=0.15
35
35
  Requires-Dist: typing-extensions<5.0.0,>=4.5.0
36
36
  Requires-Dist: jsonrpc>=1.2.0
37
37
  Requires-Dist: psutil>=5.9.0
38
- Requires-Dist: mcp_security_framework>=1.2.6
38
+ Requires-Dist: mcp_security_framework>=1.2.8
39
39
  Requires-Dist: flask>=3.1.0
40
40
  Requires-Dist: packaging>=20.0
41
41
  Requires-Dist: aiohttp<4.0.0,>=3.8.0
@@ -5,7 +5,7 @@ docstring-parser<1.0.0,>=0.15
5
5
  typing-extensions<5.0.0,>=4.5.0
6
6
  jsonrpc>=1.2.0
7
7
  psutil>=5.9.0
8
- mcp_security_framework>=1.2.6
8
+ mcp_security_framework>=1.2.8
9
9
  flask>=3.1.0
10
10
  packaging>=20.0
11
11
  aiohttp<4.0.0,>=3.8.0
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "mcp-proxy-adapter"
7
- version = "6.9.23"
7
+ version = "6.9.25"
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"}
@@ -51,7 +51,7 @@ dependencies = [
51
51
  "typing-extensions>=4.5.0,<5.0.0",
52
52
  "jsonrpc>=1.2.0",
53
53
  "psutil>=5.9.0",
54
- "mcp_security_framework>=1.2.6",
54
+ "mcp_security_framework>=1.2.8",
55
55
  "flask>=3.1.0",
56
56
  "packaging>=20.0",
57
57
  "aiohttp>=3.8.0,<4.0.0",