mcp-proxy-adapter 6.4.14__tar.gz → 6.4.16__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.14 → mcp_proxy_adapter-6.4.16}/PKG-INFO +2 -1
  2. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/examples/run_full_test_suite.py +0 -4
  3. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/examples/setup_test_environment.py +169 -19
  4. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/version.py +1 -1
  5. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter.egg-info/PKG-INFO +2 -1
  6. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter.egg-info/requires.txt +1 -0
  7. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/pyproject.toml +2 -1
  8. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/README.md +0 -0
  9. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/__init__.py +0 -0
  10. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/__main__.py +0 -0
  11. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/api/__init__.py +0 -0
  12. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/api/app.py +0 -0
  13. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/api/handlers.py +0 -0
  14. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/api/middleware/__init__.py +0 -0
  15. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/api/middleware/base.py +0 -0
  16. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/api/middleware/command_permission_middleware.py +0 -0
  17. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/api/middleware/error_handling.py +0 -0
  18. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/api/middleware/factory.py +0 -0
  19. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/api/middleware/logging.py +0 -0
  20. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/api/middleware/performance.py +0 -0
  21. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/api/middleware/protocol_middleware.py +0 -0
  22. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/api/middleware/transport_middleware.py +0 -0
  23. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/api/middleware/unified_security.py +0 -0
  24. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/api/middleware/user_info_middleware.py +0 -0
  25. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/api/schemas.py +0 -0
  26. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/api/tool_integration.py +0 -0
  27. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/api/tools.py +0 -0
  28. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/commands/__init__.py +0 -0
  29. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/commands/auth_validation_command.py +0 -0
  30. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/commands/base.py +0 -0
  31. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/commands/builtin_commands.py +0 -0
  32. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/commands/catalog_manager.py +0 -0
  33. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/commands/cert_monitor_command.py +0 -0
  34. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/commands/certificate_management_command.py +0 -0
  35. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/commands/command_registry.py +0 -0
  36. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/commands/config_command.py +0 -0
  37. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/commands/dependency_container.py +0 -0
  38. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/commands/dependency_manager.py +0 -0
  39. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/commands/echo_command.py +0 -0
  40. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/commands/health_command.py +0 -0
  41. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/commands/help_command.py +0 -0
  42. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/commands/hooks.py +0 -0
  43. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/commands/key_management_command.py +0 -0
  44. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/commands/load_command.py +0 -0
  45. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/commands/plugins_command.py +0 -0
  46. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/commands/protocol_management_command.py +0 -0
  47. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/commands/proxy_registration_command.py +0 -0
  48. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/commands/reload_command.py +0 -0
  49. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/commands/result.py +0 -0
  50. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/commands/role_test_command.py +0 -0
  51. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/commands/roles_management_command.py +0 -0
  52. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/commands/security_command.py +0 -0
  53. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/commands/settings_command.py +0 -0
  54. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/commands/ssl_setup_command.py +0 -0
  55. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/commands/token_management_command.py +0 -0
  56. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/commands/transport_management_command.py +0 -0
  57. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/commands/unload_command.py +0 -0
  58. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/config.py +0 -0
  59. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/core/__init__.py +0 -0
  60. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/core/app_factory.py +0 -0
  61. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/core/app_runner.py +0 -0
  62. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/core/auth_validator.py +0 -0
  63. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/core/certificate_utils.py +0 -0
  64. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/core/client.py +0 -0
  65. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/core/client_manager.py +0 -0
  66. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/core/client_security.py +0 -0
  67. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/core/config_converter.py +0 -0
  68. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/core/config_validator.py +0 -0
  69. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/core/crl_utils.py +0 -0
  70. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/core/errors.py +0 -0
  71. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/core/logging.py +0 -0
  72. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/core/mtls_asgi.py +0 -0
  73. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/core/mtls_asgi_app.py +0 -0
  74. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/core/mtls_server.py +0 -0
  75. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/core/protocol_manager.py +0 -0
  76. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/core/proxy_client.py +0 -0
  77. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/core/proxy_registration.py +0 -0
  78. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/core/role_utils.py +0 -0
  79. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/core/security_adapter.py +0 -0
  80. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/core/security_factory.py +0 -0
  81. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/core/security_integration.py +0 -0
  82. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/core/server_adapter.py +0 -0
  83. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/core/server_engine.py +0 -0
  84. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/core/settings.py +0 -0
  85. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/core/ssl_utils.py +0 -0
  86. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/core/transport_manager.py +0 -0
  87. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/core/unified_config_adapter.py +0 -0
  88. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/core/utils.py +0 -0
  89. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/custom_openapi.py +0 -0
  90. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/examples/__init__.py +0 -0
  91. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/examples/basic_framework/__init__.py +0 -0
  92. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/examples/basic_framework/commands/__init__.py +0 -0
  93. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/examples/basic_framework/hooks/__init__.py +0 -0
  94. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/examples/basic_framework/main.py +0 -0
  95. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/examples/commands/__init__.py +0 -0
  96. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/examples/create_certificates_simple.py +0 -0
  97. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/examples/create_test_configs.py +0 -0
  98. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/examples/debug_request_state.py +0 -0
  99. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/examples/debug_role_chain.py +0 -0
  100. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/examples/demo_client.py +0 -0
  101. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/examples/full_application/__init__.py +0 -0
  102. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/examples/full_application/commands/__init__.py +0 -0
  103. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/examples/full_application/commands/custom_echo_command.py +0 -0
  104. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/examples/full_application/commands/dynamic_calculator_command.py +0 -0
  105. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/examples/full_application/hooks/__init__.py +0 -0
  106. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/examples/full_application/hooks/application_hooks.py +0 -0
  107. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/examples/full_application/hooks/builtin_command_hooks.py +0 -0
  108. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/examples/full_application/main.py +0 -0
  109. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/examples/full_application/proxy_endpoints.py +0 -0
  110. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/examples/generate_all_certificates.py +0 -0
  111. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/examples/generate_certificates.py +0 -0
  112. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/examples/generate_certificates_and_tokens.py +0 -0
  113. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/examples/generate_test_configs.py +0 -0
  114. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/examples/proxy_registration_example.py +0 -0
  115. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/examples/run_example.py +0 -0
  116. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/examples/run_proxy_server.py +0 -0
  117. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/examples/run_security_tests.py +0 -0
  118. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/examples/run_security_tests_fixed.py +0 -0
  119. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/examples/scripts/config_generator.py +0 -0
  120. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/examples/scripts/create_certificates_simple.py +0 -0
  121. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/examples/scripts/generate_certificates_and_tokens.py +0 -0
  122. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/examples/security_test_client.py +0 -0
  123. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/examples/test_config.py +0 -0
  124. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/examples/test_config_generator.py +0 -0
  125. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/examples/test_examples.py +0 -0
  126. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/examples/universal_client.py +0 -0
  127. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/main.py +0 -0
  128. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter/openapi.py +0 -0
  129. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter.egg-info/SOURCES.txt +0 -0
  130. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter.egg-info/dependency_links.txt +0 -0
  131. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter.egg-info/entry_points.txt +0 -0
  132. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter.egg-info/not-zip-safe +0 -0
  133. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/mcp_proxy_adapter.egg-info/top_level.txt +0 -0
  134. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/setup.cfg +0 -0
  135. {mcp_proxy_adapter-6.4.14 → mcp_proxy_adapter-6.4.16}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcp-proxy-adapter
3
- Version: 6.4.14
3
+ Version: 6.4.16
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
@@ -31,6 +31,7 @@ Description-Content-Type: text/markdown
31
31
  Requires-Dist: fastapi<1.0.0,>=0.95.0
32
32
  Requires-Dist: pydantic>=2.0.0
33
33
  Requires-Dist: hypercorn<1.0.0,>=0.15.0
34
+ Requires-Dist: uvicorn<1.0.0,>=0.15.0
34
35
  Requires-Dist: docstring-parser<1.0.0,>=0.15
35
36
  Requires-Dist: typing-extensions<5.0.0,>=4.5.0
36
37
  Requires-Dist: jsonrpc>=1.2.0
@@ -436,10 +436,6 @@ class FullTestSuiteRunner:
436
436
  print(f"Python executable: {sys.executable}")
437
437
 
438
438
  try:
439
- # Step 0: Clean up existing directories
440
- if not self.cleanup_directories():
441
- return False
442
-
443
439
  # Step 1: Environment validation
444
440
  if not self.check_environment():
445
441
  return False
@@ -18,7 +18,9 @@ Features:
18
18
  - Protocol-aware configuration generation
19
19
  - Enhanced error handling and troubleshooting
20
20
  """
21
+ import os
21
22
  import shutil
23
+ import subprocess
22
24
  import sys
23
25
  import argparse
24
26
  import json
@@ -857,6 +859,25 @@ def setup_test_environment(output_dir: Path) -> None:
857
859
  shutil.copy2(cert_tokens_src, output_dir / "scripts/")
858
860
  print("✅ Copied generate_certificates_and_tokens.py")
859
861
 
862
+ # Copy test suite runner
863
+ test_suite_src = examples_src_root / "run_full_test_suite.py"
864
+ if test_suite_src.exists():
865
+ shutil.copy2(test_suite_src, output_dir)
866
+ print("✅ Copied run_full_test_suite.py")
867
+
868
+ # Copy other required test files
869
+ test_files = [
870
+ "create_test_configs.py",
871
+ "comprehensive_config.json",
872
+ "run_security_tests.py",
873
+ "run_proxy_server.py"
874
+ ]
875
+ for test_file in test_files:
876
+ test_file_src = examples_src_root / test_file
877
+ if test_file_src.exists():
878
+ shutil.copy2(test_file_src, output_dir)
879
+ print(f"✅ Copied {test_file}")
880
+
860
881
  # Copy roles.json to the root directory for compatibility
861
882
  roles_src = examples_src_root / "roles.json"
862
883
  if roles_src.exists():
@@ -1023,27 +1044,139 @@ def generate_certificates_with_framework(output_dir: Path) -> bool:
1023
1044
  return False
1024
1045
 
1025
1046
 
1047
+ def run_full_test_suite(target_root: Path) -> bool:
1048
+ """Run the full test suite after environment setup."""
1049
+ print("\n" + "=" * 60)
1050
+ print("🚀 AUTOMATICALLY RUNNING FULL TEST SUITE")
1051
+ print("=" * 60)
1052
+
1053
+ try:
1054
+ # Change to target directory
1055
+ original_cwd = Path.cwd()
1056
+ os.chdir(target_root)
1057
+
1058
+ # Run the full test suite
1059
+ result = subprocess.run([
1060
+ sys.executable, "run_full_test_suite.py"
1061
+ ], capture_output=True, text=True, timeout=300) # 5 minute timeout
1062
+
1063
+ # Print output
1064
+ if result.stdout:
1065
+ print("📋 Test Suite Output:")
1066
+ print(result.stdout)
1067
+
1068
+ if result.stderr:
1069
+ print("⚠️ Test Suite Warnings/Errors:")
1070
+ print(result.stderr)
1071
+
1072
+ if result.returncode == 0:
1073
+ print("🎉 FULL TEST SUITE COMPLETED SUCCESSFULLY!")
1074
+ return True
1075
+ else:
1076
+ print(f"❌ FULL TEST SUITE FAILED (exit code: {result.returncode})")
1077
+ return False
1078
+
1079
+ except subprocess.TimeoutExpired:
1080
+ print("⏰ Test suite timed out after 5 minutes")
1081
+ return False
1082
+ except Exception as e:
1083
+ print(f"❌ Error running test suite: {e}")
1084
+ return False
1085
+ finally:
1086
+ # Restore original working directory
1087
+ os.chdir(original_cwd)
1088
+
1089
+
1090
+ def validate_output_directory(output_dir: Path) -> bool:
1091
+ """
1092
+ Validate output directory for test environment setup.
1093
+
1094
+ Args:
1095
+ output_dir: Path to the target directory
1096
+
1097
+ Returns:
1098
+ True if directory is valid for setup, False otherwise
1099
+ """
1100
+ output_dir = output_dir.resolve()
1101
+
1102
+ # Check if directory exists
1103
+ if output_dir.exists():
1104
+ if not output_dir.is_dir():
1105
+ print(f"❌ Path exists but is not a directory: {output_dir}")
1106
+ return False
1107
+
1108
+ # Check if directory is empty
1109
+ try:
1110
+ contents = list(output_dir.iterdir())
1111
+ if contents:
1112
+ print(f"❌ Directory is not empty: {output_dir}")
1113
+ print(f" Found {len(contents)} items:")
1114
+ for item in contents[:5]: # Show first 5 items
1115
+ print(f" - {item.name}")
1116
+ if len(contents) > 5:
1117
+ print(f" ... and {len(contents) - 5} more items")
1118
+ print("\n💡 Please use an empty directory or specify a different path.")
1119
+ return False
1120
+ except PermissionError:
1121
+ print(f"❌ Permission denied accessing directory: {output_dir}")
1122
+ return False
1123
+ else:
1124
+ # Directory doesn't exist, try to create it
1125
+ try:
1126
+ output_dir.mkdir(parents=True, exist_ok=True)
1127
+ print(f"✅ Created directory: {output_dir}")
1128
+ except PermissionError:
1129
+ print(f"❌ Permission denied creating directory: {output_dir}")
1130
+ return False
1131
+ except Exception as e:
1132
+ print(f"❌ Failed to create directory {output_dir}: {e}")
1133
+ return False
1134
+
1135
+ return True
1136
+
1137
+
1026
1138
  def main() -> int:
1027
1139
  """Main function for command line execution."""
1028
1140
  parser = argparse.ArgumentParser(
1029
- description="Setup enhanced test environment for MCP Proxy Adapter"
1141
+ description="Setup enhanced test environment for MCP Proxy Adapter and run full test suite"
1030
1142
  )
1031
1143
  parser.add_argument(
1032
- "--output-dir",
1033
- "-o",
1144
+ "output_dir",
1145
+ nargs="?",
1034
1146
  type=str,
1035
- default=".",
1147
+ default=None,
1036
1148
  help=(
1037
1149
  "Target directory to create the test environment "
1038
- "(default: current directory)"
1150
+ "(default: auto-generated directory in /tmp)"
1039
1151
  ),
1040
1152
  )
1041
1153
  parser.add_argument(
1042
1154
  "--skip-certs", action="store_true", help="Skip certificate generation"
1043
1155
  )
1156
+ parser.add_argument(
1157
+ "--skip-tests", action="store_true", help="Skip running the full test suite"
1158
+ )
1044
1159
  args = parser.parse_args()
1160
+
1045
1161
  try:
1046
- target_root = Path(args.output_dir)
1162
+ # Determine target directory
1163
+ if args.output_dir is None:
1164
+ # Create auto-generated directory in /tmp
1165
+ import tempfile
1166
+ import time
1167
+ timestamp = int(time.time())
1168
+ target_root = Path(tempfile.gettempdir()) / f"mcp_test_env_{timestamp}"
1169
+ print(f"🔧 Auto-generating test environment directory: {target_root}")
1170
+ else:
1171
+ target_root = Path(args.output_dir)
1172
+
1173
+ # Validate output directory
1174
+ print(f"🔍 Validating output directory: {target_root}")
1175
+ if not validate_output_directory(target_root):
1176
+ print("\n❌ Directory validation failed. Exiting.")
1177
+ return 1
1178
+
1179
+ print(f"✅ Directory validation passed: {target_root}")
1047
1180
  setup_test_environment(target_root)
1048
1181
 
1049
1182
  # Generate certificates if framework is available and not skipped
@@ -1056,6 +1189,16 @@ def main() -> int:
1056
1189
  "⚠️ Skipping certificate generation (mcp_security_framework "
1057
1190
  "not available)"
1058
1191
  )
1192
+
1193
+ # Run full test suite if not skipped
1194
+ if not args.skip_tests:
1195
+ test_success = run_full_test_suite(target_root)
1196
+ if not test_success:
1197
+ print("\n❌ TEST SUITE FAILED - Check the output above for details")
1198
+ return 1
1199
+ else:
1200
+ print("⚠️ Skipping test suite execution (--skip-tests specified)")
1201
+
1059
1202
  except Exception as e:
1060
1203
  print(
1061
1204
  "❌ Error setting up test environment: {}".format(e),
@@ -1070,19 +1213,26 @@ def main() -> int:
1070
1213
  print("\n" + "=" * 60)
1071
1214
  print("✅ ENHANCED TEST ENVIRONMENT SETUP COMPLETED SUCCESSFULLY")
1072
1215
  print("=" * 60)
1073
- print("\n📋 NEXT STEPS:")
1074
- print("1. Review configuration documentation:")
1075
- print(" cat docs/CONFIGURATION_GUIDE.md")
1076
- print("\n2. Check available configurations:")
1077
- print(" ls -la configs/")
1078
- print("\n3. Test proxy registration SSL fix:")
1079
- print(" python test_proxy_registration.py")
1080
- print("\n4. Start server with a specific configuration:")
1081
- print(" python -m mcp_proxy_adapter --config configs/production_https.json")
1082
- print("\n5. Run security tests:")
1083
- print(" python -m mcp_proxy_adapter.examples.run_security_tests")
1084
- print("\n6. Generate additional certificates (if needed):")
1085
- print(" python scripts/create_certificates_simple.py")
1216
+
1217
+ if not args.skip_tests:
1218
+ print("\n🎉 ALL TESTS PASSED - Environment is ready for use!")
1219
+ else:
1220
+ print("\n📋 NEXT STEPS:")
1221
+ print("1. Review configuration documentation:")
1222
+ print(" cat docs/CONFIGURATION_GUIDE.md")
1223
+ print("\n2. Check available configurations:")
1224
+ print(" ls -la configs/")
1225
+ print("\n3. Run the full test suite:")
1226
+ print(" python run_full_test_suite.py")
1227
+ print("\n4. Test proxy registration SSL fix:")
1228
+ print(" python test_proxy_registration.py")
1229
+ print("\n5. Start server with a specific configuration:")
1230
+ print(" python -m mcp_proxy_adapter --config configs/production_https.json")
1231
+ print("\n6. Run security tests:")
1232
+ print(" python -m mcp_proxy_adapter.examples.run_security_tests")
1233
+ print("\n7. Generate additional certificates (if needed):")
1234
+ print(" python scripts/create_certificates_simple.py")
1235
+
1086
1236
  print("=" * 60)
1087
1237
  return 0
1088
1238
 
@@ -2,4 +2,4 @@
2
2
  Version information for MCP Proxy Adapter.
3
3
  """
4
4
 
5
- __version__ = "6.4.14"
5
+ __version__ = "6.4.16"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcp-proxy-adapter
3
- Version: 6.4.14
3
+ Version: 6.4.16
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
@@ -31,6 +31,7 @@ Description-Content-Type: text/markdown
31
31
  Requires-Dist: fastapi<1.0.0,>=0.95.0
32
32
  Requires-Dist: pydantic>=2.0.0
33
33
  Requires-Dist: hypercorn<1.0.0,>=0.15.0
34
+ Requires-Dist: uvicorn<1.0.0,>=0.15.0
34
35
  Requires-Dist: docstring-parser<1.0.0,>=0.15
35
36
  Requires-Dist: typing-extensions<5.0.0,>=4.5.0
36
37
  Requires-Dist: jsonrpc>=1.2.0
@@ -1,6 +1,7 @@
1
1
  fastapi<1.0.0,>=0.95.0
2
2
  pydantic>=2.0.0
3
3
  hypercorn<1.0.0,>=0.15.0
4
+ uvicorn<1.0.0,>=0.15.0
4
5
  docstring-parser<1.0.0,>=0.15
5
6
  typing-extensions<5.0.0,>=4.5.0
6
7
  jsonrpc>=1.2.0
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "mcp-proxy-adapter"
7
- version = "6.4.14"
7
+ version = "6.4.16"
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"}
@@ -47,6 +47,7 @@ dependencies = [
47
47
  "fastapi>=0.95.0,<1.0.0",
48
48
  "pydantic>=2.0.0",
49
49
  "hypercorn>=0.15.0,<1.0.0",
50
+ "uvicorn>=0.15.0,<1.0.0",
50
51
  "docstring-parser>=0.15,<1.0.0",
51
52
  "typing-extensions>=4.5.0,<5.0.0",
52
53
  "jsonrpc>=1.2.0",