mcp-proxy-adapter 2.0.1__py3-none-any.whl โ†’ 6.9.50__py3-none-any.whl

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 (269) hide show
  1. mcp_proxy_adapter/__init__.py +47 -0
  2. mcp_proxy_adapter/__main__.py +13 -0
  3. mcp_proxy_adapter/api/__init__.py +0 -0
  4. mcp_proxy_adapter/api/app.py +66 -0
  5. mcp_proxy_adapter/api/core/__init__.py +18 -0
  6. mcp_proxy_adapter/api/core/app_factory.py +400 -0
  7. mcp_proxy_adapter/api/core/lifespan_manager.py +55 -0
  8. mcp_proxy_adapter/api/core/registration_context.py +356 -0
  9. mcp_proxy_adapter/api/core/registration_manager.py +307 -0
  10. mcp_proxy_adapter/api/core/registration_tasks.py +84 -0
  11. mcp_proxy_adapter/api/core/ssl_context_factory.py +88 -0
  12. mcp_proxy_adapter/api/handlers.py +181 -0
  13. mcp_proxy_adapter/api/middleware/__init__.py +21 -0
  14. mcp_proxy_adapter/api/middleware/base.py +54 -0
  15. mcp_proxy_adapter/api/middleware/command_permission_middleware.py +73 -0
  16. mcp_proxy_adapter/api/middleware/error_handling.py +76 -0
  17. mcp_proxy_adapter/api/middleware/factory.py +147 -0
  18. mcp_proxy_adapter/api/middleware/logging.py +31 -0
  19. mcp_proxy_adapter/api/middleware/performance.py +51 -0
  20. mcp_proxy_adapter/api/middleware/protocol_middleware.py +140 -0
  21. mcp_proxy_adapter/api/middleware/transport_middleware.py +87 -0
  22. mcp_proxy_adapter/api/middleware/unified_security.py +223 -0
  23. mcp_proxy_adapter/api/middleware/user_info_middleware.py +132 -0
  24. mcp_proxy_adapter/api/openapi/__init__.py +21 -0
  25. mcp_proxy_adapter/api/openapi/command_integration.py +105 -0
  26. mcp_proxy_adapter/api/openapi/openapi_generator.py +40 -0
  27. mcp_proxy_adapter/api/openapi/openapi_registry.py +62 -0
  28. mcp_proxy_adapter/api/openapi/schema_loader.py +116 -0
  29. mcp_proxy_adapter/api/schemas.py +270 -0
  30. mcp_proxy_adapter/api/tool_integration.py +131 -0
  31. mcp_proxy_adapter/api/tools.py +163 -0
  32. mcp_proxy_adapter/cli/__init__.py +12 -0
  33. mcp_proxy_adapter/cli/commands/__init__.py +15 -0
  34. mcp_proxy_adapter/cli/commands/client.py +100 -0
  35. mcp_proxy_adapter/cli/commands/config_generate.py +105 -0
  36. mcp_proxy_adapter/cli/commands/config_validate.py +94 -0
  37. mcp_proxy_adapter/cli/commands/generate.py +259 -0
  38. mcp_proxy_adapter/cli/commands/server.py +174 -0
  39. mcp_proxy_adapter/cli/commands/sets.py +132 -0
  40. mcp_proxy_adapter/cli/commands/testconfig.py +177 -0
  41. mcp_proxy_adapter/cli/examples/__init__.py +8 -0
  42. mcp_proxy_adapter/cli/examples/http_basic.py +82 -0
  43. mcp_proxy_adapter/cli/examples/https_token.py +96 -0
  44. mcp_proxy_adapter/cli/examples/mtls_roles.py +103 -0
  45. mcp_proxy_adapter/cli/main.py +63 -0
  46. mcp_proxy_adapter/cli/parser.py +338 -0
  47. mcp_proxy_adapter/cli/validators.py +231 -0
  48. mcp_proxy_adapter/client/jsonrpc_client/__init__.py +9 -0
  49. mcp_proxy_adapter/client/jsonrpc_client/client.py +42 -0
  50. mcp_proxy_adapter/client/jsonrpc_client/command_api.py +45 -0
  51. mcp_proxy_adapter/client/jsonrpc_client/proxy_api.py +224 -0
  52. mcp_proxy_adapter/client/jsonrpc_client/queue_api.py +60 -0
  53. mcp_proxy_adapter/client/jsonrpc_client/transport.py +108 -0
  54. mcp_proxy_adapter/client/proxy.py +123 -0
  55. mcp_proxy_adapter/commands/__init__.py +66 -0
  56. mcp_proxy_adapter/commands/auth_validation_command.py +69 -0
  57. mcp_proxy_adapter/commands/base.py +389 -0
  58. mcp_proxy_adapter/commands/builtin_commands.py +30 -0
  59. mcp_proxy_adapter/commands/catalog/__init__.py +20 -0
  60. mcp_proxy_adapter/commands/catalog/catalog_loader.py +34 -0
  61. mcp_proxy_adapter/commands/catalog/catalog_manager.py +122 -0
  62. mcp_proxy_adapter/commands/catalog/catalog_syncer.py +149 -0
  63. mcp_proxy_adapter/commands/catalog/command_catalog.py +43 -0
  64. mcp_proxy_adapter/commands/catalog/dependency_manager.py +37 -0
  65. mcp_proxy_adapter/commands/catalog_manager.py +97 -0
  66. mcp_proxy_adapter/commands/cert_monitor_command.py +552 -0
  67. mcp_proxy_adapter/commands/certificate_management_command.py +562 -0
  68. mcp_proxy_adapter/commands/command_registry.py +298 -0
  69. mcp_proxy_adapter/commands/config_command.py +102 -0
  70. mcp_proxy_adapter/commands/dependency_container.py +40 -0
  71. mcp_proxy_adapter/commands/dependency_manager.py +143 -0
  72. mcp_proxy_adapter/commands/echo_command.py +48 -0
  73. mcp_proxy_adapter/commands/health_command.py +142 -0
  74. mcp_proxy_adapter/commands/help_command.py +175 -0
  75. mcp_proxy_adapter/commands/hooks.py +172 -0
  76. mcp_proxy_adapter/commands/key_management_command.py +484 -0
  77. mcp_proxy_adapter/commands/load_command.py +123 -0
  78. mcp_proxy_adapter/commands/plugins_command.py +246 -0
  79. mcp_proxy_adapter/commands/protocol_management_command.py +216 -0
  80. mcp_proxy_adapter/commands/proxy_registration_command.py +319 -0
  81. mcp_proxy_adapter/commands/queue_commands.py +750 -0
  82. mcp_proxy_adapter/commands/registration_status_command.py +76 -0
  83. mcp_proxy_adapter/commands/registry/__init__.py +18 -0
  84. mcp_proxy_adapter/commands/registry/command_info.py +103 -0
  85. mcp_proxy_adapter/commands/registry/command_loader.py +207 -0
  86. mcp_proxy_adapter/commands/registry/command_manager.py +119 -0
  87. mcp_proxy_adapter/commands/registry/command_registry.py +217 -0
  88. mcp_proxy_adapter/commands/reload_command.py +136 -0
  89. mcp_proxy_adapter/commands/result.py +157 -0
  90. mcp_proxy_adapter/commands/role_test_command.py +99 -0
  91. mcp_proxy_adapter/commands/roles_management_command.py +502 -0
  92. mcp_proxy_adapter/commands/security_command.py +472 -0
  93. mcp_proxy_adapter/commands/settings_command.py +113 -0
  94. mcp_proxy_adapter/commands/ssl_setup_command.py +306 -0
  95. mcp_proxy_adapter/commands/token_management_command.py +500 -0
  96. mcp_proxy_adapter/commands/transport_management_command.py +129 -0
  97. mcp_proxy_adapter/commands/unload_command.py +92 -0
  98. mcp_proxy_adapter/config.py +32 -0
  99. mcp_proxy_adapter/core/__init__.py +8 -0
  100. mcp_proxy_adapter/core/app_factory.py +560 -0
  101. mcp_proxy_adapter/core/app_runner.py +318 -0
  102. mcp_proxy_adapter/core/auth_validator.py +508 -0
  103. mcp_proxy_adapter/core/certificate/__init__.py +20 -0
  104. mcp_proxy_adapter/core/certificate/certificate_creator.py +372 -0
  105. mcp_proxy_adapter/core/certificate/certificate_extractor.py +185 -0
  106. mcp_proxy_adapter/core/certificate/certificate_utils.py +249 -0
  107. mcp_proxy_adapter/core/certificate/certificate_validator.py +481 -0
  108. mcp_proxy_adapter/core/certificate/ssl_context_manager.py +65 -0
  109. mcp_proxy_adapter/core/certificate_utils.py +249 -0
  110. mcp_proxy_adapter/core/client.py +608 -0
  111. mcp_proxy_adapter/core/client_manager.py +271 -0
  112. mcp_proxy_adapter/core/client_security.py +411 -0
  113. mcp_proxy_adapter/core/config/__init__.py +18 -0
  114. mcp_proxy_adapter/core/config/config.py +237 -0
  115. mcp_proxy_adapter/core/config/config_factory.py +22 -0
  116. mcp_proxy_adapter/core/config/config_loader.py +66 -0
  117. mcp_proxy_adapter/core/config/feature_manager.py +31 -0
  118. mcp_proxy_adapter/core/config/simple_config.py +204 -0
  119. mcp_proxy_adapter/core/config/simple_config_generator.py +131 -0
  120. mcp_proxy_adapter/core/config/simple_config_validator.py +476 -0
  121. mcp_proxy_adapter/core/config_converter.py +252 -0
  122. mcp_proxy_adapter/core/config_validator.py +211 -0
  123. mcp_proxy_adapter/core/crl_utils.py +362 -0
  124. mcp_proxy_adapter/core/errors.py +276 -0
  125. mcp_proxy_adapter/core/job_manager.py +54 -0
  126. mcp_proxy_adapter/core/logging.py +250 -0
  127. mcp_proxy_adapter/core/mtls_asgi.py +140 -0
  128. mcp_proxy_adapter/core/mtls_asgi_app.py +187 -0
  129. mcp_proxy_adapter/core/mtls_proxy.py +229 -0
  130. mcp_proxy_adapter/core/mtls_server.py +154 -0
  131. mcp_proxy_adapter/core/protocol_manager.py +232 -0
  132. mcp_proxy_adapter/core/proxy/__init__.py +19 -0
  133. mcp_proxy_adapter/core/proxy/auth_manager.py +26 -0
  134. mcp_proxy_adapter/core/proxy/proxy_registration_manager.py +160 -0
  135. mcp_proxy_adapter/core/proxy/registration_client.py +186 -0
  136. mcp_proxy_adapter/core/proxy/ssl_manager.py +101 -0
  137. mcp_proxy_adapter/core/proxy_client.py +184 -0
  138. mcp_proxy_adapter/core/proxy_registration.py +80 -0
  139. mcp_proxy_adapter/core/role_utils.py +103 -0
  140. mcp_proxy_adapter/core/security_adapter.py +343 -0
  141. mcp_proxy_adapter/core/security_factory.py +96 -0
  142. mcp_proxy_adapter/core/security_integration.py +342 -0
  143. mcp_proxy_adapter/core/server_adapter.py +251 -0
  144. mcp_proxy_adapter/core/server_engine.py +217 -0
  145. mcp_proxy_adapter/core/settings.py +260 -0
  146. mcp_proxy_adapter/core/signal_handler.py +107 -0
  147. mcp_proxy_adapter/core/ssl_utils.py +161 -0
  148. mcp_proxy_adapter/core/transport_manager.py +153 -0
  149. mcp_proxy_adapter/core/unified_config_adapter.py +471 -0
  150. mcp_proxy_adapter/core/utils.py +101 -0
  151. mcp_proxy_adapter/core/validation/__init__.py +21 -0
  152. mcp_proxy_adapter/core/validation/config_validator.py +219 -0
  153. mcp_proxy_adapter/core/validation/file_validator.py +131 -0
  154. mcp_proxy_adapter/core/validation/protocol_validator.py +205 -0
  155. mcp_proxy_adapter/core/validation/security_validator.py +140 -0
  156. mcp_proxy_adapter/core/validation/validation_result.py +27 -0
  157. mcp_proxy_adapter/custom_openapi.py +58 -0
  158. mcp_proxy_adapter/examples/__init__.py +16 -0
  159. mcp_proxy_adapter/examples/basic_framework/__init__.py +9 -0
  160. mcp_proxy_adapter/examples/basic_framework/commands/__init__.py +4 -0
  161. mcp_proxy_adapter/examples/basic_framework/hooks/__init__.py +4 -0
  162. mcp_proxy_adapter/examples/basic_framework/main.py +52 -0
  163. mcp_proxy_adapter/examples/bugfix_certificate_config.py +261 -0
  164. mcp_proxy_adapter/examples/cert_manager_bugfix.py +203 -0
  165. mcp_proxy_adapter/examples/check_config.py +413 -0
  166. mcp_proxy_adapter/examples/client_usage_example.py +164 -0
  167. mcp_proxy_adapter/examples/commands/__init__.py +5 -0
  168. mcp_proxy_adapter/examples/config_builder.py +234 -0
  169. mcp_proxy_adapter/examples/config_cli.py +282 -0
  170. mcp_proxy_adapter/examples/create_test_configs.py +174 -0
  171. mcp_proxy_adapter/examples/debug_request_state.py +130 -0
  172. mcp_proxy_adapter/examples/debug_role_chain.py +191 -0
  173. mcp_proxy_adapter/examples/demo_client.py +287 -0
  174. mcp_proxy_adapter/examples/full_application/__init__.py +12 -0
  175. mcp_proxy_adapter/examples/full_application/commands/__init__.py +8 -0
  176. mcp_proxy_adapter/examples/full_application/commands/custom_echo_command.py +45 -0
  177. mcp_proxy_adapter/examples/full_application/commands/dynamic_calculator_command.py +52 -0
  178. mcp_proxy_adapter/examples/full_application/commands/echo_command.py +32 -0
  179. mcp_proxy_adapter/examples/full_application/commands/help_command.py +54 -0
  180. mcp_proxy_adapter/examples/full_application/commands/list_command.py +57 -0
  181. mcp_proxy_adapter/examples/full_application/hooks/__init__.py +5 -0
  182. mcp_proxy_adapter/examples/full_application/hooks/application_hooks.py +29 -0
  183. mcp_proxy_adapter/examples/full_application/hooks/builtin_command_hooks.py +27 -0
  184. mcp_proxy_adapter/examples/full_application/main.py +311 -0
  185. mcp_proxy_adapter/examples/full_application/proxy_endpoints.py +161 -0
  186. mcp_proxy_adapter/examples/full_application/run_mtls.py +252 -0
  187. mcp_proxy_adapter/examples/full_application/run_simple.py +152 -0
  188. mcp_proxy_adapter/examples/full_application/test_minimal_server.py +45 -0
  189. mcp_proxy_adapter/examples/full_application/test_server.py +163 -0
  190. mcp_proxy_adapter/examples/full_application/test_simple_server.py +62 -0
  191. mcp_proxy_adapter/examples/generate_config.py +502 -0
  192. mcp_proxy_adapter/examples/proxy_registration_example.py +335 -0
  193. mcp_proxy_adapter/examples/queue_demo_simple.py +632 -0
  194. mcp_proxy_adapter/examples/queue_integration_example.py +578 -0
  195. mcp_proxy_adapter/examples/queue_server_demo.py +82 -0
  196. mcp_proxy_adapter/examples/queue_server_example.py +85 -0
  197. mcp_proxy_adapter/examples/queue_server_simple.py +173 -0
  198. mcp_proxy_adapter/examples/required_certificates.py +208 -0
  199. mcp_proxy_adapter/examples/run_example.py +77 -0
  200. mcp_proxy_adapter/examples/run_full_test_suite.py +619 -0
  201. mcp_proxy_adapter/examples/run_proxy_server.py +153 -0
  202. mcp_proxy_adapter/examples/run_security_tests_fixed.py +435 -0
  203. mcp_proxy_adapter/examples/security_test/__init__.py +18 -0
  204. mcp_proxy_adapter/examples/security_test/auth_manager.py +14 -0
  205. mcp_proxy_adapter/examples/security_test/ssl_context_manager.py +28 -0
  206. mcp_proxy_adapter/examples/security_test/test_client.py +159 -0
  207. mcp_proxy_adapter/examples/security_test/test_result.py +22 -0
  208. mcp_proxy_adapter/examples/security_test_client.py +72 -0
  209. mcp_proxy_adapter/examples/setup/__init__.py +24 -0
  210. mcp_proxy_adapter/examples/setup/certificate_manager.py +215 -0
  211. mcp_proxy_adapter/examples/setup/config_generator.py +12 -0
  212. mcp_proxy_adapter/examples/setup/config_validator.py +118 -0
  213. mcp_proxy_adapter/examples/setup/environment_setup.py +62 -0
  214. mcp_proxy_adapter/examples/setup/test_files_generator.py +10 -0
  215. mcp_proxy_adapter/examples/setup/test_runner.py +89 -0
  216. mcp_proxy_adapter/examples/setup_test_environment.py +235 -0
  217. mcp_proxy_adapter/examples/simple_protocol_test.py +125 -0
  218. mcp_proxy_adapter/examples/test_chk_hostname_automated.py +211 -0
  219. mcp_proxy_adapter/examples/test_config.py +205 -0
  220. mcp_proxy_adapter/examples/test_config_builder.py +110 -0
  221. mcp_proxy_adapter/examples/test_examples.py +308 -0
  222. mcp_proxy_adapter/examples/test_framework_complete.py +267 -0
  223. mcp_proxy_adapter/examples/test_mcp_server.py +187 -0
  224. mcp_proxy_adapter/examples/test_protocol_examples.py +337 -0
  225. mcp_proxy_adapter/examples/universal_client.py +674 -0
  226. mcp_proxy_adapter/examples/update_config_certificates.py +135 -0
  227. mcp_proxy_adapter/examples/validate_generator_compatibility.py +385 -0
  228. mcp_proxy_adapter/examples/validate_generator_compatibility_simple.py +61 -0
  229. mcp_proxy_adapter/integrations/__init__.py +25 -0
  230. mcp_proxy_adapter/integrations/queuemgr_integration.py +462 -0
  231. mcp_proxy_adapter/main.py +311 -0
  232. mcp_proxy_adapter/openapi.py +375 -0
  233. mcp_proxy_adapter/schemas/base_schema.json +114 -0
  234. mcp_proxy_adapter/schemas/openapi_schema.json +314 -0
  235. mcp_proxy_adapter/schemas/roles.json +37 -0
  236. mcp_proxy_adapter/schemas/roles_schema.json +162 -0
  237. mcp_proxy_adapter/version.py +5 -0
  238. mcp_proxy_adapter-6.9.50.dist-info/METADATA +1088 -0
  239. mcp_proxy_adapter-6.9.50.dist-info/RECORD +242 -0
  240. {mcp_proxy_adapter-2.0.1.dist-info โ†’ mcp_proxy_adapter-6.9.50.dist-info}/WHEEL +1 -1
  241. mcp_proxy_adapter-6.9.50.dist-info/entry_points.txt +14 -0
  242. mcp_proxy_adapter-6.9.50.dist-info/top_level.txt +1 -0
  243. adapters/__init__.py +0 -16
  244. analyzers/__init__.py +0 -14
  245. analyzers/docstring_analyzer.py +0 -199
  246. analyzers/type_analyzer.py +0 -151
  247. cli/__init__.py +0 -12
  248. cli/__main__.py +0 -79
  249. cli/command_runner.py +0 -233
  250. dispatchers/__init__.py +0 -14
  251. dispatchers/base_dispatcher.py +0 -85
  252. dispatchers/json_rpc_dispatcher.py +0 -198
  253. generators/__init__.py +0 -14
  254. generators/endpoint_generator.py +0 -172
  255. generators/openapi_generator.py +0 -254
  256. generators/rest_api_generator.py +0 -207
  257. mcp_proxy_adapter-2.0.1.dist-info/METADATA +0 -272
  258. mcp_proxy_adapter-2.0.1.dist-info/RECORD +0 -28
  259. mcp_proxy_adapter-2.0.1.dist-info/licenses/LICENSE +0 -21
  260. mcp_proxy_adapter-2.0.1.dist-info/top_level.txt +0 -7
  261. openapi_schema/__init__.py +0 -38
  262. openapi_schema/command_registry.py +0 -312
  263. openapi_schema/rest_schema.py +0 -510
  264. openapi_schema/rpc_generator.py +0 -307
  265. openapi_schema/rpc_schema.py +0 -416
  266. validators/__init__.py +0 -14
  267. validators/base_validator.py +0 -23
  268. validators/docstring_validator.py +0 -75
  269. validators/metadata_validator.py +0 -76
@@ -0,0 +1,135 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Update Configuration Files with Correct Certificate Paths
4
+ This script updates all configuration files to use the correct certificate paths.
5
+
6
+ Author: Vasiliy Zdanovskiy
7
+ email: vasilyvz@gmail.com
8
+ """
9
+ import json
10
+ from pathlib import Path
11
+ from typing import Dict, Any
12
+
13
+ from required_certificates import CONFIG_CERTIFICATE_MAPPINGS
14
+
15
+
16
+ class ConfigUpdater:
17
+ """Updates configuration files with correct certificate paths."""
18
+
19
+ def __init__(self):
20
+ """Initialize the config updater."""
21
+ self.working_dir = Path.cwd()
22
+ self.configs_dir = self.working_dir / "configs"
23
+
24
+ def print_step(self, step: str, description: str):
25
+ """Print a formatted step header."""
26
+ print(f"\n{'=' * 60}")
27
+ print(f"๐Ÿ”ง STEP {step}: {description}")
28
+ print(f"{'=' * 60}")
29
+
30
+ def print_success(self, message: str):
31
+ """Print a success message."""
32
+ print(f"โœ… {message}")
33
+
34
+ def print_error(self, message: str):
35
+ """Print an error message."""
36
+ print(f"โŒ {message}")
37
+
38
+ def print_info(self, message: str):
39
+ """Print an info message."""
40
+ print(f"โ„น๏ธ {message}")
41
+
42
+ def update_config_file(self, config_file: str, certificate_mappings: Dict[str, str]) -> bool:
43
+ """Update a single configuration file with correct certificate paths."""
44
+ config_path = self.configs_dir / config_file
45
+
46
+ if not config_path.exists():
47
+ self.print_error(f"Configuration file not found: {config_file}")
48
+ return False
49
+
50
+ try:
51
+ # Load configuration
52
+ with open(config_path, 'r') as f:
53
+ config = json.load(f)
54
+
55
+ # Update certificate paths
56
+ updated = False
57
+ for path, new_value in certificate_mappings.items():
58
+ if self.update_nested_path(config, path, new_value):
59
+ updated = True
60
+
61
+ if updated:
62
+ # Save updated configuration
63
+ with open(config_path, 'w') as f:
64
+ json.dump(config, f, indent=2)
65
+ self.print_success(f"Updated {config_file}")
66
+ return True
67
+ else:
68
+ self.print_info(f"No updates needed for {config_file}")
69
+ return True
70
+
71
+ except Exception as e:
72
+ self.print_error(f"Failed to update {config_file}: {e}")
73
+ return False
74
+
75
+ def update_nested_path(self, config: Dict[str, Any], path: str, value: str) -> bool:
76
+ """Update a nested path in configuration dictionary."""
77
+ keys = path.split('.')
78
+ current = config
79
+
80
+ # Navigate to the parent of the target key
81
+ for key in keys[:-1]:
82
+ if key not in current:
83
+ return False
84
+ current = current[key]
85
+
86
+ # Update the target key
87
+ target_key = keys[-1]
88
+ if target_key in current and current[target_key] != value:
89
+ current[target_key] = value
90
+ return True
91
+
92
+ return False
93
+
94
+ def update_all_configs(self) -> bool:
95
+ """Update all configuration files with correct certificate paths."""
96
+ self.print_step("1", "Updating Configuration Files")
97
+
98
+ success_count = 0
99
+ total_count = len(CONFIG_CERTIFICATE_MAPPINGS)
100
+
101
+ for config_file, certificate_mappings in CONFIG_CERTIFICATE_MAPPINGS.items():
102
+ self.print_info(f"Updating {config_file}...")
103
+ if self.update_config_file(config_file, certificate_mappings):
104
+ success_count += 1
105
+
106
+ # Print summary
107
+ self.print_step("2", "Update Summary")
108
+ print(f"๐Ÿ“Š Configuration Update Results:")
109
+ print(f" Total configurations: {total_count}")
110
+ print(f" Successfully updated: {success_count}")
111
+ print(f" Failed: {total_count - success_count}")
112
+ print(f" Success rate: {(success_count/total_count)*100:.1f}%")
113
+
114
+ return success_count == total_count
115
+
116
+
117
+ def main():
118
+ """Main entry point."""
119
+ updater = ConfigUpdater()
120
+
121
+ try:
122
+ success = updater.update_all_configs()
123
+ if success:
124
+ print(f"\n๐ŸŽ‰ All configuration files updated successfully!")
125
+ else:
126
+ print(f"\nโŒ Some configuration files failed to update")
127
+ return success
128
+ except Exception as e:
129
+ print(f"โŒ Fatal error: {e}")
130
+ return False
131
+
132
+
133
+ if __name__ == "__main__":
134
+ success = main()
135
+ exit(0 if success else 1)
@@ -0,0 +1,385 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Script to validate compatibility between config generator and validator.
4
+
5
+ Author: Vasiliy Zdanovskiy
6
+ email: vasilyvz@gmail.com
7
+ """
8
+
9
+ import json
10
+ import sys
11
+ import tempfile
12
+ import shutil
13
+ from pathlib import Path
14
+
15
+ # Add the project root to the path
16
+ project_root = Path(__file__).parent.parent.parent
17
+ sys.path.insert(0, str(project_root))
18
+
19
+ from mcp_proxy_adapter.core.config_validator import ConfigValidator
20
+ from mcp_proxy_adapter.examples.config_builder import generate_complete_config
21
+
22
+
23
+ def test_generator_validator_compatibility():
24
+ """Test that generated configs pass validation."""
25
+ print("๐Ÿ” Testing Generator-Validator Compatibility")
26
+ print("=" * 50)
27
+
28
+ # Test configurations to generate
29
+ test_configs = [
30
+ {
31
+ "name": "HTTP Basic",
32
+ "protocol": "http",
33
+ "ssl_enabled": False,
34
+ "security_enabled": False,
35
+ "roles_enabled": False,
36
+ "proxy_registration_enabled": False
37
+ },
38
+ {
39
+ "name": "HTTP + Token",
40
+ "protocol": "http",
41
+ "ssl_enabled": False,
42
+ "security_enabled": True,
43
+ "roles_enabled": False,
44
+ "proxy_registration_enabled": False
45
+ },
46
+ {
47
+ "name": "HTTP + Token + Roles",
48
+ "protocol": "http",
49
+ "ssl_enabled": False,
50
+ "security_enabled": True,
51
+ "roles_enabled": True,
52
+ "proxy_registration_enabled": False
53
+ },
54
+ {
55
+ "name": "HTTPS Basic",
56
+ "protocol": "https",
57
+ "ssl_enabled": True,
58
+ "security_enabled": False,
59
+ "roles_enabled": False,
60
+ "proxy_registration_enabled": False
61
+ },
62
+ {
63
+ "name": "HTTPS + Token",
64
+ "protocol": "https",
65
+ "ssl_enabled": True,
66
+ "security_enabled": True,
67
+ "roles_enabled": False,
68
+ "proxy_registration_enabled": False
69
+ },
70
+ {
71
+ "name": "HTTPS + Token + Roles",
72
+ "protocol": "https",
73
+ "ssl_enabled": True,
74
+ "security_enabled": True,
75
+ "roles_enabled": True,
76
+ "proxy_registration_enabled": False
77
+ },
78
+ {
79
+ "name": "mTLS + Proxy Registration",
80
+ "protocol": "mtls",
81
+ "ssl_enabled": True,
82
+ "security_enabled": False,
83
+ "roles_enabled": False,
84
+ "proxy_registration_enabled": True
85
+ }
86
+ ]
87
+
88
+ results = []
89
+
90
+ for test_config in test_configs:
91
+ print(f"\n๐Ÿ“‹ Testing: {test_config['name']}")
92
+ print("-" * 30)
93
+
94
+ try:
95
+ # Generate configuration
96
+ print(" ๐Ÿ”ง Generating configuration...")
97
+ generated_config = generate_complete_config(
98
+ host="localhost",
99
+ port=8080
100
+ )
101
+
102
+ # Create temporary test files
103
+ temp_dir = Path(tempfile.mkdtemp())
104
+ test_files = {}
105
+
106
+ # Modify config based on test parameters
107
+ if test_config["protocol"] != "http":
108
+ generated_config["server"]["protocol"] = test_config["protocol"]
109
+
110
+ if test_config["ssl_enabled"]:
111
+ generated_config["ssl"]["enabled"] = True
112
+ # Create test SSL certificates
113
+ cert_file = temp_dir / "test_cert.crt"
114
+ key_file = temp_dir / "test_key.key"
115
+ ca_cert = temp_dir / "test_ca.crt"
116
+
117
+ # Create dummy certificate files
118
+ cert_file.write_text("-----BEGIN CERTIFICATE-----\nDUMMY CERT\n-----END CERTIFICATE-----")
119
+ key_file.write_text("-----BEGIN PRIVATE KEY-----\nDUMMY KEY\n-----END PRIVATE KEY-----")
120
+ ca_cert.write_text("-----BEGIN CERTIFICATE-----\nDUMMY CA\n-----END CERTIFICATE-----")
121
+
122
+ generated_config["ssl"]["cert_file"] = str(cert_file)
123
+ generated_config["ssl"]["key_file"] = str(key_file)
124
+ generated_config["ssl"]["ca_cert"] = str(ca_cert)
125
+
126
+ test_files["ssl"] = [cert_file, key_file, ca_cert]
127
+
128
+ if test_config["security_enabled"]:
129
+ generated_config["security"]["enabled"] = True
130
+ generated_config["security"]["tokens"] = {
131
+ "test_token": {"permissions": ["*"]}
132
+ }
133
+
134
+ if test_config["roles_enabled"]:
135
+ generated_config["roles"]["enabled"] = True
136
+ roles_file = temp_dir / "test_roles.json"
137
+ roles_file.write_text('{"admin": ["*"], "user": ["read"]}')
138
+ generated_config["roles"]["config_file"] = str(roles_file)
139
+ test_files["roles"] = [roles_file]
140
+
141
+ if test_config["proxy_registration_enabled"]:
142
+ generated_config["proxy_registration"]["enabled"] = True
143
+ generated_config["proxy_registration"]["proxy_url"] = "http://localhost:3005"
144
+
145
+ # Create test client certificates
146
+ client_cert = temp_dir / "test_client.crt"
147
+ client_key = temp_dir / "test_client.key"
148
+ client_cert.write_text("-----BEGIN CERTIFICATE-----\nDUMMY CLIENT CERT\n-----END CERTIFICATE-----")
149
+ client_key.write_text("-----BEGIN PRIVATE KEY-----\nDUMMY CLIENT KEY\n-----END PRIVATE KEY-----")
150
+
151
+ generated_config["proxy_registration"]["certificate"] = {
152
+ "cert_file": str(client_cert),
153
+ "key_file": str(client_key)
154
+ }
155
+ generated_config["proxy_registration"]["ssl"] = {
156
+ "ca_cert": str(ca_cert) if test_config["ssl_enabled"] else str(temp_dir / "test_ca.crt")
157
+ }
158
+
159
+ if "proxy" not in test_files:
160
+ test_files["proxy"] = []
161
+ test_files["proxy"].extend([client_cert, client_key])
162
+
163
+ # Validate configuration
164
+ print(" โœ… Validating configuration...")
165
+ validator = ConfigValidator()
166
+ validator.config_data = generated_config
167
+ validation_results = validator.validate_config()
168
+
169
+ # Analyze results
170
+ errors = [r for r in validation_results if r.level == "error"]
171
+ warnings = [r for r in validation_results if r.level == "warning"]
172
+ info = [r for r in validation_results if r.level == "info"]
173
+
174
+ result = {
175
+ "name": test_config["name"],
176
+ "success": len(errors) == 0,
177
+ "errors": len(errors),
178
+ "warnings": len(warnings),
179
+ "info": len(info),
180
+ "error_details": errors,
181
+ "warning_details": warnings
182
+ }
183
+
184
+ results.append(result)
185
+
186
+ # Clean up temporary files
187
+ try:
188
+ shutil.rmtree(temp_dir)
189
+ except Exception as e:
190
+ print(f" โš ๏ธ Warning: Could not clean up temp files: {e}")
191
+
192
+ # Print results
193
+ if result["success"]:
194
+ print(f" โœ… PASS - {len(warnings)} warnings, {len(info)} info")
195
+ else:
196
+ print(f" โŒ FAIL - {len(errors)} errors, {len(warnings)} warnings")
197
+ for error in errors[:3]: # Show first 3 errors
198
+ print(f" โ€ข {error.message}")
199
+ if len(errors) > 3:
200
+ print(f" ... and {len(errors) - 3} more errors")
201
+
202
+ except Exception as e:
203
+ print(f" ๐Ÿ’ฅ EXCEPTION: {str(e)}")
204
+ results.append({
205
+ "name": test_config["name"],
206
+ "success": False,
207
+ "errors": 1,
208
+ "warnings": 0,
209
+ "info": 0,
210
+ "error_details": [f"Exception: {str(e)}"],
211
+ "warning_details": []
212
+ })
213
+
214
+ # Summary
215
+ print("\n" + "=" * 50)
216
+ print("๐Ÿ“Š COMPATIBILITY SUMMARY")
217
+ print("=" * 50)
218
+
219
+ total_tests = len(results)
220
+ passed_tests = sum(1 for r in results if r["success"])
221
+ failed_tests = total_tests - passed_tests
222
+
223
+ print(f"Total tests: {total_tests}")
224
+ print(f"Passed: {passed_tests}")
225
+ print(f"Failed: {failed_tests}")
226
+ print(f"Success rate: {(passed_tests/total_tests)*100:.1f}%")
227
+
228
+ if failed_tests > 0:
229
+ print("\nโŒ FAILED TESTS:")
230
+ for result in results:
231
+ if not result["success"]:
232
+ print(f" โ€ข {result['name']}: {result['errors']} errors")
233
+ for error in result["error_details"][:2]:
234
+ print(f" - {error}")
235
+
236
+ return results
237
+
238
+
239
+ def test_validation_coverage():
240
+ """Test that validator covers all generator features."""
241
+ print("\n๐Ÿ” Testing Validation Coverage")
242
+ print("=" * 50)
243
+
244
+ # Test that validator checks all required sections
245
+ required_sections = [
246
+ "server", "logging", "commands", "debug"
247
+ ]
248
+
249
+ optional_sections = [
250
+ "ssl", "security", "roles", "proxy_registration", "transport"
251
+ ]
252
+
253
+ print("๐Ÿ“‹ Required sections validation:")
254
+ for section in required_sections:
255
+ print(f" โœ… {section}")
256
+
257
+ print("\n๐Ÿ“‹ Optional sections validation:")
258
+ for section in optional_sections:
259
+ print(f" โœ… {section}")
260
+
261
+ return True
262
+
263
+
264
+ def test_edge_cases():
265
+ """Test edge cases and error conditions."""
266
+ print("\n๐Ÿ” Testing Edge Cases")
267
+ print("=" * 50)
268
+
269
+ edge_cases = [
270
+ {
271
+ "name": "Empty config",
272
+ "config": {},
273
+ "should_fail": True
274
+ },
275
+ {
276
+ "name": "Missing server section",
277
+ "config": {"logging": {"level": "INFO"}},
278
+ "should_fail": True
279
+ },
280
+ {
281
+ "name": "Invalid protocol",
282
+ "config": {
283
+ "server": {"protocol": "invalid", "host": "localhost", "port": 8080},
284
+ "logging": {"level": "INFO"},
285
+ "commands": {"enabled": True},
286
+ "debug": {"enabled": False}
287
+ },
288
+ "should_fail": True
289
+ },
290
+ {
291
+ "name": "SSL enabled without certificates",
292
+ "config": {
293
+ "server": {"protocol": "https", "host": "localhost", "port": 8080},
294
+ "ssl": {"enabled": True},
295
+ "logging": {"level": "INFO"},
296
+ "commands": {"enabled": True},
297
+ "debug": {"enabled": False}
298
+ },
299
+ "should_fail": True
300
+ }
301
+ ]
302
+
303
+ results = []
304
+
305
+ for case in edge_cases:
306
+ print(f"\n๐Ÿงช Testing: {case['name']}")
307
+
308
+ try:
309
+ validator = ConfigValidator()
310
+ validator.config_data = case["config"]
311
+ validation_results = validator.validate_config()
312
+
313
+ errors = [r for r in validation_results if r.level == "error"]
314
+ has_errors = len(errors) > 0
315
+
316
+ expected_failure = case["should_fail"]
317
+ test_passed = (has_errors == expected_failure)
318
+
319
+ if test_passed:
320
+ print(f" โœ… PASS - {'Correctly failed' if has_errors else 'Correctly passed'}")
321
+ else:
322
+ print(f" โŒ FAIL - Expected {'failure' if expected_failure else 'success'}, got {'failure' if has_errors else 'success'}")
323
+
324
+ results.append({
325
+ "name": case["name"],
326
+ "passed": test_passed,
327
+ "errors": len(errors)
328
+ })
329
+
330
+ except Exception as e:
331
+ print(f" ๐Ÿ’ฅ EXCEPTION: {str(e)}")
332
+ results.append({
333
+ "name": case["name"],
334
+ "passed": False,
335
+ "errors": 1
336
+ })
337
+
338
+ return results
339
+
340
+
341
+ def main():
342
+ """Main test function."""
343
+ print("๐Ÿš€ Generator-Validator Compatibility Test")
344
+ print("=" * 60)
345
+
346
+ try:
347
+ # Test 1: Generator-Validator compatibility
348
+ compatibility_results = test_generator_validator_compatibility()
349
+
350
+ # Test 2: Validation coverage
351
+ test_validation_coverage()
352
+
353
+ # Test 3: Edge cases
354
+ edge_case_results = test_edge_cases()
355
+
356
+ # Final summary
357
+ print("\n" + "=" * 60)
358
+ print("๐ŸŽฏ FINAL RESULTS")
359
+ print("=" * 60)
360
+
361
+ compatibility_passed = sum(1 for r in compatibility_results if r["success"])
362
+ edge_cases_passed = sum(1 for r in edge_case_results if r["passed"])
363
+
364
+ print(f"Compatibility tests: {compatibility_passed}/{len(compatibility_results)} passed")
365
+ print(f"Edge case tests: {edge_cases_passed}/{len(edge_case_results)} passed")
366
+
367
+ total_passed = compatibility_passed + edge_cases_passed
368
+ total_tests = len(compatibility_results) + len(edge_case_results)
369
+
370
+ print(f"Overall: {total_passed}/{total_tests} tests passed")
371
+
372
+ if total_passed == total_tests:
373
+ print("๐ŸŽ‰ ALL TESTS PASSED! Generator and validator are compatible.")
374
+ return 0
375
+ else:
376
+ print("โŒ Some tests failed. Check the output above for details.")
377
+ return 1
378
+
379
+ except Exception as e:
380
+ print(f"๐Ÿ’ฅ Test suite failed with exception: {str(e)}")
381
+ return 1
382
+
383
+
384
+ if __name__ == "__main__":
385
+ sys.exit(main())
@@ -0,0 +1,61 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Simple compatibility test between config generator and validator.
4
+ Tests only the structure and required fields, not file existence or certificate validity.
5
+
6
+ Author: Vasiliy Zdanovskiy
7
+ email: vasilyvz@gmail.com
8
+ """
9
+
10
+ import json
11
+ import sys
12
+ from pathlib import Path
13
+
14
+ # Add the project root to the path
15
+ project_root = Path(__file__).parent.parent.parent
16
+ sys.path.insert(0, str(project_root))
17
+
18
+ from mcp_proxy_adapter.core.config_validator import ConfigValidator
19
+ from mcp_proxy_adapter.examples.config_builder import generate_complete_config
20
+
21
+
22
+
23
+
24
+
25
+
26
+
27
+ results = []
28
+
29
+ for test_name, test_func in tests:
30
+ print(f"\n๐Ÿงช Running: {test_name}")
31
+ try:
32
+ result = test_func()
33
+ results.append((test_name, result))
34
+ except Exception as e:
35
+ print(f" ๐Ÿ’ฅ Test failed with exception: {str(e)}")
36
+ results.append((test_name, False))
37
+
38
+ # Summary
39
+ print("\n" + "=" * 70)
40
+ print("๐ŸŽฏ FINAL RESULTS")
41
+ print("=" * 70)
42
+
43
+ passed = sum(1 for _, result in results if result)
44
+ total = len(results)
45
+
46
+ print(f"Tests passed: {passed}/{total}")
47
+
48
+ for test_name, result in results:
49
+ status = "โœ… PASS" if result else "โŒ FAIL"
50
+ print(f" {status} - {test_name}")
51
+
52
+ if passed == total:
53
+ print("\n๐ŸŽ‰ ALL TESTS PASSED! Generator and validator are structurally compatible.")
54
+ return 0
55
+ else:
56
+ print(f"\nโŒ {total - passed} tests failed. Check the output above for details.")
57
+ return 1
58
+
59
+
60
+ if __name__ == "__main__":
61
+ sys.exit(main())
@@ -0,0 +1,25 @@
1
+ """
2
+ Integration modules for mcp_proxy_adapter.
3
+
4
+ This package contains integrations with external systems and libraries
5
+ to extend the functionality of the MCP Proxy Adapter framework.
6
+
7
+ Author: Vasiliy Zdanovskiy
8
+ email: vasilyvz@gmail.com
9
+ """
10
+
11
+ from .queuemgr_integration import (
12
+ QueueManagerIntegration,
13
+ QueueJobBase,
14
+ QueueJobResult,
15
+ QueueJobStatus,
16
+ QueueJobError,
17
+ )
18
+
19
+ __all__ = [
20
+ "QueueManagerIntegration",
21
+ "QueueJobBase",
22
+ "QueueJobResult",
23
+ "QueueJobStatus",
24
+ "QueueJobError",
25
+ ]