mcp-proxy-adapter 6.0.0__py3-none-any.whl → 6.0.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 (212) hide show
  1. mcp_proxy_adapter/__main__.py +27 -7
  2. mcp_proxy_adapter/api/app.py +209 -79
  3. mcp_proxy_adapter/api/handlers.py +16 -5
  4. mcp_proxy_adapter/api/middleware/__init__.py +14 -9
  5. mcp_proxy_adapter/api/middleware/command_permission_middleware.py +148 -0
  6. mcp_proxy_adapter/api/middleware/factory.py +36 -12
  7. mcp_proxy_adapter/api/middleware/protocol_middleware.py +84 -18
  8. mcp_proxy_adapter/api/middleware/unified_security.py +197 -0
  9. mcp_proxy_adapter/api/middleware/user_info_middleware.py +158 -0
  10. mcp_proxy_adapter/commands/__init__.py +7 -1
  11. mcp_proxy_adapter/commands/base.py +7 -4
  12. mcp_proxy_adapter/commands/builtin_commands.py +8 -2
  13. mcp_proxy_adapter/commands/command_registry.py +8 -0
  14. mcp_proxy_adapter/commands/echo_command.py +81 -0
  15. mcp_proxy_adapter/commands/health_command.py +1 -1
  16. mcp_proxy_adapter/commands/help_command.py +21 -14
  17. mcp_proxy_adapter/commands/proxy_registration_command.py +326 -185
  18. mcp_proxy_adapter/commands/role_test_command.py +141 -0
  19. mcp_proxy_adapter/commands/security_command.py +488 -0
  20. mcp_proxy_adapter/commands/ssl_setup_command.py +234 -351
  21. mcp_proxy_adapter/commands/token_management_command.py +1 -1
  22. mcp_proxy_adapter/config.py +323 -40
  23. mcp_proxy_adapter/core/app_factory.py +410 -0
  24. mcp_proxy_adapter/core/app_runner.py +272 -0
  25. mcp_proxy_adapter/core/certificate_utils.py +291 -73
  26. mcp_proxy_adapter/core/client.py +574 -0
  27. mcp_proxy_adapter/core/client_manager.py +284 -0
  28. mcp_proxy_adapter/core/client_security.py +384 -0
  29. mcp_proxy_adapter/core/logging.py +8 -3
  30. mcp_proxy_adapter/core/mtls_asgi.py +156 -0
  31. mcp_proxy_adapter/core/mtls_asgi_app.py +187 -0
  32. mcp_proxy_adapter/core/protocol_manager.py +169 -10
  33. mcp_proxy_adapter/core/proxy_client.py +602 -0
  34. mcp_proxy_adapter/core/proxy_registration.py +299 -47
  35. mcp_proxy_adapter/core/security_adapter.py +12 -15
  36. mcp_proxy_adapter/core/security_integration.py +286 -0
  37. mcp_proxy_adapter/core/server_adapter.py +282 -0
  38. mcp_proxy_adapter/core/server_engine.py +270 -0
  39. mcp_proxy_adapter/core/ssl_utils.py +13 -12
  40. mcp_proxy_adapter/core/transport_manager.py +5 -5
  41. mcp_proxy_adapter/core/unified_config_adapter.py +579 -0
  42. mcp_proxy_adapter/examples/__init__.py +13 -4
  43. mcp_proxy_adapter/examples/basic_framework/__init__.py +9 -0
  44. mcp_proxy_adapter/examples/basic_framework/commands/__init__.py +4 -0
  45. mcp_proxy_adapter/examples/basic_framework/hooks/__init__.py +4 -0
  46. mcp_proxy_adapter/examples/basic_framework/main.py +44 -0
  47. mcp_proxy_adapter/examples/commands/__init__.py +5 -0
  48. mcp_proxy_adapter/examples/create_certificates_simple.py +550 -0
  49. mcp_proxy_adapter/examples/debug_request_state.py +112 -0
  50. mcp_proxy_adapter/examples/debug_role_chain.py +158 -0
  51. mcp_proxy_adapter/examples/demo_client.py +275 -0
  52. mcp_proxy_adapter/examples/examples/basic_framework/__init__.py +9 -0
  53. mcp_proxy_adapter/examples/examples/basic_framework/commands/__init__.py +4 -0
  54. mcp_proxy_adapter/examples/examples/basic_framework/hooks/__init__.py +4 -0
  55. mcp_proxy_adapter/examples/examples/basic_framework/main.py +44 -0
  56. mcp_proxy_adapter/examples/examples/full_application/__init__.py +12 -0
  57. mcp_proxy_adapter/examples/examples/full_application/commands/__init__.py +7 -0
  58. mcp_proxy_adapter/examples/examples/full_application/commands/custom_echo_command.py +80 -0
  59. mcp_proxy_adapter/examples/examples/full_application/commands/dynamic_calculator_command.py +90 -0
  60. mcp_proxy_adapter/examples/examples/full_application/hooks/__init__.py +7 -0
  61. mcp_proxy_adapter/examples/examples/full_application/hooks/application_hooks.py +75 -0
  62. mcp_proxy_adapter/examples/examples/full_application/hooks/builtin_command_hooks.py +71 -0
  63. mcp_proxy_adapter/examples/examples/full_application/main.py +173 -0
  64. mcp_proxy_adapter/examples/examples/full_application/proxy_endpoints.py +154 -0
  65. mcp_proxy_adapter/examples/full_application/__init__.py +12 -0
  66. mcp_proxy_adapter/examples/full_application/commands/__init__.py +7 -0
  67. mcp_proxy_adapter/examples/full_application/commands/custom_echo_command.py +80 -0
  68. mcp_proxy_adapter/examples/full_application/commands/dynamic_calculator_command.py +90 -0
  69. mcp_proxy_adapter/examples/full_application/hooks/__init__.py +7 -0
  70. mcp_proxy_adapter/examples/full_application/hooks/application_hooks.py +75 -0
  71. mcp_proxy_adapter/examples/full_application/hooks/builtin_command_hooks.py +71 -0
  72. mcp_proxy_adapter/examples/full_application/main.py +173 -0
  73. mcp_proxy_adapter/examples/full_application/proxy_endpoints.py +154 -0
  74. mcp_proxy_adapter/examples/generate_all_certificates.py +362 -0
  75. mcp_proxy_adapter/examples/generate_certificates.py +177 -0
  76. mcp_proxy_adapter/examples/generate_certificates_and_tokens.py +369 -0
  77. mcp_proxy_adapter/examples/generate_test_configs.py +331 -0
  78. mcp_proxy_adapter/examples/proxy_registration_example.py +334 -0
  79. mcp_proxy_adapter/examples/run_example.py +59 -0
  80. mcp_proxy_adapter/examples/run_full_test_suite.py +318 -0
  81. mcp_proxy_adapter/examples/run_proxy_server.py +146 -0
  82. mcp_proxy_adapter/examples/run_security_tests.py +544 -0
  83. mcp_proxy_adapter/examples/run_security_tests_fixed.py +247 -0
  84. mcp_proxy_adapter/examples/scripts/config_generator.py +740 -0
  85. mcp_proxy_adapter/examples/scripts/create_certificates_simple.py +560 -0
  86. mcp_proxy_adapter/examples/scripts/generate_certificates_and_tokens.py +369 -0
  87. mcp_proxy_adapter/examples/security_test_client.py +782 -0
  88. mcp_proxy_adapter/examples/setup_test_environment.py +328 -0
  89. mcp_proxy_adapter/examples/test_config.py +148 -0
  90. mcp_proxy_adapter/examples/test_config_generator.py +86 -0
  91. mcp_proxy_adapter/examples/test_examples.py +281 -0
  92. mcp_proxy_adapter/examples/universal_client.py +620 -0
  93. mcp_proxy_adapter/main.py +66 -148
  94. mcp_proxy_adapter/utils/config_generator.py +1008 -0
  95. mcp_proxy_adapter/version.py +5 -2
  96. mcp_proxy_adapter-6.0.1.dist-info/METADATA +679 -0
  97. mcp_proxy_adapter-6.0.1.dist-info/RECORD +140 -0
  98. mcp_proxy_adapter-6.0.1.dist-info/entry_points.txt +2 -0
  99. {mcp_proxy_adapter-6.0.0.dist-info → mcp_proxy_adapter-6.0.1.dist-info}/licenses/LICENSE +2 -2
  100. mcp_proxy_adapter/api/middleware/auth.py +0 -146
  101. mcp_proxy_adapter/api/middleware/auth_adapter.py +0 -235
  102. mcp_proxy_adapter/api/middleware/mtls_adapter.py +0 -305
  103. mcp_proxy_adapter/api/middleware/mtls_middleware.py +0 -296
  104. mcp_proxy_adapter/api/middleware/rate_limit.py +0 -152
  105. mcp_proxy_adapter/api/middleware/rate_limit_adapter.py +0 -241
  106. mcp_proxy_adapter/api/middleware/roles_adapter.py +0 -365
  107. mcp_proxy_adapter/api/middleware/roles_middleware.py +0 -381
  108. mcp_proxy_adapter/api/middleware/security.py +0 -376
  109. mcp_proxy_adapter/api/middleware/token_auth_middleware.py +0 -261
  110. mcp_proxy_adapter/examples/README.md +0 -124
  111. mcp_proxy_adapter/examples/basic_server/README.md +0 -60
  112. mcp_proxy_adapter/examples/basic_server/__init__.py +0 -7
  113. mcp_proxy_adapter/examples/basic_server/basic_custom_settings.json +0 -39
  114. mcp_proxy_adapter/examples/basic_server/config.json +0 -70
  115. mcp_proxy_adapter/examples/basic_server/config_all_protocols.json +0 -54
  116. mcp_proxy_adapter/examples/basic_server/config_http.json +0 -70
  117. mcp_proxy_adapter/examples/basic_server/config_http_only.json +0 -52
  118. mcp_proxy_adapter/examples/basic_server/config_https.json +0 -58
  119. mcp_proxy_adapter/examples/basic_server/config_mtls.json +0 -58
  120. mcp_proxy_adapter/examples/basic_server/config_ssl.json +0 -46
  121. mcp_proxy_adapter/examples/basic_server/custom_settings_example.py +0 -238
  122. mcp_proxy_adapter/examples/basic_server/server.py +0 -114
  123. mcp_proxy_adapter/examples/custom_commands/README.md +0 -127
  124. mcp_proxy_adapter/examples/custom_commands/__init__.py +0 -27
  125. mcp_proxy_adapter/examples/custom_commands/advanced_hooks.py +0 -566
  126. mcp_proxy_adapter/examples/custom_commands/auto_commands/__init__.py +0 -6
  127. mcp_proxy_adapter/examples/custom_commands/auto_commands/auto_echo_command.py +0 -103
  128. mcp_proxy_adapter/examples/custom_commands/auto_commands/auto_info_command.py +0 -111
  129. mcp_proxy_adapter/examples/custom_commands/auto_commands/test_command.py +0 -105
  130. mcp_proxy_adapter/examples/custom_commands/catalog/commands/test_command.py +0 -129
  131. mcp_proxy_adapter/examples/custom_commands/config.json +0 -118
  132. mcp_proxy_adapter/examples/custom_commands/config_all_protocols.json +0 -46
  133. mcp_proxy_adapter/examples/custom_commands/config_https_only.json +0 -46
  134. mcp_proxy_adapter/examples/custom_commands/config_https_transport.json +0 -33
  135. mcp_proxy_adapter/examples/custom_commands/config_mtls_only.json +0 -46
  136. mcp_proxy_adapter/examples/custom_commands/config_mtls_transport.json +0 -33
  137. mcp_proxy_adapter/examples/custom_commands/config_single_transport.json +0 -33
  138. mcp_proxy_adapter/examples/custom_commands/custom_health_command.py +0 -169
  139. mcp_proxy_adapter/examples/custom_commands/custom_help_command.py +0 -215
  140. mcp_proxy_adapter/examples/custom_commands/custom_openapi_generator.py +0 -76
  141. mcp_proxy_adapter/examples/custom_commands/custom_settings.json +0 -96
  142. mcp_proxy_adapter/examples/custom_commands/custom_settings_manager.py +0 -241
  143. mcp_proxy_adapter/examples/custom_commands/data_transform_command.py +0 -135
  144. mcp_proxy_adapter/examples/custom_commands/echo_command.py +0 -122
  145. mcp_proxy_adapter/examples/custom_commands/full_help_response.json +0 -1
  146. mcp_proxy_adapter/examples/custom_commands/generated_openapi.json +0 -629
  147. mcp_proxy_adapter/examples/custom_commands/get_openapi.py +0 -103
  148. mcp_proxy_adapter/examples/custom_commands/hooks.py +0 -230
  149. mcp_proxy_adapter/examples/custom_commands/intercept_command.py +0 -123
  150. mcp_proxy_adapter/examples/custom_commands/loadable_commands/test_ignored.py +0 -129
  151. mcp_proxy_adapter/examples/custom_commands/manual_echo_command.py +0 -103
  152. mcp_proxy_adapter/examples/custom_commands/proxy_connection_manager.py +0 -278
  153. mcp_proxy_adapter/examples/custom_commands/server.py +0 -252
  154. mcp_proxy_adapter/examples/custom_commands/simple_openapi_server.py +0 -75
  155. mcp_proxy_adapter/examples/custom_commands/start_server_with_proxy_manager.py +0 -299
  156. mcp_proxy_adapter/examples/custom_commands/start_server_with_registration.py +0 -278
  157. mcp_proxy_adapter/examples/custom_commands/test_hooks.py +0 -176
  158. mcp_proxy_adapter/examples/custom_commands/test_openapi.py +0 -27
  159. mcp_proxy_adapter/examples/custom_commands/test_registry.py +0 -23
  160. mcp_proxy_adapter/examples/custom_commands/test_simple.py +0 -19
  161. mcp_proxy_adapter/examples/custom_project_example/README.md +0 -103
  162. mcp_proxy_adapter/examples/custom_project_example/README_EN.md +0 -103
  163. mcp_proxy_adapter/examples/deployment/README.md +0 -49
  164. mcp_proxy_adapter/examples/deployment/__init__.py +0 -7
  165. mcp_proxy_adapter/examples/deployment/config.development.json +0 -8
  166. mcp_proxy_adapter/examples/deployment/config.json +0 -29
  167. mcp_proxy_adapter/examples/deployment/config.production.json +0 -12
  168. mcp_proxy_adapter/examples/deployment/config.staging.json +0 -11
  169. mcp_proxy_adapter/examples/deployment/docker-compose.yml +0 -31
  170. mcp_proxy_adapter/examples/deployment/run.sh +0 -43
  171. mcp_proxy_adapter/examples/deployment/run_docker.sh +0 -84
  172. mcp_proxy_adapter/examples/simple_custom_commands/README.md +0 -149
  173. mcp_proxy_adapter/examples/simple_custom_commands/README_EN.md +0 -149
  174. mcp_proxy_adapter/schemas/base_schema.json +0 -114
  175. mcp_proxy_adapter/schemas/openapi_schema.json +0 -314
  176. mcp_proxy_adapter/schemas/roles_schema.json +0 -162
  177. mcp_proxy_adapter/tests/__init__.py +0 -0
  178. mcp_proxy_adapter/tests/api/__init__.py +0 -3
  179. mcp_proxy_adapter/tests/api/test_cmd_endpoint.py +0 -115
  180. mcp_proxy_adapter/tests/api/test_custom_openapi.py +0 -617
  181. mcp_proxy_adapter/tests/api/test_handlers.py +0 -522
  182. mcp_proxy_adapter/tests/api/test_middleware.py +0 -340
  183. mcp_proxy_adapter/tests/api/test_schemas.py +0 -546
  184. mcp_proxy_adapter/tests/api/test_tool_integration.py +0 -531
  185. mcp_proxy_adapter/tests/commands/__init__.py +0 -3
  186. mcp_proxy_adapter/tests/commands/test_config_command.py +0 -211
  187. mcp_proxy_adapter/tests/commands/test_echo_command.py +0 -127
  188. mcp_proxy_adapter/tests/commands/test_help_command.py +0 -136
  189. mcp_proxy_adapter/tests/conftest.py +0 -131
  190. mcp_proxy_adapter/tests/functional/__init__.py +0 -3
  191. mcp_proxy_adapter/tests/functional/test_api.py +0 -253
  192. mcp_proxy_adapter/tests/integration/__init__.py +0 -3
  193. mcp_proxy_adapter/tests/integration/test_cmd_integration.py +0 -129
  194. mcp_proxy_adapter/tests/integration/test_integration.py +0 -255
  195. mcp_proxy_adapter/tests/performance/__init__.py +0 -3
  196. mcp_proxy_adapter/tests/performance/test_performance.py +0 -189
  197. mcp_proxy_adapter/tests/stubs/__init__.py +0 -10
  198. mcp_proxy_adapter/tests/stubs/echo_command.py +0 -104
  199. mcp_proxy_adapter/tests/test_api_endpoints.py +0 -271
  200. mcp_proxy_adapter/tests/test_api_handlers.py +0 -289
  201. mcp_proxy_adapter/tests/test_base_command.py +0 -123
  202. mcp_proxy_adapter/tests/test_batch_requests.py +0 -117
  203. mcp_proxy_adapter/tests/test_command_registry.py +0 -281
  204. mcp_proxy_adapter/tests/test_config.py +0 -127
  205. mcp_proxy_adapter/tests/test_utils.py +0 -65
  206. mcp_proxy_adapter/tests/unit/__init__.py +0 -3
  207. mcp_proxy_adapter/tests/unit/test_base_command.py +0 -436
  208. mcp_proxy_adapter/tests/unit/test_config.py +0 -270
  209. mcp_proxy_adapter-6.0.0.dist-info/METADATA +0 -201
  210. mcp_proxy_adapter-6.0.0.dist-info/RECORD +0 -179
  211. {mcp_proxy_adapter-6.0.0.dist-info → mcp_proxy_adapter-6.0.1.dist-info}/WHEEL +0 -0
  212. {mcp_proxy_adapter-6.0.0.dist-info → mcp_proxy_adapter-6.0.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