mcp-proxy-adapter 6.0.0__py3-none-any.whl → 6.1.1__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.
Files changed (264) hide show
  1. mcp_proxy_adapter/api/app.py +174 -80
  2. mcp_proxy_adapter/api/handlers.py +16 -5
  3. mcp_proxy_adapter/api/middleware/__init__.py +9 -4
  4. mcp_proxy_adapter/api/middleware/command_permission_middleware.py +148 -0
  5. mcp_proxy_adapter/api/middleware/factory.py +36 -12
  6. mcp_proxy_adapter/api/middleware/protocol_middleware.py +32 -13
  7. mcp_proxy_adapter/api/middleware/unified_security.py +160 -0
  8. mcp_proxy_adapter/api/middleware/user_info_middleware.py +83 -0
  9. mcp_proxy_adapter/commands/__init__.py +7 -1
  10. mcp_proxy_adapter/commands/base.py +7 -4
  11. mcp_proxy_adapter/commands/builtin_commands.py +8 -2
  12. mcp_proxy_adapter/commands/command_registry.py +8 -0
  13. mcp_proxy_adapter/commands/echo_command.py +81 -0
  14. mcp_proxy_adapter/commands/help_command.py +21 -14
  15. mcp_proxy_adapter/commands/proxy_registration_command.py +326 -185
  16. mcp_proxy_adapter/commands/role_test_command.py +141 -0
  17. mcp_proxy_adapter/commands/security_command.py +488 -0
  18. mcp_proxy_adapter/commands/ssl_setup_command.py +2 -2
  19. mcp_proxy_adapter/commands/token_management_command.py +1 -1
  20. mcp_proxy_adapter/config.py +81 -21
  21. mcp_proxy_adapter/core/app_factory.py +326 -0
  22. mcp_proxy_adapter/core/client_security.py +384 -0
  23. mcp_proxy_adapter/core/logging.py +8 -3
  24. mcp_proxy_adapter/core/mtls_asgi.py +156 -0
  25. mcp_proxy_adapter/core/mtls_asgi_app.py +187 -0
  26. mcp_proxy_adapter/core/protocol_manager.py +139 -8
  27. mcp_proxy_adapter/core/proxy_client.py +602 -0
  28. mcp_proxy_adapter/core/proxy_registration.py +299 -47
  29. mcp_proxy_adapter/core/security_adapter.py +12 -15
  30. mcp_proxy_adapter/core/security_integration.py +285 -0
  31. mcp_proxy_adapter/core/server_adapter.py +345 -0
  32. mcp_proxy_adapter/core/server_engine.py +364 -0
  33. mcp_proxy_adapter/core/unified_config_adapter.py +579 -0
  34. mcp_proxy_adapter/docs/EN/TROUBLESHOOTING.md +285 -0
  35. mcp_proxy_adapter/docs/RU/TROUBLESHOOTING.md +285 -0
  36. mcp_proxy_adapter/examples/README.md +230 -97
  37. mcp_proxy_adapter/examples/README_EN.md +258 -0
  38. mcp_proxy_adapter/examples/SECURITY_TESTING.md +455 -0
  39. mcp_proxy_adapter/examples/basic_framework/configs/http_auth.json +37 -0
  40. mcp_proxy_adapter/examples/basic_framework/configs/http_simple.json +23 -0
  41. mcp_proxy_adapter/examples/basic_framework/configs/https_auth.json +43 -0
  42. mcp_proxy_adapter/examples/basic_framework/configs/https_no_protocol_middleware.json +36 -0
  43. mcp_proxy_adapter/examples/basic_framework/configs/https_simple.json +29 -0
  44. mcp_proxy_adapter/examples/basic_framework/configs/mtls_no_protocol_middleware.json +34 -0
  45. mcp_proxy_adapter/examples/basic_framework/configs/mtls_no_roles.json +39 -0
  46. mcp_proxy_adapter/examples/basic_framework/configs/mtls_simple.json +35 -0
  47. mcp_proxy_adapter/examples/basic_framework/configs/mtls_with_roles.json +45 -0
  48. mcp_proxy_adapter/examples/basic_framework/main.py +63 -0
  49. mcp_proxy_adapter/examples/basic_framework/roles.json +21 -0
  50. mcp_proxy_adapter/examples/cert_config.json +9 -0
  51. mcp_proxy_adapter/examples/certs/admin.crt +32 -0
  52. mcp_proxy_adapter/examples/certs/admin.key +52 -0
  53. mcp_proxy_adapter/examples/certs/admin_cert.pem +21 -0
  54. mcp_proxy_adapter/examples/certs/admin_key.pem +28 -0
  55. mcp_proxy_adapter/examples/certs/ca_cert.pem +23 -0
  56. mcp_proxy_adapter/examples/certs/ca_cert.srl +1 -0
  57. mcp_proxy_adapter/examples/certs/ca_key.pem +28 -0
  58. mcp_proxy_adapter/examples/certs/cert_config.json +9 -0
  59. mcp_proxy_adapter/examples/certs/client.crt +32 -0
  60. mcp_proxy_adapter/examples/certs/client.key +52 -0
  61. mcp_proxy_adapter/examples/certs/client_admin.crt +32 -0
  62. mcp_proxy_adapter/examples/certs/client_admin.key +52 -0
  63. mcp_proxy_adapter/examples/certs/client_user.crt +32 -0
  64. mcp_proxy_adapter/examples/certs/client_user.key +52 -0
  65. mcp_proxy_adapter/examples/certs/guest_cert.pem +21 -0
  66. mcp_proxy_adapter/examples/certs/guest_key.pem +28 -0
  67. mcp_proxy_adapter/examples/certs/mcp_proxy_adapter_ca_ca.crt +23 -0
  68. mcp_proxy_adapter/examples/certs/proxy_cert.pem +21 -0
  69. mcp_proxy_adapter/examples/certs/proxy_key.pem +28 -0
  70. mcp_proxy_adapter/examples/certs/readonly.crt +32 -0
  71. mcp_proxy_adapter/examples/certs/readonly.key +52 -0
  72. mcp_proxy_adapter/examples/certs/readonly_cert.pem +21 -0
  73. mcp_proxy_adapter/examples/certs/readonly_key.pem +28 -0
  74. mcp_proxy_adapter/examples/certs/server.crt +32 -0
  75. mcp_proxy_adapter/examples/certs/server.key +52 -0
  76. mcp_proxy_adapter/examples/certs/server_cert.pem +32 -0
  77. mcp_proxy_adapter/examples/certs/server_key.pem +52 -0
  78. mcp_proxy_adapter/examples/certs/test_ca_ca.crt +20 -0
  79. mcp_proxy_adapter/examples/certs/user.crt +32 -0
  80. mcp_proxy_adapter/examples/certs/user.key +52 -0
  81. mcp_proxy_adapter/examples/certs/user_cert.pem +21 -0
  82. mcp_proxy_adapter/examples/certs/user_key.pem +28 -0
  83. mcp_proxy_adapter/examples/client_configs/api_key_client.json +13 -0
  84. mcp_proxy_adapter/examples/client_configs/basic_auth_client.json +13 -0
  85. mcp_proxy_adapter/examples/client_configs/certificate_client.json +22 -0
  86. mcp_proxy_adapter/examples/client_configs/jwt_client.json +15 -0
  87. mcp_proxy_adapter/examples/client_configs/no_auth_client.json +9 -0
  88. mcp_proxy_adapter/examples/commands/__init__.py +1 -0
  89. mcp_proxy_adapter/examples/create_certificates_simple.py +307 -0
  90. mcp_proxy_adapter/examples/debug_request_state.py +144 -0
  91. mcp_proxy_adapter/examples/debug_role_chain.py +205 -0
  92. mcp_proxy_adapter/examples/demo_client.py +341 -0
  93. mcp_proxy_adapter/examples/full_application/commands/custom_echo_command.py +99 -0
  94. mcp_proxy_adapter/examples/full_application/commands/dynamic_calculator_command.py +106 -0
  95. mcp_proxy_adapter/examples/full_application/configs/http_auth.json +37 -0
  96. mcp_proxy_adapter/examples/full_application/configs/http_simple.json +23 -0
  97. mcp_proxy_adapter/examples/full_application/configs/https_auth.json +39 -0
  98. mcp_proxy_adapter/examples/full_application/configs/https_simple.json +25 -0
  99. mcp_proxy_adapter/examples/full_application/configs/mtls_no_roles.json +39 -0
  100. mcp_proxy_adapter/examples/full_application/configs/mtls_with_roles.json +45 -0
  101. mcp_proxy_adapter/examples/full_application/hooks/application_hooks.py +97 -0
  102. mcp_proxy_adapter/examples/full_application/hooks/builtin_command_hooks.py +95 -0
  103. mcp_proxy_adapter/examples/full_application/main.py +138 -0
  104. mcp_proxy_adapter/examples/full_application/roles.json +21 -0
  105. mcp_proxy_adapter/examples/generate_all_certificates.py +429 -0
  106. mcp_proxy_adapter/examples/generate_certificates.py +121 -0
  107. mcp_proxy_adapter/examples/keys/ca_key.pem +28 -0
  108. mcp_proxy_adapter/examples/keys/mcp_proxy_adapter_ca_ca.key +28 -0
  109. mcp_proxy_adapter/examples/keys/test_ca_ca.key +28 -0
  110. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter.log +220 -0
  111. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter.log.1 +1 -0
  112. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter.log.2 +1 -0
  113. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter.log.3 +1 -0
  114. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter.log.4 +1 -0
  115. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter.log.5 +1 -0
  116. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter_access.log +220 -0
  117. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter_access.log.1 +1 -0
  118. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter_access.log.2 +1 -0
  119. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter_access.log.3 +1 -0
  120. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter_access.log.4 +1 -0
  121. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter_access.log.5 +1 -0
  122. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter_error.log +2 -0
  123. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter_error.log.1 +1 -0
  124. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter_error.log.2 +1 -0
  125. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter_error.log.3 +1 -0
  126. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter_error.log.4 +1 -0
  127. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter_error.log.5 +1 -0
  128. mcp_proxy_adapter/examples/proxy_registration_example.py +401 -0
  129. mcp_proxy_adapter/examples/roles.json +38 -0
  130. mcp_proxy_adapter/examples/run_example.py +81 -0
  131. mcp_proxy_adapter/examples/run_security_tests.py +326 -0
  132. mcp_proxy_adapter/examples/run_security_tests_fixed.py +300 -0
  133. mcp_proxy_adapter/examples/security_test_client.py +743 -0
  134. mcp_proxy_adapter/examples/server_configs/config_basic_http.json +204 -0
  135. mcp_proxy_adapter/examples/server_configs/config_http_token.json +238 -0
  136. mcp_proxy_adapter/examples/server_configs/config_https.json +215 -0
  137. mcp_proxy_adapter/examples/server_configs/config_https_token.json +231 -0
  138. mcp_proxy_adapter/examples/server_configs/config_mtls.json +215 -0
  139. mcp_proxy_adapter/examples/server_configs/config_proxy_registration.json +250 -0
  140. mcp_proxy_adapter/examples/server_configs/config_simple.json +46 -0
  141. mcp_proxy_adapter/examples/server_configs/roles.json +38 -0
  142. mcp_proxy_adapter/examples/test_config_generator.py +110 -0
  143. mcp_proxy_adapter/examples/test_examples.py +344 -0
  144. mcp_proxy_adapter/examples/universal_client.py +628 -0
  145. mcp_proxy_adapter/main.py +21 -10
  146. mcp_proxy_adapter/utils/config_generator.py +727 -0
  147. mcp_proxy_adapter/version.py +5 -2
  148. mcp_proxy_adapter-6.1.1.dist-info/METADATA +205 -0
  149. mcp_proxy_adapter-6.1.1.dist-info/RECORD +197 -0
  150. mcp_proxy_adapter-6.1.1.dist-info/entry_points.txt +2 -0
  151. {mcp_proxy_adapter-6.0.0.dist-info → mcp_proxy_adapter-6.1.1.dist-info}/licenses/LICENSE +2 -2
  152. mcp_proxy_adapter/api/middleware/auth.py +0 -146
  153. mcp_proxy_adapter/api/middleware/auth_adapter.py +0 -235
  154. mcp_proxy_adapter/api/middleware/mtls_adapter.py +0 -305
  155. mcp_proxy_adapter/api/middleware/mtls_middleware.py +0 -296
  156. mcp_proxy_adapter/api/middleware/rate_limit.py +0 -152
  157. mcp_proxy_adapter/api/middleware/rate_limit_adapter.py +0 -241
  158. mcp_proxy_adapter/api/middleware/roles_adapter.py +0 -365
  159. mcp_proxy_adapter/api/middleware/roles_middleware.py +0 -381
  160. mcp_proxy_adapter/api/middleware/security.py +0 -376
  161. mcp_proxy_adapter/api/middleware/token_auth_middleware.py +0 -261
  162. mcp_proxy_adapter/examples/__init__.py +0 -7
  163. mcp_proxy_adapter/examples/basic_server/README.md +0 -60
  164. mcp_proxy_adapter/examples/basic_server/__init__.py +0 -7
  165. mcp_proxy_adapter/examples/basic_server/basic_custom_settings.json +0 -39
  166. mcp_proxy_adapter/examples/basic_server/config.json +0 -70
  167. mcp_proxy_adapter/examples/basic_server/config_all_protocols.json +0 -54
  168. mcp_proxy_adapter/examples/basic_server/config_http.json +0 -70
  169. mcp_proxy_adapter/examples/basic_server/config_http_only.json +0 -52
  170. mcp_proxy_adapter/examples/basic_server/config_https.json +0 -58
  171. mcp_proxy_adapter/examples/basic_server/config_mtls.json +0 -58
  172. mcp_proxy_adapter/examples/basic_server/config_ssl.json +0 -46
  173. mcp_proxy_adapter/examples/basic_server/custom_settings_example.py +0 -238
  174. mcp_proxy_adapter/examples/basic_server/server.py +0 -114
  175. mcp_proxy_adapter/examples/custom_commands/README.md +0 -127
  176. mcp_proxy_adapter/examples/custom_commands/__init__.py +0 -27
  177. mcp_proxy_adapter/examples/custom_commands/advanced_hooks.py +0 -566
  178. mcp_proxy_adapter/examples/custom_commands/auto_commands/__init__.py +0 -6
  179. mcp_proxy_adapter/examples/custom_commands/auto_commands/auto_echo_command.py +0 -103
  180. mcp_proxy_adapter/examples/custom_commands/auto_commands/auto_info_command.py +0 -111
  181. mcp_proxy_adapter/examples/custom_commands/auto_commands/test_command.py +0 -105
  182. mcp_proxy_adapter/examples/custom_commands/catalog/commands/test_command.py +0 -129
  183. mcp_proxy_adapter/examples/custom_commands/config.json +0 -118
  184. mcp_proxy_adapter/examples/custom_commands/config_all_protocols.json +0 -46
  185. mcp_proxy_adapter/examples/custom_commands/config_https_only.json +0 -46
  186. mcp_proxy_adapter/examples/custom_commands/config_https_transport.json +0 -33
  187. mcp_proxy_adapter/examples/custom_commands/config_mtls_only.json +0 -46
  188. mcp_proxy_adapter/examples/custom_commands/config_mtls_transport.json +0 -33
  189. mcp_proxy_adapter/examples/custom_commands/config_single_transport.json +0 -33
  190. mcp_proxy_adapter/examples/custom_commands/custom_health_command.py +0 -169
  191. mcp_proxy_adapter/examples/custom_commands/custom_help_command.py +0 -215
  192. mcp_proxy_adapter/examples/custom_commands/custom_openapi_generator.py +0 -76
  193. mcp_proxy_adapter/examples/custom_commands/custom_settings.json +0 -96
  194. mcp_proxy_adapter/examples/custom_commands/custom_settings_manager.py +0 -241
  195. mcp_proxy_adapter/examples/custom_commands/data_transform_command.py +0 -135
  196. mcp_proxy_adapter/examples/custom_commands/echo_command.py +0 -122
  197. mcp_proxy_adapter/examples/custom_commands/full_help_response.json +0 -1
  198. mcp_proxy_adapter/examples/custom_commands/generated_openapi.json +0 -629
  199. mcp_proxy_adapter/examples/custom_commands/get_openapi.py +0 -103
  200. mcp_proxy_adapter/examples/custom_commands/hooks.py +0 -230
  201. mcp_proxy_adapter/examples/custom_commands/intercept_command.py +0 -123
  202. mcp_proxy_adapter/examples/custom_commands/loadable_commands/test_ignored.py +0 -129
  203. mcp_proxy_adapter/examples/custom_commands/manual_echo_command.py +0 -103
  204. mcp_proxy_adapter/examples/custom_commands/proxy_connection_manager.py +0 -278
  205. mcp_proxy_adapter/examples/custom_commands/server.py +0 -252
  206. mcp_proxy_adapter/examples/custom_commands/simple_openapi_server.py +0 -75
  207. mcp_proxy_adapter/examples/custom_commands/start_server_with_proxy_manager.py +0 -299
  208. mcp_proxy_adapter/examples/custom_commands/start_server_with_registration.py +0 -278
  209. mcp_proxy_adapter/examples/custom_commands/test_hooks.py +0 -176
  210. mcp_proxy_adapter/examples/custom_commands/test_openapi.py +0 -27
  211. mcp_proxy_adapter/examples/custom_commands/test_registry.py +0 -23
  212. mcp_proxy_adapter/examples/custom_commands/test_simple.py +0 -19
  213. mcp_proxy_adapter/examples/custom_project_example/README.md +0 -103
  214. mcp_proxy_adapter/examples/custom_project_example/README_EN.md +0 -103
  215. mcp_proxy_adapter/examples/deployment/README.md +0 -49
  216. mcp_proxy_adapter/examples/deployment/__init__.py +0 -7
  217. mcp_proxy_adapter/examples/deployment/config.development.json +0 -8
  218. mcp_proxy_adapter/examples/deployment/config.json +0 -29
  219. mcp_proxy_adapter/examples/deployment/config.production.json +0 -12
  220. mcp_proxy_adapter/examples/deployment/config.staging.json +0 -11
  221. mcp_proxy_adapter/examples/deployment/docker-compose.yml +0 -31
  222. mcp_proxy_adapter/examples/deployment/run.sh +0 -43
  223. mcp_proxy_adapter/examples/deployment/run_docker.sh +0 -84
  224. mcp_proxy_adapter/examples/simple_custom_commands/README.md +0 -149
  225. mcp_proxy_adapter/examples/simple_custom_commands/README_EN.md +0 -149
  226. mcp_proxy_adapter/schemas/base_schema.json +0 -114
  227. mcp_proxy_adapter/schemas/openapi_schema.json +0 -314
  228. mcp_proxy_adapter/schemas/roles_schema.json +0 -162
  229. mcp_proxy_adapter/tests/__init__.py +0 -0
  230. mcp_proxy_adapter/tests/api/__init__.py +0 -3
  231. mcp_proxy_adapter/tests/api/test_cmd_endpoint.py +0 -115
  232. mcp_proxy_adapter/tests/api/test_custom_openapi.py +0 -617
  233. mcp_proxy_adapter/tests/api/test_handlers.py +0 -522
  234. mcp_proxy_adapter/tests/api/test_middleware.py +0 -340
  235. mcp_proxy_adapter/tests/api/test_schemas.py +0 -546
  236. mcp_proxy_adapter/tests/api/test_tool_integration.py +0 -531
  237. mcp_proxy_adapter/tests/commands/__init__.py +0 -3
  238. mcp_proxy_adapter/tests/commands/test_config_command.py +0 -211
  239. mcp_proxy_adapter/tests/commands/test_echo_command.py +0 -127
  240. mcp_proxy_adapter/tests/commands/test_help_command.py +0 -136
  241. mcp_proxy_adapter/tests/conftest.py +0 -131
  242. mcp_proxy_adapter/tests/functional/__init__.py +0 -3
  243. mcp_proxy_adapter/tests/functional/test_api.py +0 -253
  244. mcp_proxy_adapter/tests/integration/__init__.py +0 -3
  245. mcp_proxy_adapter/tests/integration/test_cmd_integration.py +0 -129
  246. mcp_proxy_adapter/tests/integration/test_integration.py +0 -255
  247. mcp_proxy_adapter/tests/performance/__init__.py +0 -3
  248. mcp_proxy_adapter/tests/performance/test_performance.py +0 -189
  249. mcp_proxy_adapter/tests/stubs/__init__.py +0 -10
  250. mcp_proxy_adapter/tests/stubs/echo_command.py +0 -104
  251. mcp_proxy_adapter/tests/test_api_endpoints.py +0 -271
  252. mcp_proxy_adapter/tests/test_api_handlers.py +0 -289
  253. mcp_proxy_adapter/tests/test_base_command.py +0 -123
  254. mcp_proxy_adapter/tests/test_batch_requests.py +0 -117
  255. mcp_proxy_adapter/tests/test_command_registry.py +0 -281
  256. mcp_proxy_adapter/tests/test_config.py +0 -127
  257. mcp_proxy_adapter/tests/test_utils.py +0 -65
  258. mcp_proxy_adapter/tests/unit/__init__.py +0 -3
  259. mcp_proxy_adapter/tests/unit/test_base_command.py +0 -436
  260. mcp_proxy_adapter/tests/unit/test_config.py +0 -270
  261. mcp_proxy_adapter-6.0.0.dist-info/METADATA +0 -201
  262. mcp_proxy_adapter-6.0.0.dist-info/RECORD +0 -179
  263. {mcp_proxy_adapter-6.0.0.dist-info → mcp_proxy_adapter-6.1.1.dist-info}/WHEEL +0 -0
  264. {mcp_proxy_adapter-6.0.0.dist-info → mcp_proxy_adapter-6.1.1.dist-info}/top_level.txt +0 -0
@@ -1,238 +0,0 @@
1
- """
2
- Custom Settings Example for Basic Server
3
-
4
- This example demonstrates how to use custom settings in a basic server.
5
- """
6
-
7
- import json
8
- import os
9
- from mcp_proxy_adapter.core.settings import (
10
- add_custom_settings,
11
- get_custom_setting_value,
12
- set_custom_setting_value,
13
- get_custom_settings
14
- )
15
- from mcp_proxy_adapter.core.logging import get_logger
16
-
17
-
18
- def setup_basic_custom_settings():
19
- """
20
- Setup basic custom settings for the basic server example.
21
-
22
- This demonstrates how to add custom settings to the framework
23
- and access them throughout the application.
24
- """
25
- logger = get_logger("basic_server_custom_settings")
26
-
27
- # Define basic custom settings
28
- basic_settings = {
29
- "application": {
30
- "name": "Basic MCP Proxy Server",
31
- "version": "1.0.0",
32
- "environment": "development"
33
- },
34
- "features": {
35
- "basic_logging": True,
36
- "simple_commands": True,
37
- "custom_settings_demo": True
38
- },
39
- "server_info": {
40
- "description": "Basic server with custom settings example",
41
- "author": "MCP Proxy Adapter Team",
42
- "contact": "support@example.com"
43
- },
44
- "demo_settings": {
45
- "welcome_message": "Welcome to Basic MCP Proxy Server!",
46
- "max_connections": 100,
47
- "timeout": 30,
48
- "debug_mode": True
49
- }
50
- }
51
-
52
- # Add settings to the framework
53
- add_custom_settings(basic_settings)
54
-
55
- logger.info("✅ Basic custom settings loaded")
56
- logger.info(f"📋 Application: {basic_settings['application']['name']} v{basic_settings['application']['version']}")
57
- logger.info(f"🔧 Features: {list(basic_settings['features'].keys())}")
58
-
59
- return basic_settings
60
-
61
-
62
- def demonstrate_custom_settings_usage():
63
- """
64
- Demonstrate how to use custom settings in the application.
65
- """
66
- logger = get_logger("basic_server_custom_settings")
67
-
68
- # Get specific settings
69
- app_name = get_custom_setting_value("application.name", "Unknown")
70
- app_version = get_custom_setting_value("application.version", "0.0.0")
71
- welcome_msg = get_custom_setting_value("demo_settings.welcome_message", "Hello!")
72
- max_connections = get_custom_setting_value("demo_settings.max_connections", 50)
73
-
74
- logger.info(f"🏷️ Application: {app_name} v{app_version}")
75
- logger.info(f"💬 Welcome Message: {welcome_msg}")
76
- logger.info(f"🔗 Max Connections: {max_connections}")
77
-
78
- # Check if features are enabled
79
- features = get_custom_setting_value("features", {})
80
- enabled_features = [name for name, enabled in features.items() if enabled]
81
-
82
- logger.info(f"✅ Enabled Features: {', '.join(enabled_features)}")
83
-
84
- # Set a new custom setting
85
- set_custom_setting_value("demo_settings.last_updated", "2025-08-08")
86
- logger.info("🔧 Set new custom setting: demo_settings.last_updated")
87
-
88
- # Get all custom settings
89
- all_custom_settings = get_custom_settings()
90
- logger.info(f"📊 Total custom settings: {len(all_custom_settings)} sections")
91
-
92
- return {
93
- "app_name": app_name,
94
- "app_version": app_version,
95
- "welcome_message": welcome_msg,
96
- "max_connections": max_connections,
97
- "enabled_features": enabled_features,
98
- "total_settings_sections": len(all_custom_settings)
99
- }
100
-
101
-
102
- def create_custom_settings_file():
103
- """
104
- Create a custom settings JSON file for the basic server.
105
- """
106
- custom_settings = {
107
- "application": {
108
- "name": "Basic MCP Proxy Server with Custom Settings",
109
- "version": "1.1.0",
110
- "environment": "development",
111
- "description": "Basic server demonstrating custom settings usage"
112
- },
113
- "features": {
114
- "basic_logging": True,
115
- "simple_commands": True,
116
- "custom_settings_demo": True,
117
- "file_based_config": True
118
- },
119
- "server_info": {
120
- "description": "Basic server with file-based custom settings",
121
- "author": "MCP Proxy Adapter Team",
122
- "contact": "support@example.com",
123
- "documentation": "https://example.com/docs"
124
- },
125
- "demo_settings": {
126
- "welcome_message": "Welcome to Basic MCP Proxy Server with Custom Settings!",
127
- "max_connections": 150,
128
- "timeout": 45,
129
- "debug_mode": True,
130
- "log_level": "INFO"
131
- },
132
- "performance": {
133
- "enable_caching": True,
134
- "cache_ttl": 300,
135
- "max_cache_size": 1000
136
- },
137
- "security": {
138
- "enable_rate_limiting": False,
139
- "max_request_size": "5MB",
140
- "allowed_origins": ["*"]
141
- }
142
- }
143
-
144
- # Write to file
145
- settings_file = "basic_custom_settings.json"
146
- with open(settings_file, 'w', encoding='utf-8') as f:
147
- json.dump(custom_settings, f, indent=2, ensure_ascii=False)
148
-
149
- print(f"✅ Created custom settings file: {settings_file}")
150
- return settings_file
151
-
152
-
153
- def load_custom_settings_from_file(file_path: str = "basic_custom_settings.json"):
154
- """
155
- Load custom settings from a JSON file.
156
-
157
- Args:
158
- file_path: Path to the custom settings JSON file
159
- """
160
- logger = get_logger("basic_server_custom_settings")
161
-
162
- try:
163
- if os.path.exists(file_path):
164
- with open(file_path, 'r', encoding='utf-8') as f:
165
- custom_settings = json.load(f)
166
-
167
- # Add to framework
168
- add_custom_settings(custom_settings)
169
-
170
- logger.info(f"📁 Loaded custom settings from: {file_path}")
171
- logger.info(f"📋 Application: {custom_settings.get('application', {}).get('name', 'Unknown')}")
172
-
173
- return custom_settings
174
- else:
175
- logger.warning(f"⚠️ Custom settings file not found: {file_path}")
176
- return None
177
-
178
- except Exception as e:
179
- logger.error(f"❌ Failed to load custom settings from {file_path}: {e}")
180
- return None
181
-
182
-
183
- def print_custom_settings_summary():
184
- """
185
- Print a summary of current custom settings.
186
- """
187
- logger = get_logger("basic_server_custom_settings")
188
-
189
- all_settings = get_custom_settings()
190
-
191
- logger.info("📊 Custom Settings Summary:")
192
-
193
- # Application info
194
- app_name = get_custom_setting_value("application.name", "Unknown")
195
- app_version = get_custom_setting_value("application.version", "0.0.0")
196
- logger.info(f" Application: {app_name} v{app_version}")
197
-
198
- # Features
199
- features = get_custom_setting_value("features", {})
200
- enabled_features = [name for name, enabled in features.items() if enabled]
201
- logger.info(f" Enabled Features: {', '.join(enabled_features) if enabled_features else 'None'}")
202
-
203
- # Demo settings
204
- welcome_msg = get_custom_setting_value("demo_settings.welcome_message", "Hello!")
205
- max_connections = get_custom_setting_value("demo_settings.max_connections", 50)
206
- logger.info(f" Welcome Message: {welcome_msg}")
207
- logger.info(f" Max Connections: {max_connections}")
208
-
209
- # Performance
210
- caching_enabled = get_custom_setting_value("performance.enable_caching", False)
211
- logger.info(f" Caching: {'Enabled' if caching_enabled else 'Disabled'}")
212
-
213
- # Security
214
- rate_limiting = get_custom_setting_value("security.enable_rate_limiting", False)
215
- logger.info(f" Rate Limiting: {'Enabled' if rate_limiting else 'Disabled'}")
216
-
217
- logger.info(f" Total Settings Sections: {len(all_settings)}")
218
-
219
-
220
- if __name__ == "__main__":
221
- # Setup basic custom settings
222
- setup_basic_custom_settings()
223
-
224
- # Demonstrate usage
225
- demo_info = demonstrate_custom_settings_usage()
226
-
227
- # Create custom settings file
228
- settings_file = create_custom_settings_file()
229
-
230
- # Load from file
231
- load_custom_settings_from_file(settings_file)
232
-
233
- # Print summary
234
- print_custom_settings_summary()
235
-
236
- print("\n🎉 Custom settings demonstration completed!")
237
- print(f"📁 Custom settings file: {settings_file}")
238
- print("🔧 You can now use these settings in your basic server application.")
@@ -1,114 +0,0 @@
1
- """
2
- Basic Server Example
3
-
4
- This example demonstrates a minimal MCP Proxy Adapter server
5
- without any additional custom commands.
6
- """
7
-
8
- import asyncio
9
- import uvicorn
10
- import sys
11
- import os
12
- sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', '..'))
13
-
14
- from mcp_proxy_adapter import create_app
15
- from mcp_proxy_adapter.core.logging import get_logger, setup_logging
16
- from mcp_proxy_adapter.core.settings import (
17
- Settings,
18
- get_server_host,
19
- get_server_port,
20
- get_server_debug,
21
- get_setting
22
- )
23
- from mcp_proxy_adapter.core.ssl_utils import SSLUtils
24
-
25
-
26
- def main():
27
- """Run the basic server example."""
28
- # Load configuration from config.json in the same directory
29
- config_path = os.path.join(os.path.dirname(__file__), "config.json")
30
- if os.path.exists(config_path):
31
- from mcp_proxy_adapter.config import config
32
- config.load_from_file(config_path)
33
- print(f"✅ Loaded configuration from: {config_path}")
34
- else:
35
- print(f"⚠️ Configuration file not found: {config_path}")
36
- print(" Using default configuration")
37
-
38
- # Setup logging with configuration
39
- setup_logging()
40
- logger = get_logger("basic_server")
41
-
42
- # Get settings from configuration
43
- server_settings = Settings.get_server_settings()
44
- logging_settings = Settings.get_logging_settings()
45
- commands_settings = Settings.get_commands_settings()
46
- ssl_settings = Settings.get_custom_setting("ssl", {})
47
- custom_settings = Settings.get_custom_setting("custom", {})
48
-
49
- # Print server header and description
50
- print("=" * 80)
51
- print("🔧 BASIC MCP PROXY ADAPTER SERVER")
52
- print("=" * 80)
53
- print("📋 Description:")
54
- print(f" {custom_settings.get('description', 'Basic server example')}")
55
- print()
56
- print("⚙️ Configuration:")
57
- print(f" • Server: {server_settings['host']}:{server_settings['port']}")
58
- print(f" • Debug: {server_settings['debug']}")
59
- print(f" • Log Level: {logging_settings['level']}")
60
- print(f" • Log Directory: {logging_settings['log_dir']}")
61
- print(f" • Auto Discovery: {commands_settings['auto_discovery']}")
62
- print(f" • Discovery Path: {commands_settings['discovery_path']}")
63
- print(f" • SSL Enabled: {ssl_settings.get('enabled', False)}")
64
- if ssl_settings.get('enabled', False):
65
- print(f" • SSL Mode: {ssl_settings.get('mode', 'https_only')}")
66
- print(f" • SSL Cert: {ssl_settings.get('cert_file', 'Not specified')}")
67
- print()
68
- print("🔧 Available Commands:")
69
- print(" • help - Built-in help command")
70
- print(" • health - Built-in health command")
71
- print(" • config - Built-in config command")
72
- print(" • reload - Built-in reload command")
73
- print()
74
- print("📁 Command Discovery:")
75
- print(f" • Commands will be discovered from: {commands_settings['discovery_path']}")
76
- print(" • This path is configured in config.json under 'commands.discovery_path'")
77
- print()
78
- print("🎯 Features:")
79
- print(" • Standard JSON-RPC API")
80
- print(" • Built-in command discovery")
81
- print(" • Basic logging and error handling")
82
- print(" • OpenAPI schema generation")
83
- print(" • Configuration-driven settings")
84
- print("=" * 80)
85
- print()
86
-
87
- logger.info("Starting Basic MCP Proxy Adapter Server...")
88
- logger.info(f"Server configuration: {server_settings}")
89
- logger.info(f"Logging configuration: {logging_settings}")
90
- logger.info(f"Commands configuration: {commands_settings}")
91
- logger.info(f"SSL configuration: {ssl_settings}")
92
-
93
- # Create application with settings from configuration
94
- app = create_app(
95
- title=custom_settings.get('server_name', 'Basic MCP Proxy Adapter Server'),
96
- description=custom_settings.get('description', 'Minimal server example with only built-in commands'),
97
- version="1.0.0"
98
- )
99
-
100
- # Get SSL configuration for uvicorn
101
- uvicorn_ssl_config = SSLUtils.get_ssl_config_for_uvicorn(ssl_settings)
102
-
103
- # Run the server with configuration settings
104
- uvicorn.run(
105
- app,
106
- host=server_settings['host'],
107
- port=server_settings['port'],
108
- log_level=server_settings['log_level'].lower(),
109
- **uvicorn_ssl_config
110
- )
111
-
112
-
113
- if __name__ == "__main__":
114
- main()
@@ -1,127 +0,0 @@
1
- # Custom Commands Server Example
2
-
3
- This example demonstrates both auto-registration and manual registration of commands in the MCP Proxy Adapter framework.
4
-
5
- ## Registration Methods
6
-
7
- ### 1. Auto-Registration
8
-
9
- Commands are automatically discovered and registered by the framework if they:
10
- - Are located in packages that follow the naming convention
11
- - Have class names ending with "Command"
12
- - Inherit from the `Command` base class
13
-
14
- **Location:** `auto_commands/` package
15
- **Files:**
16
- - `auto_echo_command.py` - AutoEchoCommand
17
- - `auto_info_command.py` - AutoInfoCommand
18
-
19
- **How it works:**
20
- ```python
21
- # Framework automatically discovers commands in auto_commands/ package
22
- registry.discover_commands("mcp_proxy_adapter.examples.custom_commands.auto_commands")
23
- ```
24
-
25
- ### 2. Manual Registration
26
-
27
- Commands are explicitly registered in the server code using:
28
- - `registry.register()` - for regular commands
29
- - `registry.register_custom_command()` - for commands that override built-ins
30
-
31
- **Location:** Main server file
32
- **Files:**
33
- - `echo_command.py` - EchoCommand
34
- - `custom_help_command.py` - CustomHelpCommand
35
- - `custom_health_command.py` - CustomHealthCommand
36
- - `data_transform_command.py` - DataTransformCommand
37
- - `intercept_command.py` - InterceptCommand
38
- - `manual_echo_command.py` - ManualEchoCommand
39
-
40
- **How it works:**
41
- ```python
42
- # Explicit registration in server code
43
- registry.register(EchoCommand)
44
- registry.register_custom_command(CustomHelpCommand) # Overrides built-in
45
- ```
46
-
47
- ### 3. Built-in Commands
48
-
49
- Framework provides default commands that are registered automatically:
50
- - `help` - HelpCommand
51
- - `health` - HealthCommand
52
-
53
- These can be overridden by custom commands using `register_custom_command()`.
54
-
55
- ## Command Hierarchy
56
-
57
- 1. **Custom Commands** (highest priority) - registered with `register_custom_command()`
58
- 2. **Manually Registered Commands** - registered with `register()`
59
- 3. **Auto-Registered Commands** - discovered automatically
60
- 4. **Built-in Commands** (lowest priority) - framework defaults
61
-
62
- ## Testing Commands
63
-
64
- ### Auto-Registered Commands
65
- ```bash
66
- # Test auto-registered echo
67
- curl -X POST http://localhost:8000/cmd \
68
- -H "Content-Type: application/json" \
69
- -d '{"jsonrpc": "2.0", "method": "auto_echo", "params": {"message": "Hello!"}, "id": 1}'
70
-
71
- # Test auto-registered info
72
- curl -X POST http://localhost:8000/cmd \
73
- -H "Content-Type: application/json" \
74
- -d '{"jsonrpc": "2.0", "method": "auto_info", "params": {"topic": "test"}, "id": 2}'
75
- ```
76
-
77
- ### Manually Registered Commands
78
- ```bash
79
- # Test manually registered echo
80
- curl -X POST http://localhost:8000/cmd \
81
- -H "Content-Type: application/json" \
82
- -d '{"jsonrpc": "2.0", "method": "manual_echo", "params": {"message": "Hello!"}, "id": 3}'
83
-
84
- # Test other manually registered commands
85
- curl -X POST http://localhost:8000/cmd \
86
- -H "Content-Type: application/json" \
87
- -d '{"jsonrpc": "2.0", "method": "echo", "params": {"message": "Hello!"}, "id": 4}'
88
- ```
89
-
90
- ### Built-in Commands (or overridden)
91
- ```bash
92
- # Test help command (custom or built-in)
93
- curl -X POST http://localhost:8000/cmd \
94
- -H "Content-Type: application/json" \
95
- -d '{"jsonrpc": "2.0", "method": "help", "id": 5}'
96
-
97
- # Test health command (custom or built-in)
98
- curl -X POST http://localhost:8000/cmd \
99
- -H "Content-Type: application/json" \
100
- -d '{"jsonrpc": "2.0", "method": "health", "id": 6}'
101
- ```
102
-
103
- ## Features Demonstrated
104
-
105
- ### Auto-Registration
106
- - ✅ Automatic command discovery
107
- - ✅ Naming convention compliance
108
- - ✅ Package-based organization
109
- - ✅ Framework integration
110
-
111
- ### Manual Registration
112
- - ✅ Explicit command registration
113
- - ✅ Custom command overrides
114
- - ✅ Priority management
115
- - ✅ Dependency control
116
-
117
- ### Built-in Commands
118
- - ✅ Framework defaults
119
- - ✅ Override capability
120
- - ✅ Fallback behavior
121
- - ✅ Consistent API
122
-
123
- ### Advanced Features
124
- - ✅ Command hierarchy
125
- - ✅ Priority resolution
126
- - ✅ Hook integration
127
- - ✅ Error handling
@@ -1,27 +0,0 @@
1
- """
2
- Custom Commands Example
3
-
4
- An example of MCP Proxy Adapter server with custom commands:
5
- - echo command
6
- - custom help command
7
- - custom health command
8
- """
9
-
10
- __version__ = "1.0.0"
11
-
12
- # Import all modules to make them available
13
- from . import echo_command
14
- from . import custom_help_command
15
- from . import custom_health_command
16
- from . import manual_echo_command
17
- from . import intercept_command
18
- from . import data_transform_command
19
- from . import advanced_hooks
20
- from . import hooks
21
- from . import custom_settings_manager
22
- from . import custom_openapi_generator
23
- # Server import removed to avoid circular imports
24
-
25
- # Import auto commands
26
- from .auto_commands import auto_echo_command
27
- from .auto_commands import auto_info_command