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,85 @@
1
+ """
2
+ Queue Server Example for MCP Proxy Adapter.
3
+
4
+ This example demonstrates how to run an MCP server with queue integration
5
+ for managing background jobs.
6
+
7
+ Author: Vasiliy Zdanovskiy
8
+ email: vasilyvz@gmail.com
9
+ """
10
+
11
+ import asyncio
12
+ from hypercorn.asyncio import serve
13
+ from hypercorn.config import Config as HyperConfig
14
+ from mcp_proxy_adapter.api.app import create_app
15
+ from mcp_proxy_adapter.commands.command_registry import registry
16
+ from mcp_proxy_adapter.commands.queue_commands import (
17
+ QueueAddJobCommand,
18
+ QueueStartJobCommand,
19
+ QueueStopJobCommand,
20
+ QueueDeleteJobCommand,
21
+ QueueGetJobStatusCommand,
22
+ QueueListJobsCommand,
23
+ QueueHealthCommand,
24
+ )
25
+ from mcp_proxy_adapter.integrations.queuemgr_integration import (
26
+ init_global_queue_manager,
27
+ shutdown_global_queue_manager,
28
+ )
29
+
30
+
31
+ async def setup_queue_commands():
32
+ """Setup queue management commands."""
33
+ print("šŸ”§ Setting up queue management commands...")
34
+
35
+ # Register queue commands
36
+ registry.register(QueueAddJobCommand())
37
+ registry.register(QueueStartJobCommand())
38
+ registry.register(QueueStopJobCommand())
39
+ registry.register(QueueDeleteJobCommand())
40
+ registry.register(QueueGetJobStatusCommand())
41
+ registry.register(QueueListJobsCommand())
42
+ registry.register(QueueHealthCommand())
43
+
44
+ print("āœ… Queue commands registered")
45
+
46
+
47
+ def create_queue_server_app() -> any:
48
+ """Create MCP server application with queue integration."""
49
+ app = create_app()
50
+
51
+ @app.on_event("startup")
52
+ async def _on_startup() -> None:
53
+ await init_global_queue_manager()
54
+ await setup_queue_commands()
55
+
56
+ @app.on_event("shutdown")
57
+ async def _on_shutdown() -> None:
58
+ await shutdown_global_queue_manager()
59
+
60
+ return app
61
+
62
+
63
+ async def main():
64
+ """Main function to run the queue server with Hypercorn."""
65
+ print("šŸš€ Starting MCP Proxy Adapter Queue Server")
66
+ print("=" * 50)
67
+
68
+ app = create_queue_server_app()
69
+
70
+ hc = HyperConfig()
71
+ hc.bind = ["0.0.0.0:8000"]
72
+ hc.loglevel = "info"
73
+
74
+ print("āœ… MCP Queue Server will start at http://localhost:8000")
75
+ print("šŸ“ Example usage:")
76
+ print(" curl -X POST http://localhost:8000/api/jsonrpc \\")
77
+ print(" -H 'Content-Type: application/json' \\")
78
+ print(" -d '{\"jsonrpc\": \"2.0\", \"method\": \"queue_health\", \"params\": {}, \"id\": 1}'")
79
+ print()
80
+
81
+ await serve(app, hc)
82
+
83
+
84
+ if __name__ == "__main__":
85
+ asyncio.run(main())
@@ -0,0 +1,173 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Simple Queue Server for MCP Proxy Adapter.
4
+
5
+ This example demonstrates how to run an MCP server with queue integration
6
+ using a minimal configuration.
7
+
8
+ Author: Vasiliy Zdanovskiy
9
+ email: vasilyvz@gmail.com
10
+ """
11
+
12
+ import asyncio
13
+ import uvicorn
14
+ from mcp_proxy_adapter.api.app import create_app
15
+ from mcp_proxy_adapter.commands.command_registry import registry
16
+ from mcp_proxy_adapter.commands.queue_commands import (
17
+ QueueAddJobCommand,
18
+ QueueStartJobCommand,
19
+ QueueStopJobCommand,
20
+ QueueDeleteJobCommand,
21
+ QueueGetJobStatusCommand,
22
+ QueueListJobsCommand,
23
+ QueueHealthCommand,
24
+ )
25
+
26
+
27
+ def setup_queue_commands():
28
+ """Setup queue management commands."""
29
+ print("šŸ”§ Setting up queue management commands...")
30
+
31
+ # Register queue commands
32
+ registry.register_custom(QueueAddJobCommand())
33
+ registry.register_custom(QueueStartJobCommand())
34
+ registry.register_custom(QueueStopJobCommand())
35
+ registry.register_custom(QueueDeleteJobCommand())
36
+ registry.register_custom(QueueGetJobStatusCommand())
37
+ registry.register_custom(QueueListJobsCommand())
38
+ registry.register_custom(QueueHealthCommand())
39
+
40
+ print("āœ… Queue commands registered")
41
+
42
+
43
+ def create_queue_server_app():
44
+ """Create MCP server application with queue integration."""
45
+ # Create minimal config
46
+ config = {
47
+ "uuid": "123e4567-e89b-42d3-8a56-426614174000",
48
+ "server": {
49
+ "host": "172.28.0.1",
50
+ "port": 8000,
51
+ "protocol": "http",
52
+ "debug": False,
53
+ "log_level": "INFO"
54
+ },
55
+ "logging": {
56
+ "level": "INFO",
57
+ "file": None,
58
+ "log_dir": "./logs",
59
+ "log_file": "mcp_proxy_adapter.log",
60
+ "error_log_file": "mcp_proxy_adapter_error.log",
61
+ "access_log_file": "mcp_proxy_adapter_access.log",
62
+ "max_file_size": "10MB",
63
+ "backup_count": 5,
64
+ "format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s",
65
+ "date_format": "%Y-%m-%d %H:%M:%S",
66
+ "console_output": True,
67
+ "file_output": True
68
+ },
69
+ "commands": {
70
+ "auto_discovery": True,
71
+ "commands_directory": "./commands",
72
+ "catalog_directory": "./catalog",
73
+ "plugin_servers": [],
74
+ "auto_install_dependencies": True,
75
+ "enabled_commands": ["health", "echo", "list", "help"],
76
+ "disabled_commands": [],
77
+ "custom_commands_path": "./commands"
78
+ },
79
+ "transport": {
80
+ "type": "http",
81
+ "port": 8000
82
+ },
83
+ "ssl": {
84
+ "enabled": False
85
+ },
86
+ "proxy_registration": {
87
+ "enabled": True,
88
+ "proxy_url": "https://172.28.0.4:3004",
89
+ "server_id": "mcp_queue_server",
90
+ "server_name": "MCP Queue Server",
91
+ "description": "Queue management server with mTLS",
92
+ "version": "6.9.28",
93
+ "protocol": "mtls",
94
+ "ssl": {
95
+ "enabled": True,
96
+ "verify_ssl": False,
97
+ "verify_hostname": False,
98
+ "verify_mode": "CERT_REQUIRED",
99
+ "ca_cert": "./mtls_certificates/ca/ca.crt",
100
+ "cert_file": "./mtls_certificates/client/test-client.crt",
101
+ "key_file": "./mtls_certificates/client/test-client.key"
102
+ },
103
+ "certificate": {
104
+ "cert_file": "./mtls_certificates/client/test-client.crt",
105
+ "key_file": "./mtls_certificates/client/test-client.key"
106
+ },
107
+ "registration_timeout": 30,
108
+ "retry_attempts": 3,
109
+ "retry_delay": 5,
110
+ "auto_register_on_startup": True,
111
+ "auto_unregister_on_shutdown": True,
112
+ "heartbeat": {
113
+ "enabled": True,
114
+ "interval": 30,
115
+ "timeout": 10,
116
+ "retry_attempts": 3,
117
+ "retry_delay": 5,
118
+ "url": "/heartbeat"
119
+ }
120
+ },
121
+ "debug": {
122
+ "enabled": False,
123
+ "level": "WARNING"
124
+ },
125
+ "security": {
126
+ "enabled": False
127
+ },
128
+ "roles": {
129
+ "enabled": False
130
+ }
131
+ }
132
+
133
+ # Register commands before creating the app
134
+ setup_queue_commands()
135
+
136
+ app = create_app(app_config=config)
137
+
138
+ @app.on_event("startup")
139
+
140
+ @app.on_event("shutdown")
141
+
142
+ return app
143
+
144
+
145
+ async def main():
146
+ """Main function to run the queue server."""
147
+ print("šŸš€ Starting MCP Proxy Adapter Queue Server")
148
+ print("=" * 50)
149
+
150
+ # Create the app
151
+ app = create_queue_server_app()
152
+
153
+ # Run the server
154
+ config = uvicorn.Config(
155
+ app=app,
156
+ host="0.0.0.0",
157
+ port=8000,
158
+ log_level="info"
159
+ )
160
+ server = uvicorn.Server(config)
161
+
162
+ print("āœ… MCP Queue Server started at http://localhost:8000")
163
+ print("šŸ“ Example usage:")
164
+ print(" curl -X POST http://localhost:8000/api/jsonrpc \\")
165
+ print(" -H 'Content-Type: application/json' \\")
166
+ print(" -d '{\"jsonrpc\": \"2.0\", \"method\": \"queue_health\", \"params\": {}, \"id\": 1}'")
167
+ print()
168
+
169
+ await server.serve()
170
+
171
+
172
+ if __name__ == "__main__":
173
+ asyncio.run(main())
@@ -0,0 +1,208 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Required Certificates Configuration
4
+ Defines all certificates needed for testing different server configurations.
5
+
6
+ Author: Vasiliy Zdanovskiy
7
+ email: vasilyvz@gmail.com
8
+ """
9
+
10
+
11
+ # Base paths
12
+ CERTS_DIR = Path("certs")
13
+ KEYS_DIR = Path("keys")
14
+
15
+ # Required certificates for different server configurations
16
+ REQUIRED_CERTIFICATES = {
17
+ # CA Certificate (required for all SSL/mTLS configurations)
18
+ "ca_cert": {
19
+ "type": "ca",
20
+ "common_name": "MCP Proxy Adapter Test CA",
21
+ "organization": "Test Organization",
22
+ "country": "US",
23
+ "state": "Test State",
24
+ "city": "Test City",
25
+ "validity_days": 3650, # 10 years
26
+ "output_cert": CERTS_DIR / "ca_cert.pem",
27
+ "output_key": KEYS_DIR / "ca_key.pem",
28
+ "required_for": ["https", "mtls", "proxy_registration"]
29
+ },
30
+
31
+ # Server Certificate for HTTPS configurations
32
+ "server_cert": {
33
+ "type": "server",
34
+ "common_name": "localhost",
35
+ "organization": "Test Organization",
36
+ "country": "US",
37
+ "state": "Test State",
38
+ "city": "Test City",
39
+ "validity_days": 365,
40
+ "san": ["localhost", "127.0.0.1", "mcp-proxy-adapter-test.local"],
41
+ "ca_cert_path": CERTS_DIR / "ca_cert.pem",
42
+ "ca_key_path": KEYS_DIR / "ca_key.pem",
43
+ "output_cert": CERTS_DIR / "server_cert.pem",
44
+ "output_key": KEYS_DIR / "server_key.pem",
45
+ "required_for": ["https", "mtls"]
46
+ },
47
+
48
+ # Admin Client Certificate
49
+ "admin_cert": {
50
+ "type": "client",
51
+ "common_name": "admin-client",
52
+ "organization": "Test Organization",
53
+ "country": "US",
54
+ "state": "Test State",
55
+ "city": "Test City",
56
+ "validity_days": 365,
57
+ "roles": ["admin"],
58
+ "permissions": ["*"],
59
+ "ca_cert_path": CERTS_DIR / "ca_cert.pem",
60
+ "ca_key_path": KEYS_DIR / "ca_key.pem",
61
+ "output_cert": CERTS_DIR / "admin_cert.pem",
62
+ "output_key": KEYS_DIR / "admin_key.pem",
63
+ "required_for": ["mtls", "client_auth"]
64
+ },
65
+
66
+ # User Client Certificate
67
+ "user_cert": {
68
+ "type": "client",
69
+ "common_name": "user-client",
70
+ "organization": "Test Organization",
71
+ "country": "US",
72
+ "state": "Test State",
73
+ "city": "Test City",
74
+ "validity_days": 365,
75
+ "roles": ["user"],
76
+ "permissions": ["read", "write"],
77
+ "ca_cert_path": CERTS_DIR / "ca_cert.pem",
78
+ "ca_key_path": KEYS_DIR / "ca_key.pem",
79
+ "output_cert": CERTS_DIR / "user_cert.pem",
80
+ "output_key": KEYS_DIR / "user_key.pem",
81
+ "required_for": ["mtls", "client_auth"]
82
+ },
83
+
84
+ # Proxy Certificate for proxy registration
85
+ "proxy_cert": {
86
+ "type": "server",
87
+ "common_name": "proxy-server",
88
+ "organization": "Test Organization",
89
+ "country": "US",
90
+ "state": "Test State",
91
+ "city": "Test City",
92
+ "validity_days": 365,
93
+ "san": ["localhost", "127.0.0.1"],
94
+ "ca_cert_path": CERTS_DIR / "ca_cert.pem",
95
+ "ca_key_path": KEYS_DIR / "ca_key.pem",
96
+ "output_cert": CERTS_DIR / "proxy_cert.pem",
97
+ "output_key": KEYS_DIR / "proxy_key.pem",
98
+ "required_for": ["proxy_registration"]
99
+ }
100
+ }
101
+
102
+ # Certificate aliases for different configurations
103
+ CERTIFICATE_ALIASES = {
104
+ # HTTPS configurations
105
+ "https_server_cert": "server_cert",
106
+ "https_server_key": "server_cert",
107
+
108
+ # mTLS configurations
109
+ "mtls_server_cert": "server_cert",
110
+ "mtls_server_key": "server_cert",
111
+ "mtls_ca_cert": "ca_cert",
112
+
113
+ # Proxy registration
114
+ "proxy_server_cert": "proxy_cert",
115
+ "proxy_server_key": "proxy_cert",
116
+
117
+ # Legacy names for compatibility
118
+ "localhost_server_cert": "server_cert",
119
+ "mcp_proxy_adapter_server_cert": "server_cert",
120
+ "mcp_proxy_adapter_ca_cert": "ca_cert"
121
+ }
122
+
123
+ # Configuration file mappings
124
+ CONFIG_CERTIFICATE_MAPPINGS = {
125
+ "https_simple.json": {
126
+ "ssl.cert_file": "certs/server_cert.pem",
127
+ "ssl.key_file": "keys/server_key.pem",
128
+ "ssl.ca_cert": "certs/ca_cert.pem"
129
+ },
130
+ "https_auth.json": {
131
+ "ssl.cert_file": "certs/server_cert.pem",
132
+ "ssl.key_file": "keys/server_key.pem",
133
+ "ssl.ca_cert": "certs/ca_cert.pem"
134
+ },
135
+ "https_token.json": {
136
+ "ssl.cert_file": "certs/server_cert.pem",
137
+ "ssl.key_file": "keys/server_key.pem",
138
+ "ssl.ca_cert": "certs/ca_cert.pem"
139
+ },
140
+ "mtls_simple.json": {
141
+ "ssl.cert_file": "certs/server_cert.pem",
142
+ "ssl.key_file": "keys/server_key.pem",
143
+ "ssl.ca_cert": "certs/ca_cert.pem",
144
+ "ssl.client_cert_file": "certs/admin_cert.pem",
145
+ "ssl.client_key_file": "keys/admin_key.pem"
146
+ },
147
+ "mtls_no_roles.json": {
148
+ "ssl.cert_file": "certs/server_cert.pem",
149
+ "ssl.key_file": "keys/server_key.pem",
150
+ "ssl.ca_cert": "certs/ca_cert.pem"
151
+ },
152
+ "mtls_with_roles.json": {
153
+ "ssl.cert_file": "certs/server_cert.pem",
154
+ "ssl.key_file": "keys/server_key.pem",
155
+ "ssl.ca_cert": "certs/ca_cert.pem",
156
+ "ssl.client_cert_file": "certs/admin_cert.pem",
157
+ "ssl.client_key_file": "keys/admin_key.pem"
158
+ },
159
+ "mtls_with_proxy.json": {
160
+ "ssl.cert_file": "certs/server_cert.pem",
161
+ "ssl.key_file": "keys/server_key.pem",
162
+ "ssl.ca_cert": "certs/ca_cert.pem",
163
+ "ssl.client_cert_file": "certs/admin_cert.pem",
164
+ "ssl.client_key_file": "keys/admin_key.pem",
165
+ "proxy_registration.ssl.ca_cert": "certs/ca_cert.pem"
166
+ }
167
+ }
168
+
169
+ def get_required_certificates_for_config(config_name: str) -> List[str]:
170
+ """Get list of required certificates for a specific configuration."""
171
+ if config_name not in CONFIG_CERTIFICATE_MAPPINGS:
172
+ return []
173
+
174
+ required = []
175
+ mappings = CONFIG_CERTIFICATE_MAPPINGS[config_name]
176
+
177
+ for cert_path in mappings.values():
178
+ if "server_cert.pem" in cert_path:
179
+ required.append("server_cert")
180
+ elif "ca_cert.pem" in cert_path:
181
+ required.append("ca_cert")
182
+ elif "admin_cert.pem" in cert_path:
183
+ required.append("admin_cert")
184
+ elif "proxy_cert.pem" in cert_path:
185
+ required.append("proxy_cert")
186
+
187
+ return list(set(required))
188
+
189
+ def get_all_required_certificates() -> List[str]:
190
+ """Get list of all required certificates."""
191
+ all_certs = set()
192
+ for config_name in CONFIG_CERTIFICATE_MAPPINGS.keys():
193
+ all_certs.update(get_required_certificates_for_config(config_name))
194
+ return list(all_certs)
195
+
196
+ if __name__ == "__main__":
197
+ print("šŸ“‹ Required Certificates Configuration")
198
+ print("=" * 50)
199
+
200
+ all_required = get_all_required_certificates()
201
+ print(f"Total certificates needed: {len(all_required)}")
202
+ print(f"Certificates: {', '.join(all_required)}")
203
+
204
+ print(f"\nšŸ“ Certificate files to create:")
205
+ for cert_name in all_required:
206
+ cert_info = REQUIRED_CERTIFICATES[cert_name]
207
+ print(f" {cert_info['output_cert']}")
208
+ print(f" {cert_info['output_key']}")
@@ -0,0 +1,77 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Example Runner Script
4
+ This script provides a simple way to run the examples.
5
+ Author: Vasiliy Zdanovskiy
6
+ email: vasilyvz@gmail.com
7
+ """
8
+ import sys
9
+ import subprocess
10
+ import argparse
11
+ from pathlib import Path
12
+
13
+
14
+ def run_basic_example(config_name: str, port: int = None):
15
+ """Run basic framework example."""
16
+ config_path = (
17
+ Path(__file__).parent / "basic_framework" / "configs" / f"{config_name}.json"
18
+ )
19
+ main_script = Path(__file__).parent / "basic_framework" / "main.py"
20
+ if not config_path.exists():
21
+ print(f"āŒ Configuration file not found: {config_path}")
22
+ return False
23
+ cmd = [sys.executable, str(main_script), "--config", str(config_path)]
24
+ if port:
25
+ cmd.extend(["--port", str(port)])
26
+ print(f"šŸš€ Running basic framework example with {config_name} configuration...")
27
+ return subprocess.run(cmd).returncode == 0
28
+
29
+
30
+ def run_full_example(config_name: str, port: int = None):
31
+ """Run full application example."""
32
+ config_path = (
33
+ Path(__file__).parent / "full_application" / "configs" / f"{config_name}.json"
34
+ )
35
+ main_script = Path(__file__).parent / "full_application" / "main.py"
36
+ if not config_path.exists():
37
+ print(f"āŒ Configuration file not found: {config_path}")
38
+ return False
39
+ cmd = [sys.executable, str(main_script), "--config", str(config_path)]
40
+ if port:
41
+ cmd.extend(["--port", str(port)])
42
+ print(f"šŸš€ Running full application example with {config_name} configuration...")
43
+ return subprocess.run(cmd).returncode == 0
44
+
45
+
46
+ def main():
47
+ """Main function."""
48
+ parser = argparse.ArgumentParser(description="Run MCP Proxy Adapter Examples")
49
+ parser.add_argument("example", choices=["basic", "full"], help="Example type")
50
+ parser.add_argument(
51
+ "config", help="Configuration name (e.g., http_simple, https_auth)"
52
+ )
53
+ parser.add_argument("--port", type=int, help="Override port")
54
+ args = parser.parse_args()
55
+ # Available configurations
56
+ configs = [
57
+ "http_simple",
58
+ "https_simple",
59
+ "http_auth",
60
+ "https_auth",
61
+ "mtls_no_roles",
62
+ "mtls_with_roles",
63
+ ]
64
+ if args.config not in configs:
65
+ print(f"āŒ Unknown configuration: {args.config}")
66
+ print(f"Available configurations: {', '.join(configs)}")
67
+ return 1
68
+ # Run the appropriate example
69
+ if args.example == "basic":
70
+ success = run_basic_example(args.config, args.port)
71
+ else:
72
+ success = run_full_example(args.config, args.port)
73
+ return 0 if success else 1
74
+
75
+
76
+ if __name__ == "__main__":
77
+ sys.exit(main())