mcp-proxy-adapter 6.0.0__py3-none-any.whl → 6.1.0__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 (259) 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 +7 -2
  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/unified_security.py +152 -0
  7. mcp_proxy_adapter/api/middleware/user_info_middleware.py +83 -0
  8. mcp_proxy_adapter/commands/__init__.py +7 -1
  9. mcp_proxy_adapter/commands/base.py +7 -4
  10. mcp_proxy_adapter/commands/builtin_commands.py +8 -2
  11. mcp_proxy_adapter/commands/command_registry.py +8 -0
  12. mcp_proxy_adapter/commands/echo_command.py +81 -0
  13. mcp_proxy_adapter/commands/help_command.py +21 -14
  14. mcp_proxy_adapter/commands/proxy_registration_command.py +326 -185
  15. mcp_proxy_adapter/commands/role_test_command.py +141 -0
  16. mcp_proxy_adapter/commands/security_command.py +488 -0
  17. mcp_proxy_adapter/commands/ssl_setup_command.py +2 -2
  18. mcp_proxy_adapter/commands/token_management_command.py +1 -1
  19. mcp_proxy_adapter/config.py +81 -21
  20. mcp_proxy_adapter/core/app_factory.py +326 -0
  21. mcp_proxy_adapter/core/client_security.py +384 -0
  22. mcp_proxy_adapter/core/logging.py +8 -3
  23. mcp_proxy_adapter/core/mtls_asgi.py +156 -0
  24. mcp_proxy_adapter/core/mtls_asgi_app.py +187 -0
  25. mcp_proxy_adapter/core/protocol_manager.py +9 -0
  26. mcp_proxy_adapter/core/proxy_client.py +602 -0
  27. mcp_proxy_adapter/core/proxy_registration.py +299 -47
  28. mcp_proxy_adapter/core/security_adapter.py +12 -15
  29. mcp_proxy_adapter/core/security_integration.py +277 -0
  30. mcp_proxy_adapter/core/server_adapter.py +345 -0
  31. mcp_proxy_adapter/core/server_engine.py +364 -0
  32. mcp_proxy_adapter/core/unified_config_adapter.py +579 -0
  33. mcp_proxy_adapter/examples/README.md +230 -97
  34. mcp_proxy_adapter/examples/README_EN.md +258 -0
  35. mcp_proxy_adapter/examples/SECURITY_TESTING.md +455 -0
  36. mcp_proxy_adapter/examples/__pycache__/security_configurations.cpython-312.pyc +0 -0
  37. mcp_proxy_adapter/examples/__pycache__/security_test_client.cpython-312.pyc +0 -0
  38. mcp_proxy_adapter/examples/basic_framework/configs/http_auth.json +37 -0
  39. mcp_proxy_adapter/examples/basic_framework/configs/http_simple.json +23 -0
  40. mcp_proxy_adapter/examples/basic_framework/configs/https_auth.json +39 -0
  41. mcp_proxy_adapter/examples/basic_framework/configs/https_simple.json +25 -0
  42. mcp_proxy_adapter/examples/basic_framework/configs/mtls_no_roles.json +39 -0
  43. mcp_proxy_adapter/examples/basic_framework/configs/mtls_with_roles.json +45 -0
  44. mcp_proxy_adapter/examples/basic_framework/main.py +63 -0
  45. mcp_proxy_adapter/examples/basic_framework/roles.json +21 -0
  46. mcp_proxy_adapter/examples/cert_config.json +9 -0
  47. mcp_proxy_adapter/examples/certs/admin.crt +32 -0
  48. mcp_proxy_adapter/examples/certs/admin.key +52 -0
  49. mcp_proxy_adapter/examples/certs/admin_cert.pem +21 -0
  50. mcp_proxy_adapter/examples/certs/admin_key.pem +28 -0
  51. mcp_proxy_adapter/examples/certs/ca_cert.pem +23 -0
  52. mcp_proxy_adapter/examples/certs/ca_cert.srl +1 -0
  53. mcp_proxy_adapter/examples/certs/ca_key.pem +28 -0
  54. mcp_proxy_adapter/examples/certs/cert_config.json +9 -0
  55. mcp_proxy_adapter/examples/certs/client.crt +32 -0
  56. mcp_proxy_adapter/examples/certs/client.key +52 -0
  57. mcp_proxy_adapter/examples/certs/client_admin.crt +32 -0
  58. mcp_proxy_adapter/examples/certs/client_admin.key +52 -0
  59. mcp_proxy_adapter/examples/certs/client_user.crt +32 -0
  60. mcp_proxy_adapter/examples/certs/client_user.key +52 -0
  61. mcp_proxy_adapter/examples/certs/guest_cert.pem +21 -0
  62. mcp_proxy_adapter/examples/certs/guest_key.pem +28 -0
  63. mcp_proxy_adapter/examples/certs/mcp_proxy_adapter_ca_ca.crt +23 -0
  64. mcp_proxy_adapter/examples/certs/proxy_cert.pem +21 -0
  65. mcp_proxy_adapter/examples/certs/proxy_key.pem +28 -0
  66. mcp_proxy_adapter/examples/certs/readonly.crt +32 -0
  67. mcp_proxy_adapter/examples/certs/readonly.key +52 -0
  68. mcp_proxy_adapter/examples/certs/readonly_cert.pem +21 -0
  69. mcp_proxy_adapter/examples/certs/readonly_key.pem +28 -0
  70. mcp_proxy_adapter/examples/certs/server.crt +32 -0
  71. mcp_proxy_adapter/examples/certs/server.key +52 -0
  72. mcp_proxy_adapter/examples/certs/server_cert.pem +32 -0
  73. mcp_proxy_adapter/examples/certs/server_key.pem +52 -0
  74. mcp_proxy_adapter/examples/certs/test_ca_ca.crt +20 -0
  75. mcp_proxy_adapter/examples/certs/user.crt +32 -0
  76. mcp_proxy_adapter/examples/certs/user.key +52 -0
  77. mcp_proxy_adapter/examples/certs/user_cert.pem +21 -0
  78. mcp_proxy_adapter/examples/certs/user_key.pem +28 -0
  79. mcp_proxy_adapter/examples/client_configs/api_key_client.json +13 -0
  80. mcp_proxy_adapter/examples/client_configs/basic_auth_client.json +13 -0
  81. mcp_proxy_adapter/examples/client_configs/certificate_client.json +22 -0
  82. mcp_proxy_adapter/examples/client_configs/jwt_client.json +15 -0
  83. mcp_proxy_adapter/examples/client_configs/no_auth_client.json +9 -0
  84. mcp_proxy_adapter/examples/commands/__init__.py +1 -0
  85. mcp_proxy_adapter/examples/create_certificates_simple.py +307 -0
  86. mcp_proxy_adapter/examples/debug_request_state.py +144 -0
  87. mcp_proxy_adapter/examples/debug_role_chain.py +205 -0
  88. mcp_proxy_adapter/examples/demo_client.py +341 -0
  89. mcp_proxy_adapter/examples/full_application/commands/custom_echo_command.py +99 -0
  90. mcp_proxy_adapter/examples/full_application/commands/dynamic_calculator_command.py +106 -0
  91. mcp_proxy_adapter/examples/full_application/configs/http_auth.json +37 -0
  92. mcp_proxy_adapter/examples/full_application/configs/http_simple.json +23 -0
  93. mcp_proxy_adapter/examples/full_application/configs/https_auth.json +39 -0
  94. mcp_proxy_adapter/examples/full_application/configs/https_simple.json +25 -0
  95. mcp_proxy_adapter/examples/full_application/configs/mtls_no_roles.json +39 -0
  96. mcp_proxy_adapter/examples/full_application/configs/mtls_with_roles.json +45 -0
  97. mcp_proxy_adapter/examples/full_application/hooks/application_hooks.py +97 -0
  98. mcp_proxy_adapter/examples/full_application/hooks/builtin_command_hooks.py +95 -0
  99. mcp_proxy_adapter/examples/full_application/main.py +138 -0
  100. mcp_proxy_adapter/examples/full_application/roles.json +21 -0
  101. mcp_proxy_adapter/examples/generate_all_certificates.py +429 -0
  102. mcp_proxy_adapter/examples/generate_certificates.py +121 -0
  103. mcp_proxy_adapter/examples/keys/ca_key.pem +28 -0
  104. mcp_proxy_adapter/examples/keys/mcp_proxy_adapter_ca_ca.key +28 -0
  105. mcp_proxy_adapter/examples/keys/test_ca_ca.key +28 -0
  106. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter.log +220 -0
  107. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter.log.1 +1 -0
  108. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter.log.2 +1 -0
  109. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter.log.3 +1 -0
  110. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter.log.4 +1 -0
  111. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter.log.5 +1 -0
  112. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter_access.log +220 -0
  113. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter_access.log.1 +1 -0
  114. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter_access.log.2 +1 -0
  115. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter_access.log.3 +1 -0
  116. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter_access.log.4 +1 -0
  117. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter_access.log.5 +1 -0
  118. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter_error.log +2 -0
  119. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter_error.log.1 +1 -0
  120. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter_error.log.2 +1 -0
  121. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter_error.log.3 +1 -0
  122. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter_error.log.4 +1 -0
  123. mcp_proxy_adapter/examples/logs/mcp_proxy_adapter_error.log.5 +1 -0
  124. mcp_proxy_adapter/examples/proxy_registration_example.py +401 -0
  125. mcp_proxy_adapter/examples/roles.json +38 -0
  126. mcp_proxy_adapter/examples/run_example.py +81 -0
  127. mcp_proxy_adapter/examples/run_security_tests.py +326 -0
  128. mcp_proxy_adapter/examples/run_security_tests_fixed.py +300 -0
  129. mcp_proxy_adapter/examples/security_test_client.py +743 -0
  130. mcp_proxy_adapter/examples/server_configs/config_basic_http.json +204 -0
  131. mcp_proxy_adapter/examples/server_configs/config_http_token.json +238 -0
  132. mcp_proxy_adapter/examples/server_configs/config_https.json +215 -0
  133. mcp_proxy_adapter/examples/server_configs/config_https_token.json +231 -0
  134. mcp_proxy_adapter/examples/server_configs/config_mtls.json +215 -0
  135. mcp_proxy_adapter/examples/server_configs/config_proxy_registration.json +250 -0
  136. mcp_proxy_adapter/examples/server_configs/config_simple.json +46 -0
  137. mcp_proxy_adapter/examples/server_configs/roles.json +38 -0
  138. mcp_proxy_adapter/examples/test_examples.py +344 -0
  139. mcp_proxy_adapter/examples/universal_client.py +628 -0
  140. mcp_proxy_adapter/main.py +21 -10
  141. mcp_proxy_adapter/utils/config_generator.py +639 -0
  142. mcp_proxy_adapter/version.py +2 -1
  143. mcp_proxy_adapter-6.1.0.dist-info/METADATA +205 -0
  144. mcp_proxy_adapter-6.1.0.dist-info/RECORD +193 -0
  145. mcp_proxy_adapter-6.1.0.dist-info/entry_points.txt +2 -0
  146. {mcp_proxy_adapter-6.0.0.dist-info → mcp_proxy_adapter-6.1.0.dist-info}/licenses/LICENSE +2 -2
  147. mcp_proxy_adapter/api/middleware/auth.py +0 -146
  148. mcp_proxy_adapter/api/middleware/auth_adapter.py +0 -235
  149. mcp_proxy_adapter/api/middleware/mtls_adapter.py +0 -305
  150. mcp_proxy_adapter/api/middleware/mtls_middleware.py +0 -296
  151. mcp_proxy_adapter/api/middleware/rate_limit.py +0 -152
  152. mcp_proxy_adapter/api/middleware/rate_limit_adapter.py +0 -241
  153. mcp_proxy_adapter/api/middleware/roles_adapter.py +0 -365
  154. mcp_proxy_adapter/api/middleware/roles_middleware.py +0 -381
  155. mcp_proxy_adapter/api/middleware/security.py +0 -376
  156. mcp_proxy_adapter/api/middleware/token_auth_middleware.py +0 -261
  157. mcp_proxy_adapter/examples/__init__.py +0 -7
  158. mcp_proxy_adapter/examples/basic_server/README.md +0 -60
  159. mcp_proxy_adapter/examples/basic_server/__init__.py +0 -7
  160. mcp_proxy_adapter/examples/basic_server/basic_custom_settings.json +0 -39
  161. mcp_proxy_adapter/examples/basic_server/config.json +0 -70
  162. mcp_proxy_adapter/examples/basic_server/config_all_protocols.json +0 -54
  163. mcp_proxy_adapter/examples/basic_server/config_http.json +0 -70
  164. mcp_proxy_adapter/examples/basic_server/config_http_only.json +0 -52
  165. mcp_proxy_adapter/examples/basic_server/config_https.json +0 -58
  166. mcp_proxy_adapter/examples/basic_server/config_mtls.json +0 -58
  167. mcp_proxy_adapter/examples/basic_server/config_ssl.json +0 -46
  168. mcp_proxy_adapter/examples/basic_server/custom_settings_example.py +0 -238
  169. mcp_proxy_adapter/examples/basic_server/server.py +0 -114
  170. mcp_proxy_adapter/examples/custom_commands/README.md +0 -127
  171. mcp_proxy_adapter/examples/custom_commands/__init__.py +0 -27
  172. mcp_proxy_adapter/examples/custom_commands/advanced_hooks.py +0 -566
  173. mcp_proxy_adapter/examples/custom_commands/auto_commands/__init__.py +0 -6
  174. mcp_proxy_adapter/examples/custom_commands/auto_commands/auto_echo_command.py +0 -103
  175. mcp_proxy_adapter/examples/custom_commands/auto_commands/auto_info_command.py +0 -111
  176. mcp_proxy_adapter/examples/custom_commands/auto_commands/test_command.py +0 -105
  177. mcp_proxy_adapter/examples/custom_commands/catalog/commands/test_command.py +0 -129
  178. mcp_proxy_adapter/examples/custom_commands/config.json +0 -118
  179. mcp_proxy_adapter/examples/custom_commands/config_all_protocols.json +0 -46
  180. mcp_proxy_adapter/examples/custom_commands/config_https_only.json +0 -46
  181. mcp_proxy_adapter/examples/custom_commands/config_https_transport.json +0 -33
  182. mcp_proxy_adapter/examples/custom_commands/config_mtls_only.json +0 -46
  183. mcp_proxy_adapter/examples/custom_commands/config_mtls_transport.json +0 -33
  184. mcp_proxy_adapter/examples/custom_commands/config_single_transport.json +0 -33
  185. mcp_proxy_adapter/examples/custom_commands/custom_health_command.py +0 -169
  186. mcp_proxy_adapter/examples/custom_commands/custom_help_command.py +0 -215
  187. mcp_proxy_adapter/examples/custom_commands/custom_openapi_generator.py +0 -76
  188. mcp_proxy_adapter/examples/custom_commands/custom_settings.json +0 -96
  189. mcp_proxy_adapter/examples/custom_commands/custom_settings_manager.py +0 -241
  190. mcp_proxy_adapter/examples/custom_commands/data_transform_command.py +0 -135
  191. mcp_proxy_adapter/examples/custom_commands/echo_command.py +0 -122
  192. mcp_proxy_adapter/examples/custom_commands/full_help_response.json +0 -1
  193. mcp_proxy_adapter/examples/custom_commands/generated_openapi.json +0 -629
  194. mcp_proxy_adapter/examples/custom_commands/get_openapi.py +0 -103
  195. mcp_proxy_adapter/examples/custom_commands/hooks.py +0 -230
  196. mcp_proxy_adapter/examples/custom_commands/intercept_command.py +0 -123
  197. mcp_proxy_adapter/examples/custom_commands/loadable_commands/test_ignored.py +0 -129
  198. mcp_proxy_adapter/examples/custom_commands/manual_echo_command.py +0 -103
  199. mcp_proxy_adapter/examples/custom_commands/proxy_connection_manager.py +0 -278
  200. mcp_proxy_adapter/examples/custom_commands/server.py +0 -252
  201. mcp_proxy_adapter/examples/custom_commands/simple_openapi_server.py +0 -75
  202. mcp_proxy_adapter/examples/custom_commands/start_server_with_proxy_manager.py +0 -299
  203. mcp_proxy_adapter/examples/custom_commands/start_server_with_registration.py +0 -278
  204. mcp_proxy_adapter/examples/custom_commands/test_hooks.py +0 -176
  205. mcp_proxy_adapter/examples/custom_commands/test_openapi.py +0 -27
  206. mcp_proxy_adapter/examples/custom_commands/test_registry.py +0 -23
  207. mcp_proxy_adapter/examples/custom_commands/test_simple.py +0 -19
  208. mcp_proxy_adapter/examples/custom_project_example/README.md +0 -103
  209. mcp_proxy_adapter/examples/custom_project_example/README_EN.md +0 -103
  210. mcp_proxy_adapter/examples/deployment/README.md +0 -49
  211. mcp_proxy_adapter/examples/deployment/__init__.py +0 -7
  212. mcp_proxy_adapter/examples/deployment/config.development.json +0 -8
  213. mcp_proxy_adapter/examples/deployment/config.json +0 -29
  214. mcp_proxy_adapter/examples/deployment/config.production.json +0 -12
  215. mcp_proxy_adapter/examples/deployment/config.staging.json +0 -11
  216. mcp_proxy_adapter/examples/deployment/docker-compose.yml +0 -31
  217. mcp_proxy_adapter/examples/deployment/run.sh +0 -43
  218. mcp_proxy_adapter/examples/deployment/run_docker.sh +0 -84
  219. mcp_proxy_adapter/examples/simple_custom_commands/README.md +0 -149
  220. mcp_proxy_adapter/examples/simple_custom_commands/README_EN.md +0 -149
  221. mcp_proxy_adapter/schemas/base_schema.json +0 -114
  222. mcp_proxy_adapter/schemas/openapi_schema.json +0 -314
  223. mcp_proxy_adapter/schemas/roles_schema.json +0 -162
  224. mcp_proxy_adapter/tests/__init__.py +0 -0
  225. mcp_proxy_adapter/tests/api/__init__.py +0 -3
  226. mcp_proxy_adapter/tests/api/test_cmd_endpoint.py +0 -115
  227. mcp_proxy_adapter/tests/api/test_custom_openapi.py +0 -617
  228. mcp_proxy_adapter/tests/api/test_handlers.py +0 -522
  229. mcp_proxy_adapter/tests/api/test_middleware.py +0 -340
  230. mcp_proxy_adapter/tests/api/test_schemas.py +0 -546
  231. mcp_proxy_adapter/tests/api/test_tool_integration.py +0 -531
  232. mcp_proxy_adapter/tests/commands/__init__.py +0 -3
  233. mcp_proxy_adapter/tests/commands/test_config_command.py +0 -211
  234. mcp_proxy_adapter/tests/commands/test_echo_command.py +0 -127
  235. mcp_proxy_adapter/tests/commands/test_help_command.py +0 -136
  236. mcp_proxy_adapter/tests/conftest.py +0 -131
  237. mcp_proxy_adapter/tests/functional/__init__.py +0 -3
  238. mcp_proxy_adapter/tests/functional/test_api.py +0 -253
  239. mcp_proxy_adapter/tests/integration/__init__.py +0 -3
  240. mcp_proxy_adapter/tests/integration/test_cmd_integration.py +0 -129
  241. mcp_proxy_adapter/tests/integration/test_integration.py +0 -255
  242. mcp_proxy_adapter/tests/performance/__init__.py +0 -3
  243. mcp_proxy_adapter/tests/performance/test_performance.py +0 -189
  244. mcp_proxy_adapter/tests/stubs/__init__.py +0 -10
  245. mcp_proxy_adapter/tests/stubs/echo_command.py +0 -104
  246. mcp_proxy_adapter/tests/test_api_endpoints.py +0 -271
  247. mcp_proxy_adapter/tests/test_api_handlers.py +0 -289
  248. mcp_proxy_adapter/tests/test_base_command.py +0 -123
  249. mcp_proxy_adapter/tests/test_batch_requests.py +0 -117
  250. mcp_proxy_adapter/tests/test_command_registry.py +0 -281
  251. mcp_proxy_adapter/tests/test_config.py +0 -127
  252. mcp_proxy_adapter/tests/test_utils.py +0 -65
  253. mcp_proxy_adapter/tests/unit/__init__.py +0 -3
  254. mcp_proxy_adapter/tests/unit/test_base_command.py +0 -436
  255. mcp_proxy_adapter/tests/unit/test_config.py +0 -270
  256. mcp_proxy_adapter-6.0.0.dist-info/METADATA +0 -201
  257. mcp_proxy_adapter-6.0.0.dist-info/RECORD +0 -179
  258. {mcp_proxy_adapter-6.0.0.dist-info → mcp_proxy_adapter-6.1.0.dist-info}/WHEEL +0 -0
  259. {mcp_proxy_adapter-6.0.0.dist-info → mcp_proxy_adapter-6.1.0.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