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,33 +0,0 @@
1
- {
2
- "server": {
3
- "host": "0.0.0.0",
4
- "port": 8000,
5
- "debug": true,
6
- "log_level": "INFO"
7
- },
8
- "logging": {
9
- "level": "INFO",
10
- "log_dir": "./logs",
11
- "console_output": true
12
- },
13
- "commands": {
14
- "auto_discovery": true,
15
- "discovery_path": "mcp_proxy_adapter.commands"
16
- },
17
- "transport": {
18
- "type": "http",
19
- "port": null,
20
- "ssl": {
21
- "enabled": false,
22
- "cert_file": null,
23
- "key_file": null,
24
- "ca_cert": null,
25
- "verify_client": false,
26
- "client_cert_required": false
27
- }
28
- },
29
- "custom": {
30
- "description": "Single transport server example",
31
- "server_name": "Single Transport MCP Proxy Adapter Server"
32
- }
33
- }
@@ -1,169 +0,0 @@
1
- """
2
- Custom Health Command Example
3
-
4
- A custom health command with enhanced system information.
5
- """
6
-
7
- import os
8
- import platform
9
- import sys
10
- import psutil
11
- from datetime import datetime
12
- from typing import Dict, Any
13
-
14
- from mcp_proxy_adapter.commands.base import Command
15
- from mcp_proxy_adapter.commands.result import SuccessResult
16
- from mcp_proxy_adapter.commands.command_registry import registry
17
-
18
-
19
- class CustomHealthResult(SuccessResult):
20
- """
21
- Result of the custom health command execution.
22
- """
23
-
24
- def __init__(self, status: str, version: str, uptime: float,
25
- components: Dict[str, Any], custom_metrics: Dict[str, Any]):
26
- """
27
- Initialize custom health command result.
28
-
29
- Args:
30
- status: Server status ("ok" or "error")
31
- version: Server version
32
- uptime: Server uptime in seconds
33
- components: Dictionary with components status
34
- custom_metrics: Additional custom metrics
35
- """
36
- super().__init__(
37
- data={
38
- "status": status,
39
- "version": version,
40
- "uptime": uptime,
41
- "components": components,
42
- "custom_metrics": custom_metrics,
43
- "custom_health": True
44
- }
45
- )
46
-
47
- @classmethod
48
- def get_schema(cls) -> Dict[str, Any]:
49
- """
50
- Get JSON schema for result validation.
51
-
52
- Returns:
53
- Dict[str, Any]: JSON schema
54
- """
55
- return {
56
- "type": "object",
57
- "properties": {
58
- "data": {
59
- "type": "object",
60
- "properties": {
61
- "status": {"type": "string"},
62
- "version": {"type": "string"},
63
- "uptime": {"type": "number"},
64
- "components": {"type": "object"},
65
- "custom_metrics": {"type": "object"},
66
- "custom_health": {"type": "boolean"}
67
- },
68
- "required": ["status", "version", "uptime", "components", "custom_metrics", "custom_health"]
69
- }
70
- },
71
- "required": ["data"]
72
- }
73
-
74
-
75
- class CustomHealthCommand(Command):
76
- """
77
- Custom health command with enhanced system information.
78
- """
79
-
80
- name = "health"
81
- result_class = CustomHealthResult
82
-
83
- async def execute(self, **kwargs) -> CustomHealthResult:
84
- """
85
- Execute custom health command.
86
-
87
- Returns:
88
- CustomHealthResult: Custom health command result
89
- """
90
- # Get version from package
91
- try:
92
- from mcp_proxy_adapter.version import __version__ as version
93
- except ImportError:
94
- version = "unknown"
95
-
96
- # Get process start time
97
- process = psutil.Process(os.getpid())
98
- start_time = datetime.fromtimestamp(process.create_time())
99
- uptime_seconds = (datetime.now() - start_time).total_seconds()
100
-
101
- # Get system information
102
- system_info = {
103
- "platform": platform.platform(),
104
- "python_version": sys.version,
105
- "cpu_count": psutil.cpu_count(),
106
- "memory_total": psutil.virtual_memory().total,
107
- "memory_available": psutil.virtual_memory().available
108
- }
109
-
110
- # Get process information
111
- process_info = {
112
- "pid": os.getpid(),
113
- "memory_usage": process.memory_info().rss,
114
- "cpu_percent": process.cpu_percent(),
115
- "create_time": process.create_time()
116
- }
117
-
118
- # Get commands information
119
- from mcp_proxy_adapter.commands.command_registry import registry
120
- commands_info = {
121
- "total_commands": len(registry.get_all_commands()),
122
- "custom_commands": ["echo", "help", "health"],
123
- "registry_status": "active"
124
- }
125
-
126
- # Custom metrics
127
- custom_metrics = {
128
- "custom_health_check": True,
129
- "enhanced_monitoring": True,
130
- "system_load": psutil.getloadavg() if hasattr(psutil, 'getloadavg') else None,
131
- "disk_usage": {
132
- "total": psutil.disk_usage('/').total,
133
- "free": psutil.disk_usage('/').free,
134
- "used": psutil.disk_usage('/').used
135
- },
136
- "network_interfaces": len(psutil.net_if_addrs()),
137
- "custom_features": ["enhanced_metrics", "system_monitoring", "custom_health"],
138
- "hook_enhanced": kwargs.get("hook_enhanced", False),
139
- "health_check_id": kwargs.get("health_check_id"),
140
- "global_hook_processed": kwargs.get("global_hook_processed", False)
141
- }
142
-
143
- components = {
144
- "system": system_info,
145
- "process": process_info,
146
- "commands": commands_info
147
- }
148
-
149
- return CustomHealthResult(
150
- status="ok",
151
- version=version,
152
- uptime=uptime_seconds,
153
- components=components,
154
- custom_metrics=custom_metrics
155
- )
156
-
157
- @classmethod
158
- def get_schema(cls) -> Dict[str, Any]:
159
- """
160
- Get JSON schema for command parameters.
161
-
162
- Returns:
163
- Dict[str, Any]: JSON schema
164
- """
165
- return {
166
- "type": "object",
167
- "properties": {},
168
- "description": "Get enhanced system health information"
169
- }
@@ -1,215 +0,0 @@
1
- """
2
- Custom Help Command Example
3
-
4
- A custom help command that provides enhanced help information.
5
- """
6
-
7
- from typing import Dict, Any, Optional
8
- from mcp_proxy_adapter.commands.base import Command
9
- from mcp_proxy_adapter.commands.result import CommandResult
10
- from mcp_proxy_adapter.commands.command_registry import registry
11
- from mcp_proxy_adapter.core.errors import NotFoundError
12
-
13
-
14
- class CustomHelpResult(CommandResult):
15
- """
16
- Result of the custom help command execution.
17
- """
18
-
19
- def __init__(self, commands_info: Optional[Dict[str, Any]] = None,
20
- command_info: Optional[Dict[str, Any]] = None,
21
- custom_info: Optional[Dict[str, Any]] = None):
22
- """
23
- Initialize custom help command result.
24
-
25
- Args:
26
- commands_info: Information about all commands
27
- command_info: Information about a specific command
28
- custom_info: Additional custom information
29
- """
30
- self.commands_info = commands_info
31
- self.command_info = command_info
32
- self.custom_info = custom_info or {}
33
-
34
- def to_dict(self) -> Dict[str, Any]:
35
- """
36
- Convert result to dictionary.
37
-
38
- Returns:
39
- Dict[str, Any]: Result as dictionary
40
- """
41
- if self.command_info is not None:
42
- return {
43
- "cmdname": self.command_info.get("name", "unknown"),
44
- "info": {
45
- "description": self.command_info.get("description", ""),
46
- "summary": self.command_info.get("summary", ""),
47
- "params": self.command_info.get("params", {}),
48
- "examples": self.command_info.get("examples", []),
49
- "custom_help": True
50
- }
51
- }
52
-
53
- if self.commands_info is None:
54
- return {
55
- "tool_info": {
56
- "name": "Custom MCP-Proxy API Service",
57
- "description": "Enhanced JSON-RPC API with custom commands",
58
- "version": "2.0.0",
59
- "custom_help": True
60
- },
61
- "help_usage": {
62
- "description": "Get enhanced information about commands",
63
- "examples": [
64
- {"command": "help", "description": "List of all available commands"},
65
- {"command": "help", "params": {"cmdname": "command_name"}, "description": "Get detailed information about a specific command"}
66
- ]
67
- },
68
- "commands": {},
69
- "total": 0,
70
- "custom_features": self.custom_info
71
- }
72
-
73
- result = self.commands_info.copy()
74
- commands = result.get("commands", {})
75
- result["total"] = len(commands)
76
- result["custom_help"] = True
77
- result["custom_features"] = self.custom_info
78
-
79
- return result
80
-
81
- @classmethod
82
- def get_schema(cls) -> Dict[str, Any]:
83
- """
84
- Get JSON schema for the result.
85
-
86
- Returns:
87
- Dict[str, Any]: JSON schema
88
- """
89
- return {
90
- "type": "object",
91
- "properties": {
92
- "cmdname": {
93
- "type": "string",
94
- "description": "Name of the command"
95
- },
96
- "info": {
97
- "type": "object",
98
- "properties": {
99
- "description": {"type": "string"},
100
- "summary": {"type": "string"},
101
- "params": {"type": "object"},
102
- "examples": {"type": "array"},
103
- "custom_help": {"type": "boolean"}
104
- }
105
- },
106
- "tool_info": {
107
- "type": "object",
108
- "properties": {
109
- "name": {"type": "string"},
110
- "description": {"type": "string"},
111
- "version": {"type": "string"},
112
- "custom_help": {"type": "boolean"}
113
- }
114
- },
115
- "help_usage": {
116
- "type": "object",
117
- "properties": {
118
- "description": {"type": "string"},
119
- "examples": {"type": "array"}
120
- }
121
- },
122
- "commands": {"type": "object"},
123
- "total": {"type": "integer"},
124
- "custom_features": {"type": "object"}
125
- }
126
- }
127
-
128
-
129
- class CustomHelpCommand(Command):
130
- """
131
- Custom help command with enhanced functionality.
132
- """
133
-
134
- name = "help"
135
- result_class = CustomHelpResult
136
-
137
- async def execute(self, cmdname: Optional[str] = None, **kwargs) -> CustomHelpResult:
138
- """
139
- Execute custom help command.
140
-
141
- Args:
142
- cmdname: Name of specific command to get help for
143
- **kwargs: Additional parameters
144
-
145
- Returns:
146
- CustomHelpResult: Custom help command result
147
- """
148
- try:
149
- # Check if hook processed this request
150
- request_id = kwargs.get("request_id")
151
- hook_processed = kwargs.get("hook_processed", False)
152
-
153
- if cmdname is not None:
154
- # Get specific command info
155
- command_info = registry.get_command_info(cmdname)
156
- if command_info is None:
157
- raise NotFoundError(f"Command '{cmdname}' not found")
158
-
159
- custom_info = {
160
- "enhanced": True,
161
- "command_specific": True,
162
- "request_id": request_id,
163
- "hook_processed": hook_processed
164
- }
165
-
166
- return CustomHelpResult(
167
- command_info=command_info,
168
- custom_info=custom_info
169
- )
170
- else:
171
- # Get all commands info
172
- commands_info = registry.get_all_commands_info()
173
-
174
- custom_info = {
175
- "enhanced": True,
176
- "total_commands": len(commands_info.get("commands", {})),
177
- "custom_commands": ["echo", "help", "health"],
178
- "request_id": request_id,
179
- "hook_processed": hook_processed
180
- }
181
-
182
- return CustomHelpResult(
183
- commands_info=commands_info,
184
- custom_info=custom_info
185
- )
186
-
187
- except Exception as e:
188
- # Return error result
189
- return CustomHelpResult(
190
- custom_info={
191
- "error": str(e),
192
- "enhanced": True,
193
- "error_handling": True,
194
- "request_id": request_id,
195
- "hook_processed": hook_processed
196
- }
197
- )
198
-
199
- @classmethod
200
- def get_schema(cls) -> Dict[str, Any]:
201
- """
202
- Get JSON schema for command parameters.
203
-
204
- Returns:
205
- Dict[str, Any]: JSON schema
206
- """
207
- return {
208
- "type": "object",
209
- "properties": {
210
- "cmdname": {
211
- "type": "string",
212
- "description": "Name of specific command to get help for"
213
- }
214
- }
215
- }
@@ -1,76 +0,0 @@
1
- """
2
- Custom OpenAPI generator example for the extended server.
3
-
4
- This demonstrates how to create a custom OpenAPI schema generator
5
- that can be registered with the framework.
6
- """
7
-
8
- from typing import Dict, Any
9
- from fastapi import FastAPI
10
-
11
- from mcp_proxy_adapter.custom_openapi import register_openapi_generator, CustomOpenAPIGenerator
12
- from mcp_proxy_adapter.core.logging import logger
13
-
14
-
15
- def custom_openapi_generator(app: FastAPI) -> Dict[str, Any]:
16
- """
17
- Custom OpenAPI generator for the extended server example.
18
-
19
- This generator extends the default generator with additional
20
- information specific to the extended server.
21
-
22
- Args:
23
- app: FastAPI application instance.
24
-
25
- Returns:
26
- Custom OpenAPI schema.
27
- """
28
- # Use the default generator as base
29
- default_generator = CustomOpenAPIGenerator()
30
- schema = default_generator.generate(
31
- title=getattr(app, 'title', None),
32
- description=getattr(app, 'description', None),
33
- version=getattr(app, 'version', None)
34
- )
35
-
36
- # Add custom information to the schema
37
- schema["info"]["description"] += "\n\n## Extended Server Features:\n"
38
- schema["info"]["description"] += "- Custom commands with hooks\n"
39
- schema["info"]["description"] += "- Data transformation hooks\n"
40
- schema["info"]["description"] += "- Command interception hooks\n"
41
- schema["info"]["description"] += "- Auto-registration and manual registration examples\n"
42
-
43
- # Add custom tags
44
- if "tags" not in schema:
45
- schema["tags"] = []
46
-
47
- schema["tags"].extend([
48
- {
49
- "name": "custom-commands",
50
- "description": "Custom commands with advanced features"
51
- },
52
- {
53
- "name": "hooks",
54
- "description": "Command hooks for data transformation and interception"
55
- },
56
- {
57
- "name": "registration",
58
- "description": "Command registration examples"
59
- }
60
- ])
61
-
62
- # Add custom server information
63
- if "servers" not in schema:
64
- schema["servers"] = []
65
-
66
- schema["servers"].append({
67
- "url": "http://localhost:8000",
68
- "description": "Extended server with custom features"
69
- })
70
-
71
- logger.info("Generated custom OpenAPI schema for extended server")
72
- return schema
73
-
74
-
75
- # Register the custom generator
76
- register_openapi_generator("extended_server", custom_openapi_generator)
@@ -1,96 +0,0 @@
1
- {
2
- "application": {
3
- "name": "Extended MCP Proxy Server with Custom Settings",
4
- "version": "2.1.0",
5
- "environment": "development",
6
- "description": "Advanced server with custom settings management"
7
- },
8
- "features": {
9
- "advanced_hooks": true,
10
- "custom_commands": true,
11
- "data_transformation": true,
12
- "command_interception": true,
13
- "performance_monitoring": true,
14
- "custom_settings_manager": true
15
- },
16
- "security": {
17
- "enable_authentication": false,
18
- "max_request_size": "15MB",
19
- "rate_limiting": {
20
- "enabled": true,
21
- "requests_per_minute": 200,
22
- "burst_limit": 50
23
- },
24
- "cors": {
25
- "enabled": true,
26
- "allowed_origins": ["*"],
27
- "allowed_methods": ["GET", "POST", "PUT", "DELETE"]
28
- }
29
- },
30
- "monitoring": {
31
- "enable_metrics": true,
32
- "metrics_interval": 30,
33
- "health_check_interval": 15,
34
- "log_level": "DEBUG",
35
- "performance_tracking": {
36
- "enabled": true,
37
- "track_response_times": true,
38
- "track_memory_usage": true
39
- }
40
- },
41
- "custom_commands": {
42
- "auto_echo": {
43
- "enabled": true,
44
- "max_length": 2000,
45
- "enable_formatting": true
46
- },
47
- "data_transform": {
48
- "enabled": true,
49
- "transform_types": ["uppercase", "lowercase", "reverse", "capitalize", "title"],
50
- "enable_custom_transforms": true
51
- },
52
- "intercept": {
53
- "enabled": true,
54
- "bypass_conditions": ["input_value == 0", "input_value < 0"],
55
- "intercept_all_commands": false
56
- },
57
- "manual_echo": {
58
- "enabled": true,
59
- "description": "Manually registered echo command with custom settings"
60
- }
61
- },
62
- "hooks": {
63
- "data_transform": {
64
- "enabled": true,
65
- "transform_types": ["uppercase", "lowercase", "reverse"],
66
- "apply_to_all_commands": false
67
- },
68
- "intercept": {
69
- "enabled": true,
70
- "bypass_conditions": ["input_value == 0"],
71
- "log_interceptions": true
72
- }
73
- },
74
- "database": {
75
- "enabled": false,
76
- "type": "sqlite",
77
- "connection_string": "sqlite:///custom_server.db",
78
- "pool_size": 10,
79
- "max_overflow": 20
80
- },
81
- "cache": {
82
- "enabled": true,
83
- "type": "memory",
84
- "ttl": 300,
85
- "max_size": 1000
86
- },
87
- "api": {
88
- "version": "v1",
89
- "prefix": "/api/v1",
90
- "documentation": {
91
- "enabled": true,
92
- "title": "Extended MCP Proxy API",
93
- "description": "Advanced API with custom settings support"
94
- }
95
- }
96
- }