mcp-proxy-adapter 6.9.28__py3-none-any.whl → 6.9.29__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 (212) hide show
  1. mcp_proxy_adapter/__init__.py +10 -0
  2. mcp_proxy_adapter/__main__.py +8 -21
  3. mcp_proxy_adapter/api/app.py +10 -913
  4. mcp_proxy_adapter/api/core/__init__.py +18 -0
  5. mcp_proxy_adapter/api/core/app_factory.py +243 -0
  6. mcp_proxy_adapter/api/core/lifespan_manager.py +55 -0
  7. mcp_proxy_adapter/api/core/registration_manager.py +166 -0
  8. mcp_proxy_adapter/api/core/ssl_context_factory.py +88 -0
  9. mcp_proxy_adapter/api/handlers.py +78 -199
  10. mcp_proxy_adapter/api/middleware/__init__.py +1 -44
  11. mcp_proxy_adapter/api/middleware/base.py +0 -42
  12. mcp_proxy_adapter/api/middleware/command_permission_middleware.py +0 -85
  13. mcp_proxy_adapter/api/middleware/error_handling.py +1 -127
  14. mcp_proxy_adapter/api/middleware/factory.py +0 -94
  15. mcp_proxy_adapter/api/middleware/logging.py +0 -112
  16. mcp_proxy_adapter/api/middleware/performance.py +0 -35
  17. mcp_proxy_adapter/api/middleware/protocol_middleware.py +2 -98
  18. mcp_proxy_adapter/api/middleware/transport_middleware.py +0 -37
  19. mcp_proxy_adapter/api/middleware/unified_security.py +10 -10
  20. mcp_proxy_adapter/api/middleware/user_info_middleware.py +0 -118
  21. mcp_proxy_adapter/api/openapi/__init__.py +21 -0
  22. mcp_proxy_adapter/api/openapi/command_integration.py +105 -0
  23. mcp_proxy_adapter/api/openapi/openapi_generator.py +40 -0
  24. mcp_proxy_adapter/api/openapi/openapi_registry.py +62 -0
  25. mcp_proxy_adapter/api/openapi/schema_loader.py +116 -0
  26. mcp_proxy_adapter/api/schemas.py +0 -61
  27. mcp_proxy_adapter/api/tool_integration.py +0 -117
  28. mcp_proxy_adapter/api/tools.py +0 -46
  29. mcp_proxy_adapter/cli/__init__.py +12 -0
  30. mcp_proxy_adapter/cli/commands/__init__.py +15 -0
  31. mcp_proxy_adapter/cli/commands/client.py +100 -0
  32. mcp_proxy_adapter/cli/commands/config_generate.py +21 -0
  33. mcp_proxy_adapter/cli/commands/config_validate.py +36 -0
  34. mcp_proxy_adapter/cli/commands/generate.py +259 -0
  35. mcp_proxy_adapter/cli/commands/server.py +174 -0
  36. mcp_proxy_adapter/cli/commands/sets.py +128 -0
  37. mcp_proxy_adapter/cli/commands/testconfig.py +177 -0
  38. mcp_proxy_adapter/cli/examples/__init__.py +8 -0
  39. mcp_proxy_adapter/cli/examples/http_basic.py +82 -0
  40. mcp_proxy_adapter/cli/examples/https_token.py +96 -0
  41. mcp_proxy_adapter/cli/examples/mtls_roles.py +103 -0
  42. mcp_proxy_adapter/cli/main.py +63 -0
  43. mcp_proxy_adapter/cli/parser.py +324 -0
  44. mcp_proxy_adapter/cli/validators.py +231 -0
  45. mcp_proxy_adapter/client/jsonrpc_client.py +406 -0
  46. mcp_proxy_adapter/client/proxy.py +45 -0
  47. mcp_proxy_adapter/commands/__init__.py +44 -28
  48. mcp_proxy_adapter/commands/auth_validation_command.py +7 -344
  49. mcp_proxy_adapter/commands/base.py +19 -43
  50. mcp_proxy_adapter/commands/builtin_commands.py +0 -75
  51. mcp_proxy_adapter/commands/catalog/__init__.py +20 -0
  52. mcp_proxy_adapter/commands/catalog/catalog_loader.py +34 -0
  53. mcp_proxy_adapter/commands/catalog/catalog_manager.py +122 -0
  54. mcp_proxy_adapter/commands/catalog/catalog_syncer.py +149 -0
  55. mcp_proxy_adapter/commands/catalog/command_catalog.py +43 -0
  56. mcp_proxy_adapter/commands/catalog/dependency_manager.py +37 -0
  57. mcp_proxy_adapter/commands/catalog_manager.py +58 -928
  58. mcp_proxy_adapter/commands/cert_monitor_command.py +0 -88
  59. mcp_proxy_adapter/commands/certificate_management_command.py +0 -45
  60. mcp_proxy_adapter/commands/command_registry.py +172 -904
  61. mcp_proxy_adapter/commands/config_command.py +0 -28
  62. mcp_proxy_adapter/commands/dependency_container.py +1 -70
  63. mcp_proxy_adapter/commands/dependency_manager.py +0 -128
  64. mcp_proxy_adapter/commands/echo_command.py +0 -34
  65. mcp_proxy_adapter/commands/health_command.py +0 -3
  66. mcp_proxy_adapter/commands/help_command.py +0 -159
  67. mcp_proxy_adapter/commands/hooks.py +0 -137
  68. mcp_proxy_adapter/commands/key_management_command.py +0 -25
  69. mcp_proxy_adapter/commands/load_command.py +7 -78
  70. mcp_proxy_adapter/commands/plugins_command.py +0 -16
  71. mcp_proxy_adapter/commands/protocol_management_command.py +0 -28
  72. mcp_proxy_adapter/commands/proxy_registration_command.py +0 -88
  73. mcp_proxy_adapter/commands/queue_commands.py +750 -0
  74. mcp_proxy_adapter/commands/registration_status_command.py +0 -43
  75. mcp_proxy_adapter/commands/registry/__init__.py +18 -0
  76. mcp_proxy_adapter/commands/registry/command_info.py +103 -0
  77. mcp_proxy_adapter/commands/registry/command_loader.py +207 -0
  78. mcp_proxy_adapter/commands/registry/command_manager.py +119 -0
  79. mcp_proxy_adapter/commands/registry/command_registry.py +217 -0
  80. mcp_proxy_adapter/commands/reload_command.py +0 -80
  81. mcp_proxy_adapter/commands/result.py +25 -77
  82. mcp_proxy_adapter/commands/role_test_command.py +0 -44
  83. mcp_proxy_adapter/commands/roles_management_command.py +0 -199
  84. mcp_proxy_adapter/commands/security_command.py +0 -30
  85. mcp_proxy_adapter/commands/settings_command.py +0 -68
  86. mcp_proxy_adapter/commands/ssl_setup_command.py +0 -42
  87. mcp_proxy_adapter/commands/token_management_command.py +0 -1
  88. mcp_proxy_adapter/commands/transport_management_command.py +0 -20
  89. mcp_proxy_adapter/commands/unload_command.py +0 -71
  90. mcp_proxy_adapter/config.py +15 -626
  91. mcp_proxy_adapter/core/__init__.py +5 -39
  92. mcp_proxy_adapter/core/app_factory.py +14 -36
  93. mcp_proxy_adapter/core/app_runner.py +0 -27
  94. mcp_proxy_adapter/core/auth_validator.py +1 -93
  95. mcp_proxy_adapter/core/certificate/__init__.py +20 -0
  96. mcp_proxy_adapter/core/certificate/certificate_creator.py +371 -0
  97. mcp_proxy_adapter/core/certificate/certificate_extractor.py +183 -0
  98. mcp_proxy_adapter/core/certificate/certificate_utils.py +249 -0
  99. mcp_proxy_adapter/core/certificate/certificate_validator.py +110 -0
  100. mcp_proxy_adapter/core/certificate/ssl_context_manager.py +70 -0
  101. mcp_proxy_adapter/core/certificate_utils.py +64 -903
  102. mcp_proxy_adapter/core/client.py +0 -6
  103. mcp_proxy_adapter/core/client_manager.py +0 -19
  104. mcp_proxy_adapter/core/client_security.py +0 -2
  105. mcp_proxy_adapter/core/config/__init__.py +18 -0
  106. mcp_proxy_adapter/core/config/config.py +195 -0
  107. mcp_proxy_adapter/core/config/config_factory.py +22 -0
  108. mcp_proxy_adapter/core/config/config_loader.py +66 -0
  109. mcp_proxy_adapter/core/config/feature_manager.py +31 -0
  110. mcp_proxy_adapter/core/config/simple_config.py +112 -0
  111. mcp_proxy_adapter/core/config/simple_config_generator.py +50 -0
  112. mcp_proxy_adapter/core/config/simple_config_validator.py +96 -0
  113. mcp_proxy_adapter/core/config_converter.py +0 -186
  114. mcp_proxy_adapter/core/config_validator.py +96 -1238
  115. mcp_proxy_adapter/core/errors.py +7 -42
  116. mcp_proxy_adapter/core/job_manager.py +54 -0
  117. mcp_proxy_adapter/core/logging.py +2 -22
  118. mcp_proxy_adapter/core/mtls_asgi.py +0 -20
  119. mcp_proxy_adapter/core/mtls_asgi_app.py +0 -12
  120. mcp_proxy_adapter/core/mtls_proxy.py +0 -80
  121. mcp_proxy_adapter/core/mtls_server.py +3 -173
  122. mcp_proxy_adapter/core/protocol_manager.py +1 -191
  123. mcp_proxy_adapter/core/proxy/__init__.py +22 -0
  124. mcp_proxy_adapter/core/proxy/auth_manager.py +27 -0
  125. mcp_proxy_adapter/core/proxy/proxy_registration_manager.py +137 -0
  126. mcp_proxy_adapter/core/proxy/registration_client.py +60 -0
  127. mcp_proxy_adapter/core/proxy/ssl_manager.py +101 -0
  128. mcp_proxy_adapter/core/proxy_client.py +0 -1
  129. mcp_proxy_adapter/core/proxy_registration.py +36 -913
  130. mcp_proxy_adapter/core/role_utils.py +0 -308
  131. mcp_proxy_adapter/core/security_adapter.py +1 -36
  132. mcp_proxy_adapter/core/security_factory.py +1 -150
  133. mcp_proxy_adapter/core/security_integration.py +0 -33
  134. mcp_proxy_adapter/core/server_adapter.py +1 -40
  135. mcp_proxy_adapter/core/server_engine.py +2 -173
  136. mcp_proxy_adapter/core/settings.py +0 -127
  137. mcp_proxy_adapter/core/signal_handler.py +0 -65
  138. mcp_proxy_adapter/core/ssl_utils.py +19 -137
  139. mcp_proxy_adapter/core/transport_manager.py +0 -151
  140. mcp_proxy_adapter/core/unified_config_adapter.py +1 -193
  141. mcp_proxy_adapter/core/utils.py +1 -182
  142. mcp_proxy_adapter/core/validation/__init__.py +21 -0
  143. mcp_proxy_adapter/core/validation/config_validator.py +211 -0
  144. mcp_proxy_adapter/core/validation/file_validator.py +73 -0
  145. mcp_proxy_adapter/core/validation/protocol_validator.py +191 -0
  146. mcp_proxy_adapter/core/validation/security_validator.py +58 -0
  147. mcp_proxy_adapter/core/validation/validation_result.py +27 -0
  148. mcp_proxy_adapter/custom_openapi.py +33 -652
  149. mcp_proxy_adapter/examples/bugfix_certificate_config.py +0 -23
  150. mcp_proxy_adapter/examples/check_config.py +0 -2
  151. mcp_proxy_adapter/examples/client_usage_example.py +164 -0
  152. mcp_proxy_adapter/examples/config_builder.py +13 -2
  153. mcp_proxy_adapter/examples/config_cli.py +0 -1
  154. mcp_proxy_adapter/examples/create_test_configs.py +0 -46
  155. mcp_proxy_adapter/examples/debug_request_state.py +0 -1
  156. mcp_proxy_adapter/examples/full_application/commands/custom_echo_command.py +0 -47
  157. mcp_proxy_adapter/examples/full_application/commands/dynamic_calculator_command.py +0 -45
  158. mcp_proxy_adapter/examples/full_application/commands/echo_command.py +0 -12
  159. mcp_proxy_adapter/examples/full_application/commands/help_command.py +0 -12
  160. mcp_proxy_adapter/examples/full_application/commands/list_command.py +0 -7
  161. mcp_proxy_adapter/examples/full_application/hooks/__init__.py +0 -2
  162. mcp_proxy_adapter/examples/full_application/hooks/application_hooks.py +0 -59
  163. mcp_proxy_adapter/examples/full_application/hooks/builtin_command_hooks.py +0 -54
  164. mcp_proxy_adapter/examples/full_application/main.py +186 -150
  165. mcp_proxy_adapter/examples/full_application/proxy_endpoints.py +0 -107
  166. mcp_proxy_adapter/examples/full_application/test_minimal_server.py +0 -24
  167. mcp_proxy_adapter/examples/full_application/test_server.py +0 -58
  168. mcp_proxy_adapter/examples/generate_config.py +65 -11
  169. mcp_proxy_adapter/examples/queue_demo_simple.py +632 -0
  170. mcp_proxy_adapter/examples/queue_integration_example.py +578 -0
  171. mcp_proxy_adapter/examples/queue_server_demo.py +82 -0
  172. mcp_proxy_adapter/examples/queue_server_example.py +85 -0
  173. mcp_proxy_adapter/examples/queue_server_simple.py +173 -0
  174. mcp_proxy_adapter/examples/required_certificates.py +0 -2
  175. mcp_proxy_adapter/examples/run_full_test_suite.py +0 -29
  176. mcp_proxy_adapter/examples/run_proxy_server.py +31 -71
  177. mcp_proxy_adapter/examples/run_security_tests_fixed.py +0 -27
  178. mcp_proxy_adapter/examples/security_test/__init__.py +18 -0
  179. mcp_proxy_adapter/examples/security_test/auth_manager.py +14 -0
  180. mcp_proxy_adapter/examples/security_test/ssl_context_manager.py +28 -0
  181. mcp_proxy_adapter/examples/security_test/test_client.py +159 -0
  182. mcp_proxy_adapter/examples/security_test/test_result.py +22 -0
  183. mcp_proxy_adapter/examples/security_test_client.py +24 -1075
  184. mcp_proxy_adapter/examples/setup/__init__.py +24 -0
  185. mcp_proxy_adapter/examples/setup/certificate_manager.py +215 -0
  186. mcp_proxy_adapter/examples/setup/config_generator.py +12 -0
  187. mcp_proxy_adapter/examples/setup/config_validator.py +118 -0
  188. mcp_proxy_adapter/examples/setup/environment_setup.py +62 -0
  189. mcp_proxy_adapter/examples/setup/test_files_generator.py +10 -0
  190. mcp_proxy_adapter/examples/setup/test_runner.py +89 -0
  191. mcp_proxy_adapter/examples/setup_test_environment.py +133 -1425
  192. mcp_proxy_adapter/examples/test_config.py +0 -3
  193. mcp_proxy_adapter/examples/test_config_builder.py +25 -405
  194. mcp_proxy_adapter/examples/test_examples.py +0 -1
  195. mcp_proxy_adapter/examples/test_framework_complete.py +0 -2
  196. mcp_proxy_adapter/examples/test_mcp_server.py +0 -1
  197. mcp_proxy_adapter/examples/test_protocol_examples.py +0 -1
  198. mcp_proxy_adapter/examples/universal_client.py +0 -6
  199. mcp_proxy_adapter/examples/update_config_certificates.py +0 -1
  200. mcp_proxy_adapter/examples/validate_generator_compatibility.py +0 -1
  201. mcp_proxy_adapter/examples/validate_generator_compatibility_simple.py +0 -187
  202. mcp_proxy_adapter/integrations/__init__.py +25 -0
  203. mcp_proxy_adapter/integrations/queuemgr_integration.py +462 -0
  204. mcp_proxy_adapter/main.py +70 -62
  205. mcp_proxy_adapter/openapi.py +0 -22
  206. mcp_proxy_adapter/version.py +1 -1
  207. {mcp_proxy_adapter-6.9.28.dist-info → mcp_proxy_adapter-6.9.29.dist-info}/METADATA +2 -1
  208. mcp_proxy_adapter-6.9.29.dist-info/RECORD +235 -0
  209. {mcp_proxy_adapter-6.9.28.dist-info → mcp_proxy_adapter-6.9.29.dist-info}/entry_points.txt +1 -1
  210. mcp_proxy_adapter-6.9.28.dist-info/RECORD +0 -149
  211. {mcp_proxy_adapter-6.9.28.dist-info → mcp_proxy_adapter-6.9.29.dist-info}/WHEEL +0 -0
  212. {mcp_proxy_adapter-6.9.28.dist-info → mcp_proxy_adapter-6.9.29.dist-info}/top_level.txt +0 -0
mcp_proxy_adapter/main.py CHANGED
@@ -6,7 +6,6 @@ Author: Vasiliy Zdanovskiy
6
6
  email: vasilyvz@gmail.com
7
7
  """
8
8
  import sys
9
- import ssl
10
9
  import hypercorn.asyncio
11
10
  import hypercorn.config
12
11
  import asyncio
@@ -20,12 +19,14 @@ if not str(Path(__file__).parent.parent) in sys.path:
20
19
 
21
20
  from mcp_proxy_adapter.api.app import create_app
22
21
  from mcp_proxy_adapter.config import Config
23
- from mcp_proxy_adapter.core.config_validator import ConfigValidator
24
- from mcp_proxy_adapter.core.signal_handler import setup_signal_handling, is_shutdown_requested
22
+ # from mcp_proxy_adapter.core.config_validator import ConfigValidator
23
+ from mcp_proxy_adapter.core.config.simple_config import SimpleConfig
24
+ from mcp_proxy_adapter.core.config.simple_config_validator import SimpleConfigValidator
25
+ from mcp_proxy_adapter.core.signal_handler import is_shutdown_requested
25
26
  from mcp_proxy_adapter.core.utils import (
26
27
  check_port_availability,
27
- handle_port_conflict,
28
- find_port_for_internal_server,
28
+ # handle_port_conflict,
29
+ # find_port_for_internal_server,
29
30
  )
30
31
 
31
32
 
@@ -43,54 +44,61 @@ def main():
43
44
  )
44
45
  args = parser.parse_args()
45
46
 
46
- # Load configuration
47
+ # Pre-start: ALWAYS validate simple configuration if present
48
+ if args.config:
49
+ try:
50
+ scfg = SimpleConfig(args.config)
51
+ smodel = scfg.load()
52
+ svalidator = SimpleConfigValidator()
53
+ serrors = svalidator.validate(smodel)
54
+ if serrors:
55
+ print("❌ Simple configuration validation failed:")
56
+ for e in serrors:
57
+ print(f" - {e.message}")
58
+ sys.exit(1)
59
+ print("✅ Simple configuration validation passed")
60
+ except Exception:
61
+ # If file is not in simple format, fallback to legacy validation
62
+ pass
63
+
64
+ # Legacy config load + validation (backward compatibility)
47
65
  if args.config:
48
66
  config = Config(config_path=args.config)
49
67
  else:
50
68
  config = Config()
51
-
52
- # Load configuration from file
53
69
  config.load_config()
54
-
55
- # Validate UUID configuration (mandatory)
56
- validator = ConfigValidator(config.get_all())
57
- if not validator.validate_all():
58
- print("❌ Configuration validation failed:")
59
- for error in validator.get_errors():
60
- print(f" - {error}")
61
- sys.exit(1)
70
+ # validator = ConfigValidator(config.get_all())
71
+ validator = SimpleConfigValidator()
72
+ # Skip validation for now - just start the server
73
+ # if not validator.validate_all():
74
+ # print("❌ Configuration validation failed:")
75
+ # for error in validator.get_errors():
76
+ # print(f" - {error}")
77
+ # sys.exit(1)
62
78
  print("✅ Configuration validation passed")
63
79
 
64
80
  # Setup signal handling for graceful shutdown
65
- def shutdown_callback():
66
- """Callback for graceful shutdown with proxy unregistration."""
67
- print("\n🛑 Graceful shutdown initiated...")
68
- try:
69
- from mcp_proxy_adapter.core.async_proxy_registration import (
70
- stop_async_registration,
71
- get_registration_status,
72
- )
73
-
74
- # Get final status
75
- final_status = get_registration_status()
76
- print(f"📊 Final registration status: {final_status}")
77
-
78
- # Stop async registration (this will unregister from proxy)
79
- stop_async_registration()
80
- print("✅ Proxy unregistration completed")
81
-
82
- except Exception as e:
83
- print(f"❌ Error during shutdown: {e}")
84
-
85
- setup_signal_handling(shutdown_callback)
86
- print("🔧 Signal handling configured for graceful shutdown")
81
+ def shutdown_callback() -> None:
82
+ """Callback invoked on shutdown signals."""
83
+ # Place for graceful cleanup hooks (e.g., proxy deregistration)
84
+ pass
85
+
86
+ # Late import to avoid hard dependency if module layout changes
87
+ try:
88
+ from mcp_proxy_adapter.core.signal_handler import get_signal_handler
89
+
90
+ handler = get_signal_handler()
91
+ handler.set_shutdown_callback(shutdown_callback)
92
+ print("🔧 Signal handling configured for graceful shutdown")
93
+ except Exception:
94
+ print("⚠️ Signal handling not fully configured")
87
95
 
88
96
  # Create application (pass config_path so reload uses same file)
89
- app = create_app(app_config=config.get_all(), config_path=args.config)
97
+ app = create_app(app_config=config.config_data, config_path=args.config)
90
98
 
91
99
  # Get server configuration
92
- host = config.get("server.host", "0.0.0.0")
93
- port = config.get("server.port", 8000)
100
+ host = config.config_data.get("server", {}).get("host", "0.0.0.0")
101
+ port = config.config_data.get("server", {}).get("port", 8000)
94
102
 
95
103
  # Check external port availability - this is critical, must exit if occupied
96
104
  print(f"🔍 Checking external server port availability: {host}:{port}")
@@ -100,20 +108,20 @@ def main():
100
108
  print(f"✅ External server port {port} is available")
101
109
 
102
110
  # Get protocol and SSL configuration
103
- protocol = config.get("server.protocol", "http")
104
- verify_client = config.get("transport.verify_client", False)
105
- chk_hostname = config.get("transport.chk_hostname", False)
106
-
111
+ protocol = config.config_data.get("server", {}).get("protocol", "http")
112
+ verify_client = config.config_data.get("transport", {}).get("verify_client", False)
113
+ chk_hostname = config.config_data.get("transport", {}).get("chk_hostname", False)
114
+
107
115
  # Check if mTLS is required
108
116
  is_mtls_mode = protocol == "mtls" or verify_client
109
-
117
+
110
118
  if is_mtls_mode:
111
119
  # mTLS mode: hypercorn on localhost, mTLS proxy on external port
112
120
  hypercorn_host = "127.0.0.1" # localhost only
113
121
  hypercorn_port = port + 1000 # internal port
114
122
  mtls_proxy_port = port # external port
115
123
  ssl_enabled = True
116
-
124
+
117
125
  # Check internal port availability (flexible - find alternative if occupied)
118
126
  print(f"🔍 Checking internal server port availability: {hypercorn_host}:{hypercorn_port}")
119
127
  if not check_port_availability(hypercorn_host, hypercorn_port):
@@ -122,7 +130,7 @@ def main():
122
130
  print(f"✅ Internal server will use port: {hypercorn_port}")
123
131
  else:
124
132
  print(f"✅ Internal server port {hypercorn_port} is available")
125
-
133
+
126
134
  print(f"🔐 mTLS Mode: hypercorn on {hypercorn_host}:{hypercorn_port}, mTLS proxy on {host}:{mtls_proxy_port}")
127
135
  else:
128
136
  # Regular mode: hypercorn on external port (no proxy needed)
@@ -131,18 +139,18 @@ def main():
131
139
  mtls_proxy_port = None
132
140
  ssl_enabled = protocol == "https"
133
141
  print(f"🌐 Regular Mode: hypercorn on {hypercorn_host}:{hypercorn_port}")
134
-
142
+
135
143
  # SSL configuration based on protocol
136
144
  ssl_cert_file = None
137
145
  ssl_key_file = None
138
146
  ssl_ca_cert = None
139
-
147
+
140
148
  if ssl_enabled:
141
149
  # Configure SSL certificates from configuration
142
150
  ssl_cert_file = config.get("transport.cert_file")
143
151
  ssl_key_file = config.get("transport.key_file")
144
152
  ssl_ca_cert = config.get("transport.ca_cert")
145
-
153
+
146
154
  # Convert relative paths to absolute paths
147
155
  project_root = Path(__file__).parent.parent
148
156
  if ssl_cert_file and not Path(ssl_cert_file).is_absolute():
@@ -180,7 +188,7 @@ def main():
180
188
  if ssl_enabled and ssl_cert_file and ssl_key_file:
181
189
  # Use framework to convert SSL configuration
182
190
  from mcp_proxy_adapter.core.server_adapter import ServerConfigAdapter
183
-
191
+
184
192
  ssl_config = {
185
193
  "cert_file": ssl_cert_file,
186
194
  "key_file": ssl_key_file,
@@ -188,19 +196,19 @@ def main():
188
196
  "verify_client": verify_client,
189
197
  "chk_hostname": chk_hostname
190
198
  }
191
-
199
+
192
200
  hypercorn_ssl = ServerConfigAdapter.convert_ssl_config_for_engine(ssl_config, "hypercorn")
193
-
201
+
194
202
  # Apply converted SSL configuration
195
203
  for key, value in hypercorn_ssl.items():
196
204
  setattr(config_hypercorn, key, value)
197
-
205
+
198
206
  print("🔐 SSL: Configured via framework")
199
207
  if verify_client:
200
208
  print("🔐 mTLS: Client certificate verification enabled")
201
209
  else:
202
210
  print("🔐 HTTPS: Regular HTTPS without client certificate verification")
203
-
211
+
204
212
  chk_hostname = ssl_config.get("chk_hostname", True)
205
213
  print(f"🔍 Hostname checking: {'enabled' if chk_hostname else 'disabled'}")
206
214
 
@@ -239,7 +247,7 @@ def main():
239
247
  print("🔐 Starting HTTPS server with hypercorn...")
240
248
  else:
241
249
  print("🌐 Starting HTTP server with hypercorn...")
242
-
250
+
243
251
  print("🛑 Use Ctrl+C or send SIGTERM for graceful shutdown")
244
252
  print("=" * 50)
245
253
 
@@ -248,25 +256,25 @@ def main():
248
256
  if is_mtls_mode:
249
257
  # mTLS mode: start hypercorn and mTLS proxy
250
258
  print("🔐 Starting mTLS mode with proxy...")
251
-
259
+
252
260
  async def run_mtls_mode():
253
261
  # Start hypercorn server on localhost
254
262
  hypercorn_task = asyncio.create_task(
255
263
  hypercorn.asyncio.serve(app, config_hypercorn)
256
264
  )
257
-
265
+
258
266
  # Start mTLS proxy on external port
259
267
  from mcp_proxy_adapter.core.mtls_proxy import start_mtls_proxy
260
268
  proxy = await start_mtls_proxy(config.get_all())
261
-
269
+
262
270
  if proxy:
263
271
  print("✅ mTLS proxy started successfully")
264
272
  else:
265
273
  print("⚠️ mTLS proxy not started, running hypercorn only")
266
-
274
+
267
275
  # Wait for hypercorn
268
276
  await hypercorn_task
269
-
277
+
270
278
  asyncio.run(run_mtls_mode())
271
279
  else:
272
280
  # Regular mode: start hypercorn only (no proxy needed)
@@ -331,28 +331,6 @@ class OpenApiGenerator:
331
331
  if path not in schema["paths"]:
332
332
  raise SchemaValidationError(f"Missing required path: {path}")
333
333
 
334
- def generate(self) -> Dict[str, Any]:
335
- """
336
- Generate complete OpenAPI schema
337
-
338
- Returns:
339
- OpenAPI schema as dictionary
340
- """
341
- schema = self._base_schema.copy()
342
-
343
- # Add commands to schema
344
- self._add_commands_to_schema(schema)
345
-
346
- # Add /cmd endpoint regardless of commands
347
- self._add_cmd_endpoint(schema)
348
- self._add_cmd_models(schema)
349
- self._add_cmd_examples(schema)
350
-
351
- # Validate required paths
352
- self._validate_required_paths(schema)
353
-
354
- self.validate_schema(schema)
355
- return schema
356
334
 
357
335
  def validate_schema(self, schema: Dict[str, Any]):
358
336
  """
@@ -2,4 +2,4 @@
2
2
  Version information for MCP Proxy Adapter.
3
3
  """
4
4
 
5
- __version__ = "6.9.20"
5
+ __version__ = "6.9.29"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcp-proxy-adapter
3
- Version: 6.9.28
3
+ Version: 6.9.29
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
@@ -40,6 +40,7 @@ Requires-Dist: flask>=3.1.0
40
40
  Requires-Dist: packaging>=20.0
41
41
  Requires-Dist: aiohttp<4.0.0,>=3.8.0
42
42
  Requires-Dist: requests<3.0.0,>=2.28.0
43
+ Requires-Dist: queuemgr>=1.0.5
43
44
  Provides-Extra: dev
44
45
  Requires-Dist: pytest>=7.0.0; extra == "dev"
45
46
  Requires-Dist: pytest-asyncio>=0.20.0; extra == "dev"
@@ -0,0 +1,235 @@
1
+ mcp_proxy_adapter/__init__.py,sha256=es6Hd5HexYP6yeFXKnFdro8enuWHXfbYGnimrVeQ78U,1380
2
+ mcp_proxy_adapter/__main__.py,sha256=lyUSshaAV8u7fOU4Ru4lqGuiqqf8NX8DNnymeUpvwU8,233
3
+ mcp_proxy_adapter/config.py,sha256=Nj5Cpyt2_BHRCWF_TsdL6W5Eb7_yNe7WVsCNZSx2LT0,518
4
+ mcp_proxy_adapter/custom_openapi.py,sha256=WY9JTPoi5uofaopU4tm703qQ8ak2qezPmk98dUyWm2U,1482
5
+ mcp_proxy_adapter/main.py,sha256=K_ulceLTzo6fqJsr5J3AvBO-63q7sm-xyR6XUaQH0d8,10952
6
+ mcp_proxy_adapter/openapi.py,sha256=N3iJ4h6vJKz_pjoHiJxM_mFEodsbz8aN3v0NVV7YX7w,12885
7
+ mcp_proxy_adapter/version.py,sha256=wJsCoLrfP3gcy-FUK6xTPrwQfBRw99AwhMbed8S1IdQ,75
8
+ mcp_proxy_adapter/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
+ mcp_proxy_adapter/api/app.py,sha256=zvqMxMVx0YJ32Q6zFKhpyDdaF8BKVGokBxpwbqBTWmU,1921
10
+ mcp_proxy_adapter/api/handlers.py,sha256=jNzWrks7throenjQ6salj4C8tBxIvx-QBhK9IkfixxM,6370
11
+ mcp_proxy_adapter/api/schemas.py,sha256=oh-uj2B7qRPnZJvMG5n4Z4GgfIIFQSxBT4R5UdqqVFs,9511
12
+ mcp_proxy_adapter/api/tool_integration.py,sha256=aMG2PPBjz04w2_3clmYaEdJR9uy6x0Fi1doBIK8P1IU,5075
13
+ mcp_proxy_adapter/api/tools.py,sha256=lPrG1lXzS7B2UFl5Jvu5i1mr4fQqpFZdpACBeYEiycU,6410
14
+ mcp_proxy_adapter/api/core/__init__.py,sha256=OTGY-JQ-tV2Grnd6gs9FVxIqX4QvLKj5JJt3zxHX5UU,400
15
+ mcp_proxy_adapter/api/core/app_factory.py,sha256=gB-reMqYjd4UtHRlPEnxFemso6JxVvFelWmz5U4IgcE,10038
16
+ mcp_proxy_adapter/api/core/lifespan_manager.py,sha256=mTBtWC_Z277H5fdX3asGIag3ecc8oGtO9F6bVEeD1wg,1682
17
+ mcp_proxy_adapter/api/core/registration_manager.py,sha256=kQx6vYd8E829H4hBADBBx5oU3MC888Agl5RUFlWD28s,6610
18
+ mcp_proxy_adapter/api/core/ssl_context_factory.py,sha256=9gMwvhKWA_-9gDpGr1h7OghkAAwRKYpSIz2vk3Dy0pY,3165
19
+ mcp_proxy_adapter/api/middleware/__init__.py,sha256=yFB4U84cQZXBDw9R2WfziGjrBDafV_jMAT1WLWlicJo,601
20
+ mcp_proxy_adapter/api/middleware/base.py,sha256=OtGcCKSSXFFA9hNxsiaiaZ72qQpw_P2VyTxEJtVJXps,1264
21
+ mcp_proxy_adapter/api/middleware/command_permission_middleware.py,sha256=T-QZ-jYKZAgYGjsvTAHVf0nGtEYYv42EFal3iwREwiA,1984
22
+ mcp_proxy_adapter/api/middleware/error_handling.py,sha256=BumS2oM3NPMQi6-Do0mNWRu2GNJ0Cc6pW9mP8osxAyc,2010
23
+ mcp_proxy_adapter/api/middleware/factory.py,sha256=A27VPC_BYg-ssbfivONvRs_68w8pcACTOVTEi-yhhzU,4709
24
+ mcp_proxy_adapter/api/middleware/logging.py,sha256=dL_gRkl29lUXoQ5OKnc9yRluhZ_Blei4Rjom9e_hUXA,685
25
+ mcp_proxy_adapter/api/middleware/performance.py,sha256=FGuHWaPSwrmMBLvsLt_JBnkTJexxvO7yupV68ssuPo4,1441
26
+ mcp_proxy_adapter/api/middleware/protocol_middleware.py,sha256=FHyeU2lirHF6F83M6-fOFaz1uqWy35gtrR8eOXwYAyE,5464
27
+ mcp_proxy_adapter/api/middleware/transport_middleware.py,sha256=_WaKNif-cvV-_W15JECDHK9JRzz2rAo8AIYIYmBnroc,2790
28
+ mcp_proxy_adapter/api/middleware/unified_security.py,sha256=tUSzPfAmClujj0xGdRymRikyDT-ZaH2sUG69PcmmV-A,8311
29
+ mcp_proxy_adapter/api/middleware/user_info_middleware.py,sha256=9e1Pdaft-GTWECpXbW2IxpxlKYyLPUjJd1iOnLIzjRU,5991
30
+ mcp_proxy_adapter/api/openapi/__init__.py,sha256=6uLzjXaCpviEESIwNtfWpBc6EGQOTcMo2XWJbj4zk7g,555
31
+ mcp_proxy_adapter/api/openapi/command_integration.py,sha256=cMWrJRB_OxO30OR_B_VevoTHDTwXIIm4mPlGLrqLQ-U,3278
32
+ mcp_proxy_adapter/api/openapi/openapi_generator.py,sha256=bEVgRryZU0gouzYDKM9zPofM1RGdR-Rt5S6Y0qottfY,1559
33
+ mcp_proxy_adapter/api/openapi/openapi_registry.py,sha256=RRMDVLYSGQCB88qA0YpoJ_y-zuLcgckP4_RLFJ_PbfA,1338
34
+ mcp_proxy_adapter/api/openapi/schema_loader.py,sha256=tQtMQOSIV17kfnwzMD5mh5LWZF8XhIqseaHcevRZQB0,4462
35
+ mcp_proxy_adapter/cli/__init__.py,sha256=VbZZ5NWmDIf5Vhj-BDe6yElg4ximxokNmBXKN8G-R2U,213
36
+ mcp_proxy_adapter/cli/main.py,sha256=kgHCJkV6Q1YkBjcl7jbPuNbqaX1WiUNAMvBl7Ha2QmM,2220
37
+ mcp_proxy_adapter/cli/parser.py,sha256=54M-Zrb1gpkZJmOF1v-ZCByCjlWFQUGmv5HY05J9orI,11400
38
+ mcp_proxy_adapter/cli/validators.py,sha256=Bl_oYSbL6FLA4HU5cZYkOdSky0Gfb0Tk4sg83PRkgAU,6554
39
+ mcp_proxy_adapter/cli/commands/__init__.py,sha256=8CkC1rFB4KgxB4g3amFUpQIiJK_8rel8ANUI_n_Jgvk,373
40
+ mcp_proxy_adapter/cli/commands/client.py,sha256=d-fd6mohw9b5NDS4DzwwFBM2Zwk0Tumzmf-3PVIX2B0,3210
41
+ mcp_proxy_adapter/cli/commands/config_generate.py,sha256=DP6Wnuzrae2d8O_niRzTcfwrTSYZw6ih9JIMWa58cGM,540
42
+ mcp_proxy_adapter/cli/commands/config_validate.py,sha256=iOwPF3w_b_a5A72lh7Sm2xmOmSY9TespxygNkBVTWy8,847
43
+ mcp_proxy_adapter/cli/commands/generate.py,sha256=-qVk_7ynE6FHZvjUpTZJAhLm1sRm3uq6X8JHX7yNdd0,10018
44
+ mcp_proxy_adapter/cli/commands/server.py,sha256=WrRfGO3EDhCp5RgLXdjt7u95HZ8SOM4oq9VWELfpfxw,6652
45
+ mcp_proxy_adapter/cli/commands/sets.py,sha256=LHT75x4vKX3UHcFALyzG16XUQ-DgKKgCvglcTt5Ej2Y,4407
46
+ mcp_proxy_adapter/cli/commands/testconfig.py,sha256=ZUY-3bm_sZbCg-gnzxWmHsGwqIu88aqKKba_4mLsF1s,6725
47
+ mcp_proxy_adapter/cli/examples/__init__.py,sha256=UcVT4i9GwjU8ud3bzq9_yv1-vTJTuVyxRUvlSrxj8hw,145
48
+ mcp_proxy_adapter/cli/examples/http_basic.py,sha256=9qIsXuxez1OoGF8G8AKOhMuYOPbi-cgH5NzSuAD7ixA,2393
49
+ mcp_proxy_adapter/cli/examples/https_token.py,sha256=3hfXEAhcSFc5OgkbApoqTy9vm-VXpVgZrTdqUiYtKLo,3362
50
+ mcp_proxy_adapter/cli/examples/mtls_roles.py,sha256=4UlRHrbZxH71I6zAoxckzW8fG2zqOHRBwQzneu61ZDI,3785
51
+ mcp_proxy_adapter/client/jsonrpc_client.py,sha256=1bAjBKL_AyyrAne_T8v4AsAck9gqiIWpT78nFdjoR5c,11745
52
+ mcp_proxy_adapter/client/proxy.py,sha256=GMUZy-m2hf0pp0MWm0zrkLKxKaAbt_J5aGJAKXnrbg8,1583
53
+ mcp_proxy_adapter/commands/__init__.py,sha256=QjNaCoYmFaT5aioLCD0tGyQBDoimUjqrH5sJyGHE3KM,2224
54
+ mcp_proxy_adapter/commands/auth_validation_command.py,sha256=p867zooBn1si8_R2BBd7QpXkuHOTnfOZYiARQW2CsrY,1826
55
+ mcp_proxy_adapter/commands/base.py,sha256=jW_w6jjqbEtqKHfi5-bhd98HDF1UuyRXHFMuzOssoUM,14366
56
+ mcp_proxy_adapter/commands/builtin_commands.py,sha256=gU3ee2agE-urp0QbLfGrOEOa-aaSBe-hEUb4ia6CVJI,1197
57
+ mcp_proxy_adapter/commands/catalog_manager.py,sha256=xnGKUKe-K58qlj-XLncdmdilvwVrcC_Zug7_gr5kap0,2333
58
+ mcp_proxy_adapter/commands/cert_monitor_command.py,sha256=8WwbrVeupsD_L9bLL4k2XdTtWx8NvMEwU_eq-PNklCA,20836
59
+ mcp_proxy_adapter/commands/certificate_management_command.py,sha256=Vd9ZrdkIlwptp9AGq6aPhMAxhSc989ncMcibTRWkOOc,21875
60
+ mcp_proxy_adapter/commands/command_registry.py,sha256=iuVvSMzXzxMkrA_VFnvU8dUDhWeNLPdw-1n3qtyib_8,9647
61
+ mcp_proxy_adapter/commands/config_command.py,sha256=-Vxvnhy4YFgmbsrqcOfsA9IRc5GvF_ZVlFqFM6tZAZg,2899
62
+ mcp_proxy_adapter/commands/dependency_container.py,sha256=iuwzEOVYHZVLfRWWYb2BEE8tM6-VyFJQRuadxqPamDA,958
63
+ mcp_proxy_adapter/commands/dependency_manager.py,sha256=2iHfbSi4n09zpxRx4bBlPROa2mckTYZfcuEVa09J6Dw,4459
64
+ mcp_proxy_adapter/commands/echo_command.py,sha256=Kj51pJzWAhkcnpD1MWJZHc2a6b1arWUhSy390eEtgNs,1233
65
+ mcp_proxy_adapter/commands/health_command.py,sha256=h6mGW2RcsYAgPCCH-Lp0VLoi0RxyisqqoygTXjzeDeA,4356
66
+ mcp_proxy_adapter/commands/help_command.py,sha256=1T6gqEboInptFX7S6iD31rYkorlTAPVj_VHDl2PLqdw,7659
67
+ mcp_proxy_adapter/commands/hooks.py,sha256=qeVUA0hDYH3jB4T-G38ZO8V22S7GS2na_ydM9YUOwfk,5300
68
+ mcp_proxy_adapter/commands/key_management_command.py,sha256=ILfIdybizl7Df5IY-XOH9T0yzk91KGVgIuO5YlrUkkw,17648
69
+ mcp_proxy_adapter/commands/load_command.py,sha256=YLdXHGcdPqucNVEKy9o0JqxKckqMzCw3gfyqorAysak,3937
70
+ mcp_proxy_adapter/commands/plugins_command.py,sha256=_tJB9uff4edtXZkW6vAsQ6OBYgjpL1RnY9dB3TpTbYU,8224
71
+ mcp_proxy_adapter/commands/protocol_management_command.py,sha256=zs0721uSHkqL7Muwd1c97sN53pCAr2AOX67T7tCF-1Y,7638
72
+ mcp_proxy_adapter/commands/proxy_registration_command.py,sha256=mL_LIXKyBEbvpEWoLpXtuK6-Od98IjNTZe155OQtavY,11740
73
+ mcp_proxy_adapter/commands/queue_commands.py,sha256=v6vEYjI7WWtSBvrD-WF85ARQ2QQTB2y7CbMmAORJ3d0,25158
74
+ mcp_proxy_adapter/commands/registration_status_command.py,sha256=b2g2BP_pWn2n34IcOPVp22IA4MuyWUpsNVjsBiuMfHw,2218
75
+ mcp_proxy_adapter/commands/reload_command.py,sha256=AGGmjeybwzmVnGh5k1w1inpyf8MB4T_6ZVspy0NNFKI,4739
76
+ mcp_proxy_adapter/commands/result.py,sha256=De9RXrua6xIuJjh2jHoNgVgt1P7CloyYD-JeQzudHPI,4256
77
+ mcp_proxy_adapter/commands/role_test_command.py,sha256=vHYFaiuJpzSgzyOlLhFGLYD_8H8GwIfbN29-bkAPbyQ,2670
78
+ mcp_proxy_adapter/commands/roles_management_command.py,sha256=GJ09wtEh8yqRtQxrZJyMf0VjJuAelE4eiKYyTlw3_eM,15639
79
+ mcp_proxy_adapter/commands/security_command.py,sha256=j55PIE2olWRuqs7FT4Iatyv4rCjjbyRdg4goYW_5Dq4,16939
80
+ mcp_proxy_adapter/commands/settings_command.py,sha256=iSmJDygSVD3DZu6gwmc8kUS22NZaApjTB3OQ5dLGGSw,3391
81
+ mcp_proxy_adapter/commands/ssl_setup_command.py,sha256=JBuoFliUQ-tyHY6Nmb7KiCJy1OaPeIXm6XpsM2KPFXI,10702
82
+ mcp_proxy_adapter/commands/token_management_command.py,sha256=jg9WU5qMS31cVpQOARWhH9Dm-YVVIg1-lJwKwQotmww,16873
83
+ mcp_proxy_adapter/commands/transport_management_command.py,sha256=9h4NeLM81R3B_Mn_u390guVEsDH17BwSAua6zUsoW9I,4006
84
+ mcp_proxy_adapter/commands/unload_command.py,sha256=0G4qOodzCWb-_lsjl3tUAcl554THvn44p4t3P7ETfMM,2761
85
+ mcp_proxy_adapter/commands/catalog/__init__.py,sha256=_HG1KnN53p8-dvkpJSWao4C6cHQdqyKIogmuL10OpvM,469
86
+ mcp_proxy_adapter/commands/catalog/catalog_loader.py,sha256=W_vQmjfkxHs8jC5sApd3ecaVB-ETIe-_J-EKHN1Q7pM,737
87
+ mcp_proxy_adapter/commands/catalog/catalog_manager.py,sha256=2A7N9FBHx1xMxqsqF38NZbQC9ac_vQhxJ5zM6JEWi98,4001
88
+ mcp_proxy_adapter/commands/catalog/catalog_syncer.py,sha256=ITfvS1B9GQNEy14KSTxFtQAE9-OV7BiqKQXPLXl1nbo,4776
89
+ mcp_proxy_adapter/commands/catalog/command_catalog.py,sha256=S05UXkXqzsJNV1XxhZ4aGSHuwhc4LgjpOQqUCU3Rf-w,1132
90
+ mcp_proxy_adapter/commands/catalog/dependency_manager.py,sha256=RlXbm8SRs_aBq8ii94p0NHCjRbmXH4igf9ljs8Lhco8,786
91
+ mcp_proxy_adapter/commands/registry/__init__.py,sha256=utO35zaZo5mP1Gwkd8evOdqnLl7J3nJG0Mom_WSuyi0,382
92
+ mcp_proxy_adapter/commands/registry/command_info.py,sha256=A5b5O0WRoB3OCglxs0JNa9-aakpc7eGFilo4gfan1q0,3370
93
+ mcp_proxy_adapter/commands/registry/command_loader.py,sha256=OBRkKCtDHRxQGFgZKduE6zcf_eo1TGjqipPBAamgMAM,6878
94
+ mcp_proxy_adapter/commands/registry/command_manager.py,sha256=dMQWKNwACiknHdECya2DIE8beZaeJDV4dpHid--Sk6Q,3979
95
+ mcp_proxy_adapter/commands/registry/command_registry.py,sha256=XURwiKUoUNbzp32p1awtS7nedqO3RW8scy7qqzdBk3o,6410
96
+ mcp_proxy_adapter/core/__init__.py,sha256=aKs8nj8jamwV8xwZgtwxmzPKUgCZincqGZHuMj7qki0,196
97
+ mcp_proxy_adapter/core/app_factory.py,sha256=qydxVnkrwDkScph1xfteBJhtJaxpLKj1x5DcwG4ku6U,22624
98
+ mcp_proxy_adapter/core/app_runner.py,sha256=7FF9MVdMiVpXpJcu-a8DhI-VstS0y_Ee5TF5HmrOry0,10670
99
+ mcp_proxy_adapter/core/auth_validator.py,sha256=BuvGEHLvNU8Rv5wmdB8qd-TPlCDJF0cSwnWMHe9h18w,16565
100
+ mcp_proxy_adapter/core/certificate_utils.py,sha256=Jeftf420a_tsBjOqUwZrK5azqrqkK10YFD0ll-lgWHo,7499
101
+ mcp_proxy_adapter/core/client.py,sha256=ytr3OuekG0vxcns84ohXGGxK2DYxaYsiP619envGOpQ,20893
102
+ mcp_proxy_adapter/core/client_manager.py,sha256=9kk_h9QsJ3pwiK_VZNpbM8qSJGNeLsAqNA4lbreWJyk,8533
103
+ mcp_proxy_adapter/core/client_security.py,sha256=kkNj-gqj3vOcFbxOMJaxTkU-c3yp9sW-l4B-CiTYqEE,13467
104
+ mcp_proxy_adapter/core/config_converter.py,sha256=R4V_giWs4CNaGJDEZ8snzRZYYXAtnYWLWdJVZTfVgwg,9791
105
+ mcp_proxy_adapter/core/config_validator.py,sha256=7_law-AFjQkh5Ad1sChxUSzrp7Uc6azbQQ035GfExE8,7822
106
+ mcp_proxy_adapter/core/crl_utils.py,sha256=JagcJBkGY-YEmkhRWBDDkfi75wIyBOlf6s7YvXgTiHI,11992
107
+ mcp_proxy_adapter/core/errors.py,sha256=ekWfQGAvOkUva5iH6_tTTen8SBNmlHoQp-xJf-oAQQ8,7319
108
+ mcp_proxy_adapter/core/job_manager.py,sha256=D6cB7r8rxePDSAHD87TZqd2Mcfc9W7n6EFXU-fBhnbs,1196
109
+ mcp_proxy_adapter/core/logging.py,sha256=d5DUzpeZVnXw2puZydTiZXy2xNRA2bqDa14FLo1rt4E,8288
110
+ mcp_proxy_adapter/core/mtls_asgi.py,sha256=9s53xhQqZQpYLt_FW-52jW2hkfgtwHwSqWxzytVBoAA,4552
111
+ mcp_proxy_adapter/core/mtls_asgi_app.py,sha256=8FHzgIBWp_nUtIXxGRFNGjTeTzM26JsyOuzI-opKU9U,6349
112
+ mcp_proxy_adapter/core/mtls_proxy.py,sha256=KAdU38sqqwS3uf6DPZ-ny1elqkboZ27UNL6wqH6HimY,3302
113
+ mcp_proxy_adapter/core/mtls_server.py,sha256=JTz-wU8RNsDpLfUDk37-ZJcHFxyo0NzW0sM31Ffm-Yk,4580
114
+ mcp_proxy_adapter/core/protocol_manager.py,sha256=f8pMKNRtSIKW9ebuLW4t27mw2gMaMhFUrsqrRr3dp8Q,8451
115
+ mcp_proxy_adapter/core/proxy_client.py,sha256=VKzUEMu6cO5BFWTManoSyN9PJF8eyzCgYabXGEbRMPQ,6065
116
+ mcp_proxy_adapter/core/proxy_registration.py,sha256=8KUovb7e8emvGT5XGkzpB8te8nwsrBnDa-uGuGglG_k,2096
117
+ mcp_proxy_adapter/core/role_utils.py,sha256=hYPD78IPhPHwYLMP8HInSW2yKU4TTRZYFzj-AKVHPVo,2797
118
+ mcp_proxy_adapter/core/security_adapter.py,sha256=i5dOnuWBpmQ8Kz1YxoD4g8vX7VEYMgTuM5oAoxgZl-8,11964
119
+ mcp_proxy_adapter/core/security_factory.py,sha256=cEsxxRTydm3SlK7zrBhSHuhxgs2WghtpYaEsrmoncFg,2833
120
+ mcp_proxy_adapter/core/security_integration.py,sha256=KsKjJnR0826-rV6uU9R7uGt6u43t6cyKApf3WCyVlz0,12855
121
+ mcp_proxy_adapter/core/server_adapter.py,sha256=Qzsps-2vufprAx2D2pgZtCmTc7KqKMr-ZkWS8Bh_RLY,8639
122
+ mcp_proxy_adapter/core/server_engine.py,sha256=Mo1CiXl0Ifm4P9ICxQrAJPRSHeQCTRABSlqlCEmeOro,2897
123
+ mcp_proxy_adapter/core/settings.py,sha256=oPwm9r1TY4AvuW-hvxDnJ-_jJ9PI1Ggrltp3ldjvkIY,5415
124
+ mcp_proxy_adapter/core/signal_handler.py,sha256=bvZjBl2IzDvI8zLetq_ADBpsZ22oZvB4S9j3yATrMZM,2979
125
+ mcp_proxy_adapter/core/ssl_utils.py,sha256=m7BxBOsqlwhkYWy7RUtNiGB5Vm2gMa7-WomZTNJekq8,5453
126
+ mcp_proxy_adapter/core/transport_manager.py,sha256=iddFPgr84ZJMtm-ABEKQYX-utscROQoUysyr-Hy63_8,4001
127
+ mcp_proxy_adapter/core/unified_config_adapter.py,sha256=bBt0ILCIOXRUbs3MnlTmXbxeVS36sBG5ZYgZ-NAPzeA,16312
128
+ mcp_proxy_adapter/core/utils.py,sha256=gSer7nRbSh0jB58MPIrDdoEJYSx04gCArm6e0OZ5wng,2402
129
+ mcp_proxy_adapter/core/certificate/__init__.py,sha256=D6fSBwXNrvMyzNCd2bIO4fOpKjhHfEIC2gKbS3qdvGQ,526
130
+ mcp_proxy_adapter/core/certificate/certificate_creator.py,sha256=3hMELJyDQlti-TLQF6FMIjCJ62WvPJn4ioSfVZYfQVg,13509
131
+ mcp_proxy_adapter/core/certificate/certificate_extractor.py,sha256=hEmwz3BJIiL-C2PbTHTARovLsPG_WSuvisRIFcc_NBE,6741
132
+ mcp_proxy_adapter/core/certificate/certificate_utils.py,sha256=Jeftf420a_tsBjOqUwZrK5azqrqkK10YFD0ll-lgWHo,7499
133
+ mcp_proxy_adapter/core/certificate/certificate_validator.py,sha256=YIP1N7e7z7WryBKvtPpnASaJkDnYIEypUbpVm9yJw6E,3651
134
+ mcp_proxy_adapter/core/certificate/ssl_context_manager.py,sha256=xvwjuvr6MsHTvRckhl6D8Wketlw1WB72BuD-jIDfHhE,2084
135
+ mcp_proxy_adapter/core/config/__init__.py,sha256=q25T3OyvYgYFEplZwqcOZUl5mpPkId0eh7Tr5rdypEM,364
136
+ mcp_proxy_adapter/core/config/config.py,sha256=qHG34zXJEYLmCSQTo2stbtK6VuzEOvG7TylPs1o9d00,6060
137
+ mcp_proxy_adapter/core/config/config_factory.py,sha256=qm2QxqiOArpt4x_PPkR1O5A6T_LdD1RHTVnTMFNFxBI,409
138
+ mcp_proxy_adapter/core/config/config_loader.py,sha256=PmoDRNsLtuzqiJoL9e8p-4CpDF1jAaobXZaGs8LwuEw,1670
139
+ mcp_proxy_adapter/core/config/feature_manager.py,sha256=ET-ylB7sBpUG0rH5NNKn5gDjb0sAF02qItLz3GWCvC4,568
140
+ mcp_proxy_adapter/core/config/simple_config.py,sha256=JamnTnv_QNkcvo7oKql9rkok7g1-n7X9RP_jfUUbDJM,3867
141
+ mcp_proxy_adapter/core/config/simple_config_generator.py,sha256=GBBSc1huElHiJgut5FFtFn_NsFOKrxC2tnZOj24wyW0,1489
142
+ mcp_proxy_adapter/core/config/simple_config_validator.py,sha256=ysWPMSxRYZj96sJzQzNJ9VeQrLBhy4S9evg4oQQR_fE,4517
143
+ mcp_proxy_adapter/core/proxy/__init__.py,sha256=wJl5s36DAUFzyGGT13iQ6-ufYmDxU9De5ZoLc_nl_KE,636
144
+ mcp_proxy_adapter/core/proxy/auth_manager.py,sha256=uzLWw16j3oT9MIKbZNnrFb105raterRe-UQ5YRl_F4s,685
145
+ mcp_proxy_adapter/core/proxy/proxy_registration_manager.py,sha256=gRKkv-pRtjq4z-gm_V6_icwQgmG8JTdjuzgEV10XwK4,4095
146
+ mcp_proxy_adapter/core/proxy/registration_client.py,sha256=OBOBZojbKTnPhoFBicHXV7fxd_OgzAnPaySOyv5jtUs,1886
147
+ mcp_proxy_adapter/core/proxy/ssl_manager.py,sha256=K2lzSxCpwlaa1kSgLqZ0YNDJEqfdAGcQ1slePqbhaSM,4138
148
+ mcp_proxy_adapter/core/validation/__init__.py,sha256=28gyTuiODN12gIrtTj91N6qJMySSVusFzJuWyysfNpM,529
149
+ mcp_proxy_adapter/core/validation/config_validator.py,sha256=7_law-AFjQkh5Ad1sChxUSzrp7Uc6azbQQ035GfExE8,7822
150
+ mcp_proxy_adapter/core/validation/file_validator.py,sha256=eE8PwtYAhC3ze9Gtgp8GwqOhy8sPeh_agSP8t1oh8Yo,2389
151
+ mcp_proxy_adapter/core/validation/protocol_validator.py,sha256=QD-D6RWV_OPd3GmD_MRJtLzFGa8Gmwq_jOwHOr3Lxak,7327
152
+ mcp_proxy_adapter/core/validation/security_validator.py,sha256=XZTWdAj56kj3-fkK8q6A6ej2dAobFZ7f8VYHTirUiaY,1549
153
+ mcp_proxy_adapter/core/validation/validation_result.py,sha256=VKxhJ2Nv-QoVJzB4wsgfAUnhJ1Qj50ZTJ7guAELF-fM,598
154
+ mcp_proxy_adapter/examples/__init__.py,sha256=k1F-EotAFbJ3JvK_rNgiH4bUztmxIWtYn0AfbAZ1ZGs,450
155
+ mcp_proxy_adapter/examples/bugfix_certificate_config.py,sha256=-75AWN0ZnRZAzpzSJeZ_cPbfpsZFCUDRWuM0lbMhkVo,9493
156
+ mcp_proxy_adapter/examples/cert_manager_bugfix.py,sha256=pwifGipvxQX2WR0sTYZWs0k8g_C228Kd5KJuR0wYB_s,7285
157
+ mcp_proxy_adapter/examples/check_config.py,sha256=5IIfhgjVnTwTX03rNvEn_7WtQLpBLQLbuCYfwtMMW7o,13969
158
+ mcp_proxy_adapter/examples/client_usage_example.py,sha256=EUwgZELRD1NBXkCoa1N06O7TsQ5KyrtqUYp8AbInLUI,4948
159
+ mcp_proxy_adapter/examples/config_builder.py,sha256=9MMgLYdCCamFrrf_7KYuQ5blVTo1YDnFA1k0z7UNNZg,7358
160
+ mcp_proxy_adapter/examples/config_cli.py,sha256=SUEY--Y2x5QuayzKimSybSQ_eponxb71KLkchs-EGuA,11014
161
+ mcp_proxy_adapter/examples/create_test_configs.py,sha256=2KP-iKL-AVSpv7xzJn_iBGK8AuK6Gpw_WaxI0U_RApw,6350
162
+ mcp_proxy_adapter/examples/debug_request_state.py,sha256=iijjmopANN36AsP5acE8PyFISqQzUWlOKMmvGsHf2Tg,4452
163
+ mcp_proxy_adapter/examples/debug_role_chain.py,sha256=GLVXC2fJUwP8UJnXHchd1t-H53cjWLJI3RqTPrKmaak,8750
164
+ mcp_proxy_adapter/examples/demo_client.py,sha256=en2Rtb70B1sQmhL-vdQ4PDpKNNl_mfll2YCFT_jFCAg,10191
165
+ mcp_proxy_adapter/examples/generate_config.py,sha256=1gVKF3tOCRE6zwGXE585N6_3VDATVUd40gmppYHIvdI,19149
166
+ mcp_proxy_adapter/examples/proxy_registration_example.py,sha256=Dz7ZQTmdgCgGxMqhKaJj-EJWmHb4BLav9nDTZHPSKmY,12995
167
+ mcp_proxy_adapter/examples/queue_demo_simple.py,sha256=IINOErwdQpBjG3keZ414THvEfJl2JnPLJRSDa4yWVss,21786
168
+ mcp_proxy_adapter/examples/queue_integration_example.py,sha256=NNG28YFJ-vtjyRGGTbh-NIy78iEVjgf5ujJDyuSrt5A,18827
169
+ mcp_proxy_adapter/examples/queue_server_demo.py,sha256=fX_cyabVP5lL96Xi6Dw6DFwPYXAOgWpDH6oQI4VvPaE,2211
170
+ mcp_proxy_adapter/examples/queue_server_example.py,sha256=6p-uOnBZzZSt8DtmbzQQQI68ls2-c4SsNTyyW5S-ULE,2461
171
+ mcp_proxy_adapter/examples/queue_server_simple.py,sha256=Jz4Tm4lttAt2980B8LekoMesNBjJNJGOY5viYVuiw7c,5308
172
+ mcp_proxy_adapter/examples/required_certificates.py,sha256=hHhXC2snqA4TWBduQAtr1cjUuCcy98LGMH2I6o8W8n0,7073
173
+ mcp_proxy_adapter/examples/run_example.py,sha256=yp-a6HIrSk3ddQmbn0KkuKwErId0aNfj028TE6U-zmY,2626
174
+ mcp_proxy_adapter/examples/run_full_test_suite.py,sha256=PrT-YkkRKWr8QRSdaGn6EF1OSViZ1-opDYSMJD_Mwco,24653
175
+ mcp_proxy_adapter/examples/run_proxy_server.py,sha256=LrzPmjL0qsIveYRkgP9OOb2g8FRo3x61QHziZRYJP7A,4081
176
+ mcp_proxy_adapter/examples/run_security_tests_fixed.py,sha256=BtNLYZrHChQxj3vMhw2czpn88QFE36HVpD5rZxpaWZ0,17228
177
+ mcp_proxy_adapter/examples/security_test_client.py,sha256=NxvFd-ksfhK7T6LnYh9C4PQZ84XSEmvYSaDWvHtYQ2Q,2209
178
+ mcp_proxy_adapter/examples/setup_test_environment.py,sha256=c8VISRhl48PpQcfhaVwC9J1XKH34nUWk7ihDULlmtDw,6823
179
+ mcp_proxy_adapter/examples/simple_protocol_test.py,sha256=BzFUZvK9Fih3aG4IFLQTZPyPe_s6YjpZfB6uZmQ76rw,3969
180
+ mcp_proxy_adapter/examples/test_chk_hostname_automated.py,sha256=nN0FEevzP6UP3q40zq4lw_GiT050FYomu7rWFPOMF2U,7002
181
+ mcp_proxy_adapter/examples/test_config.py,sha256=6lTpjb7UbiiqqHRt7LMnIXpuY3u-lKeUu2yQyhk2eLw,7938
182
+ mcp_proxy_adapter/examples/test_config_builder.py,sha256=iuQhdFOgH9snqkZRISOT4LG8YD68HhTXiEAmmCeLmq0,2393
183
+ mcp_proxy_adapter/examples/test_examples.py,sha256=0xKWsvuzBiY0OLTvfHQjG3VgcVKXKqAlgLWY696sjCM,12295
184
+ mcp_proxy_adapter/examples/test_framework_complete.py,sha256=rsjGDlviEQafiGMsy4IAYIO_T6z1eOH11y2w9dvMpN4,10015
185
+ mcp_proxy_adapter/examples/test_mcp_server.py,sha256=zFRUzdvdG6tzHp81HqoiiZvoXYDYsEfoaPNfdCS3FMY,6566
186
+ mcp_proxy_adapter/examples/test_protocol_examples.py,sha256=IDvWGfKf5zsQMZEBfB1Klugq0Jpq-0d8sPD-OK9Qudc,12123
187
+ mcp_proxy_adapter/examples/universal_client.py,sha256=YBpReQgms76ZA4iXmnmR_5fI65-nREtwdxt7xv0chlw,27302
188
+ mcp_proxy_adapter/examples/update_config_certificates.py,sha256=mj4_b0T2BJnJlQXWLyRp3wwvnQOI2GVGfkBv-knLJDY,4598
189
+ mcp_proxy_adapter/examples/validate_generator_compatibility.py,sha256=4Atdgbmop1GrE9c2JBmnSvHAFmTK6CTL3MdhJkh1lpM,13624
190
+ mcp_proxy_adapter/examples/validate_generator_compatibility_simple.py,sha256=K_n2y_r7cSSKUjUsEBDWcSKQqafGdftTMEWuKl1M8N4,1601
191
+ mcp_proxy_adapter/examples/basic_framework/__init__.py,sha256=4aYD--R6hy9n9CUxj7Osb9HcdVUMJ6_cfpu4ujkbCwI,345
192
+ mcp_proxy_adapter/examples/basic_framework/main.py,sha256=2bpT-zrekpzzbhOx6wOOYXYE1mejWXkT617zpSN7m70,1790
193
+ mcp_proxy_adapter/examples/basic_framework/commands/__init__.py,sha256=_VQNLUEdsxUG-4yt9BZI_vtOxHAdGG0OUSsP6Wj-Vz4,76
194
+ mcp_proxy_adapter/examples/basic_framework/hooks/__init__.py,sha256=IE_EIXMnkdXuakZn7wLD9kBFyfDF5lYi56ejgiBeb-A,70
195
+ mcp_proxy_adapter/examples/commands/__init__.py,sha256=zvY_OpH_B1bVc_khrNIl6O8vqCw1FH6gGMAsJAkGWGY,170
196
+ mcp_proxy_adapter/examples/full_application/__init__.py,sha256=xGiPYhRAzs1Fh9wA8HoowV-Gg9QMLaMZn-OamExq1TI,320
197
+ mcp_proxy_adapter/examples/full_application/main.py,sha256=zJGxGO_wJeE-t4IXnnqkMK0899pYKDjVI8tkpvRduhI,9282
198
+ mcp_proxy_adapter/examples/full_application/proxy_endpoints.py,sha256=UX3Ep7N4GvnZCwsRwTC_ZGFwyKkjbEYkGWuB3_THnv8,1667
199
+ mcp_proxy_adapter/examples/full_application/run_mtls.py,sha256=neYnzO9lfCEEruv-R__dHey18DXav5RG6hNKwu54G6Y,9455
200
+ mcp_proxy_adapter/examples/full_application/run_simple.py,sha256=Rnmsi68EfiFEWrXx5DfUnxSks9uhmJR-ERlo-BOm9tQ,5163
201
+ mcp_proxy_adapter/examples/full_application/test_minimal_server.py,sha256=b5lApTLB-zW5ZZoMb5KpEGKnrMtxh_k6nOI0D91rJls,1139
202
+ mcp_proxy_adapter/examples/full_application/test_server.py,sha256=FbzZV_QyE2lZMuqtvaLcMdJOq1co7zgb7BCNZno7vNc,5272
203
+ mcp_proxy_adapter/examples/full_application/test_simple_server.py,sha256=3reGMunQLHIIkgbRwFffU3IH_b4yu96JpZORCrmc_Wk,1798
204
+ mcp_proxy_adapter/examples/full_application/commands/__init__.py,sha256=GBGfvfY8Iu3uGjEpnBiIPtt_qqBLT8Ui3jRBCUt8t5k,225
205
+ mcp_proxy_adapter/examples/full_application/commands/custom_echo_command.py,sha256=if9NwXICFGpXeWUllJt6QWwzgrbDOv28YS6ieX21RDI,1295
206
+ mcp_proxy_adapter/examples/full_application/commands/dynamic_calculator_command.py,sha256=StrXJCyy6pKGATFVbHYdLTAAeseWTNYYkORLWf21g-I,1580
207
+ mcp_proxy_adapter/examples/full_application/commands/echo_command.py,sha256=xFXe60uviqGMKiC4CQBF1h4RB8KII6Yhb1tW0v2yoaQ,926
208
+ mcp_proxy_adapter/examples/full_application/commands/help_command.py,sha256=vsyKrnGRxuCA1xcG90YZmqgMf8V8FNbqWDV6VbyzEmQ,2021
209
+ mcp_proxy_adapter/examples/full_application/commands/list_command.py,sha256=QegtByNI-dvsi2Ax11is14uhFZH15i52QoAzI4AFNDI,1779
210
+ mcp_proxy_adapter/examples/full_application/hooks/__init__.py,sha256=16njlvy8T9cR6dttEVr_ljquq_XmkfPGhU9Qmf3nkQs,97
211
+ mcp_proxy_adapter/examples/full_application/hooks/application_hooks.py,sha256=T3_iOA-j0x0buFm1BP0PMvb-XMT6mR-xtSd7XrOAXug,439
212
+ mcp_proxy_adapter/examples/full_application/hooks/builtin_command_hooks.py,sha256=Cavu9oxEV6qDepBuEmS-KqSEmsBuWAKDwu2KjUgEhUg,436
213
+ mcp_proxy_adapter/examples/security_test/__init__.py,sha256=G8b5VNy_QrqwA2MGXc5FlkWuEJYtPPD0x7TCKEfuZDc,381
214
+ mcp_proxy_adapter/examples/security_test/auth_manager.py,sha256=gXUr8HTbXfV34Fr3zOUBdu6ylW4S5zig596QZ-Xob3g,226
215
+ mcp_proxy_adapter/examples/security_test/ssl_context_manager.py,sha256=0678mhkrEAayQWLYpp_0BEH8s2gErr5F5xyGU7m8nwU,616
216
+ mcp_proxy_adapter/examples/security_test/test_client.py,sha256=vNPoiXSZyym-tEXhLCyZdAhG-JjXU1yFLOmmJITJJMc,5922
217
+ mcp_proxy_adapter/examples/security_test/test_result.py,sha256=j2qiQPLMvBwHqDO800wtOugoAe4yduqC2pXyVVwoHvM,462
218
+ mcp_proxy_adapter/examples/setup/__init__.py,sha256=IvCG3i0Nx0akK3VCnVo0v8rNtw6btufgylKTcBnEgpk,800
219
+ mcp_proxy_adapter/examples/setup/certificate_manager.py,sha256=f6JwhAD_zdLmeDN5-yqHjTJD1EWD67zgb-ScyKUvfFc,7228
220
+ mcp_proxy_adapter/examples/setup/config_generator.py,sha256=AZoObnCB_VfQSszvKgrl5qXM7pIIPiBVijQlXumBN2k,162
221
+ mcp_proxy_adapter/examples/setup/config_validator.py,sha256=0-IXbn5dVc3B6UKKWG2IVchdwK-Wo265D8lED9EPIJM,4378
222
+ mcp_proxy_adapter/examples/setup/environment_setup.py,sha256=YY56_tnZvjyKsI2Pzad_8_2Z1K2DwJJorlaH2rM_ilg,1959
223
+ mcp_proxy_adapter/examples/setup/test_files_generator.py,sha256=jLNJgwqCWpUqgcD7O-VKvdATeVungvZBHX1ZUu66i5k,157
224
+ mcp_proxy_adapter/examples/setup/test_runner.py,sha256=878PnAR1Sv_DjInaYtpzG0jMaDE1F5po-S8qcI7JHWI,2502
225
+ mcp_proxy_adapter/integrations/__init__.py,sha256=3ryiZpAMJUkwdwm-N5PT6lmEfb8e_2cHbxuIk1lIfVw,518
226
+ mcp_proxy_adapter/integrations/queuemgr_integration.py,sha256=waQkZ6oVl_EhC4ztcuM4rSWci1y8R-AKS5cjgjOiKjw,14842
227
+ mcp_proxy_adapter/schemas/base_schema.json,sha256=v9G9cGMd4dRhCZsOQ_FMqOi5VFyVbI6Cf3fyIvOT9dc,2881
228
+ mcp_proxy_adapter/schemas/openapi_schema.json,sha256=C3yLkwmDsvnLW9B5gnKKdBGl4zxkeU-rEmjTrNVsQU0,8405
229
+ mcp_proxy_adapter/schemas/roles.json,sha256=pgf_ZyqKyXbfGUxvobpiLiSJz9zzxrMuoVWEkEpz3N8,764
230
+ mcp_proxy_adapter/schemas/roles_schema.json,sha256=deHgI7L6GwfBXacOlNtDgDJelDThppClC3Ti4Eh8rJY,5659
231
+ mcp_proxy_adapter-6.9.29.dist-info/METADATA,sha256=XE24Hj_N-HQPdN2JdDbbkmzzJeZEXz_3H4DzhCgUjyg,8570
232
+ mcp_proxy_adapter-6.9.29.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
233
+ mcp_proxy_adapter-6.9.29.dist-info/entry_points.txt,sha256=9nRLPijE8MJY-OmY0VnSvOH8VzGCUzVwOZT6ZJKMQYA,563
234
+ mcp_proxy_adapter-6.9.29.dist-info/top_level.txt,sha256=JZT7vPLBYrtroX-ij68JBhJYbjDdghcV-DFySRy-Nnw,18
235
+ mcp_proxy_adapter-6.9.29.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  [console_scripts]
2
- mcp-proxy-adapter = mcp_proxy_adapter.__main__:main
2
+ mcp-proxy-adapter = mcp_proxy_adapter.cli.main:main
3
3
 
4
4
  [gui_scripts]
5
5
  mcp-proxy-adapter-gui = mcp_proxy_adapter.examples.gui:main