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
@@ -0,0 +1,285 @@
1
+ # Troubleshooting Guide
2
+
3
+ This guide addresses common issues with MCP Proxy Adapter Framework, particularly related to ProtocolMiddleware and SSL/TLS configuration.
4
+
5
+ ## Common Issues
6
+
7
+ ### Issue 1: ProtocolMiddleware blocks HTTPS requests
8
+
9
+ **Problem:** ProtocolMiddleware is initialized with default settings and doesn't update when SSL configuration changes.
10
+
11
+ **Symptoms:**
12
+ ```
13
+ Protocol 'https' not allowed for request to /health
14
+ INFO: 127.0.0.1:42038 - "GET /health HTTP/1.1" 403 Forbidden
15
+ ```
16
+
17
+ **Root Cause:** ProtocolMiddleware was created as a global instance with default settings and didn't update when SSL was enabled.
18
+
19
+ **Solution:**
20
+ 1. **Use updated ProtocolManager** (Fixed in v1.1.0):
21
+ - ProtocolManager now dynamically updates based on SSL configuration
22
+ - Automatically allows HTTPS when SSL is enabled
23
+
24
+ 2. **Disable ProtocolMiddleware for HTTPS** (Temporary workaround):
25
+ ```json
26
+ {
27
+ "server": {"host": "127.0.0.1", "port": 10004},
28
+ "ssl": {"enabled": true, "cert_file": "./certs/server.crt", "key_file": "./certs/server.key"},
29
+ "security": {"enabled": true, "auth": {"enabled": true, "methods": ["api_key"]}},
30
+ "protocols": {"enabled": false}
31
+ }
32
+ ```
33
+
34
+ ### Issue 2: SSL Configuration Conflicts
35
+
36
+ **Problem:** Framework reads SSL configuration from both `ssl` (legacy) and `security.ssl` sections, causing confusion.
37
+
38
+ **Symptoms:**
39
+ ```
40
+ 🔍 Debug: SSL config at start of validation: enabled=False
41
+ 🔍 Debug: Root SSL section found: enabled=True
42
+ 🔍 Debug: _get_ssl_config: security.ssl key_file=None
43
+ 🔍 Debug: _get_ssl_config: legacy ssl key_file=./certs/server.key
44
+ ```
45
+
46
+ **Solution:**
47
+ 1. **Use unified SSL configuration** (Recommended):
48
+ ```json
49
+ {
50
+ "security": {
51
+ "ssl": {
52
+ "enabled": true,
53
+ "cert_file": "./certs/server.crt",
54
+ "key_file": "./certs/server.key"
55
+ }
56
+ }
57
+ }
58
+ ```
59
+
60
+ 2. **Use legacy SSL configuration** (Backward compatible):
61
+ ```json
62
+ {
63
+ "ssl": {
64
+ "enabled": true,
65
+ "cert_file": "./certs/server.crt",
66
+ "key_file": "./certs/server.key"
67
+ }
68
+ }
69
+ ```
70
+
71
+ ### Issue 3: Security Framework Initialization Errors
72
+
73
+ **Problem:** Security framework fails to initialize due to missing or null configuration values.
74
+
75
+ **Symptoms:**
76
+ ```
77
+ Failed to initialize security components: Failed to load roles configuration: argument should be a str or an os.PathLike object where __fspath__ returns a str, not 'NoneType'
78
+ ```
79
+
80
+ **Solution:**
81
+ 1. **Provide roles file** (If using roles):
82
+ ```json
83
+ {
84
+ "security": {
85
+ "permissions": {
86
+ "enabled": true,
87
+ "roles_file": "./roles.json"
88
+ }
89
+ }
90
+ }
91
+ ```
92
+
93
+ 2. **Disable permissions** (If not using roles):
94
+ ```json
95
+ {
96
+ "security": {
97
+ "permissions": {
98
+ "enabled": false
99
+ }
100
+ }
101
+ }
102
+ ```
103
+
104
+ 3. **Use graceful fallback** (Fixed in v1.1.0):
105
+ - Security framework now continues without roles if roles_file is null
106
+ - Logs warning instead of crashing
107
+
108
+ ## Configuration Examples
109
+
110
+ ### HTTP Simple
111
+ ```json
112
+ {
113
+ "server": {"host": "127.0.0.1", "port": 10001},
114
+ "ssl": {"enabled": false},
115
+ "security": {"enabled": false},
116
+ "protocols": {"enabled": true, "allowed_protocols": ["http"]}
117
+ }
118
+ ```
119
+
120
+ ### HTTPS Simple
121
+ ```json
122
+ {
123
+ "server": {"host": "127.0.0.1", "port": 10002},
124
+ "ssl": {"enabled": true, "cert_file": "./certs/server.crt", "key_file": "./certs/server.key"},
125
+ "security": {"enabled": false},
126
+ "protocols": {"enabled": true, "allowed_protocols": ["http", "https"]}
127
+ }
128
+ ```
129
+
130
+ ### HTTPS with Token Auth
131
+ ```json
132
+ {
133
+ "server": {"host": "127.0.0.1", "port": 10003},
134
+ "ssl": {"enabled": true, "cert_file": "./certs/server.crt", "key_file": "./certs/server.key"},
135
+ "security": {
136
+ "enabled": true,
137
+ "auth": {"enabled": true, "methods": ["api_key"]}
138
+ },
139
+ "protocols": {"enabled": true, "allowed_protocols": ["http", "https"]}
140
+ }
141
+ ```
142
+
143
+ ### HTTPS without ProtocolMiddleware
144
+ ```json
145
+ {
146
+ "server": {"host": "127.0.0.1", "port": 10004},
147
+ "ssl": {"enabled": true, "cert_file": "./certs/server.crt", "key_file": "./certs/server.key"},
148
+ "security": {
149
+ "enabled": true,
150
+ "auth": {"enabled": true, "methods": ["api_key"]}
151
+ },
152
+ "protocols": {"enabled": false}
153
+ }
154
+ ```
155
+
156
+ ### mTLS Simple
157
+ ```json
158
+ {
159
+ "server": {"host": "127.0.0.1", "port": 10005},
160
+ "ssl": {
161
+ "enabled": true,
162
+ "cert_file": "./certs/server.crt",
163
+ "key_file": "./certs/server.key",
164
+ "ca_cert": "./certs/ca.crt",
165
+ "verify_client": true
166
+ },
167
+ "security": {
168
+ "enabled": true,
169
+ "auth": {"enabled": true, "methods": ["certificate"]}
170
+ },
171
+ "protocols": {"enabled": true, "allowed_protocols": ["https", "mtls"]}
172
+ }
173
+ ```
174
+
175
+ ## Testing Your Configuration
176
+
177
+ ### Test HTTP
178
+ ```bash
179
+ curl http://127.0.0.1:10001/health
180
+ ```
181
+
182
+ ### Test HTTPS
183
+ ```bash
184
+ curl -k https://127.0.0.1:10002/health
185
+ ```
186
+
187
+ ### Test HTTPS with Auth
188
+ ```bash
189
+ curl -k -H "Authorization: Bearer your-api-key" https://127.0.0.1:10003/health
190
+ ```
191
+
192
+ ### Test mTLS
193
+ ```bash
194
+ curl -k --cert ./certs/client.crt --key ./certs/client.key https://127.0.0.1:10005/health
195
+ ```
196
+
197
+ ## Debugging
198
+
199
+ ### Enable Debug Logging
200
+ ```json
201
+ {
202
+ "logging": {
203
+ "level": "DEBUG",
204
+ "console_output": true
205
+ }
206
+ }
207
+ ```
208
+
209
+ ### Check Protocol Manager Status
210
+ ```python
211
+ from mcp_proxy_adapter.core.protocol_manager import get_protocol_manager
212
+ from mcp_proxy_adapter.config import config
213
+
214
+ pm = get_protocol_manager(config.get_all())
215
+ print(f"Allowed protocols: {pm.get_allowed_protocols()}")
216
+ print(f"Protocol info: {pm.get_protocol_info()}")
217
+ ```
218
+
219
+ ### Check SSL Configuration
220
+ ```python
221
+ from mcp_proxy_adapter.config import config
222
+
223
+ ssl_config = config.get("ssl", {})
224
+ security_ssl = config.get("security", {}).get("ssl", {})
225
+ print(f"Legacy SSL: {ssl_config}")
226
+ print(f"Security SSL: {security_ssl}")
227
+ ```
228
+
229
+ ## Migration Guide
230
+
231
+ ### From Legacy to New Configuration
232
+
233
+ **Old (Legacy):**
234
+ ```json
235
+ {
236
+ "ssl": {"enabled": true, "cert_file": "./certs/server.crt", "key_file": "./certs/server.key"}
237
+ }
238
+ ```
239
+
240
+ **New (Recommended):**
241
+ ```json
242
+ {
243
+ "security": {
244
+ "ssl": {"enabled": true, "cert_file": "./certs/server.crt", "key_file": "./certs/server.key"}
245
+ }
246
+ }
247
+ ```
248
+
249
+ ### Adding Protocol Management
250
+
251
+ **Without Protocol Management:**
252
+ ```json
253
+ {
254
+ "protocols": {"enabled": false}
255
+ }
256
+ ```
257
+
258
+ **With Protocol Management:**
259
+ ```json
260
+ {
261
+ "protocols": {
262
+ "enabled": true,
263
+ "allowed_protocols": ["http", "https"]
264
+ }
265
+ }
266
+ ```
267
+
268
+ ## Best Practices
269
+
270
+ 1. **Use security.ssl instead of legacy ssl** for new configurations
271
+ 2. **Disable ProtocolMiddleware** if you don't need protocol validation
272
+ 3. **Provide roles_file** or disable permissions if using security framework
273
+ 4. **Test configurations** before deploying to production
274
+ 5. **Use debug logging** for troubleshooting
275
+ 6. **Keep certificates and keys secure** and properly configured
276
+
277
+ ## Support
278
+
279
+ If you encounter issues not covered in this guide:
280
+
281
+ 1. Check the logs for detailed error messages
282
+ 2. Enable debug logging for more information
283
+ 3. Verify certificate files exist and are readable
284
+ 4. Test with simple configurations first
285
+ 5. Report issues with full configuration and error logs
@@ -0,0 +1,285 @@
1
+ # Руководство по устранению неполадок
2
+
3
+ Это руководство посвящено решению распространенных проблем с фреймворком MCP Proxy Adapter, особенно связанных с ProtocolMiddleware и конфигурацией SSL/TLS.
4
+
5
+ ## Распространенные проблемы
6
+
7
+ ### Проблема 1: ProtocolMiddleware блокирует HTTPS запросы
8
+
9
+ **Проблема:** ProtocolMiddleware инициализируется с дефолтными настройками и не обновляется при изменении конфигурации SSL.
10
+
11
+ **Симптомы:**
12
+ ```
13
+ Protocol 'https' not allowed for request to /health
14
+ INFO: 127.0.0.1:42038 - "GET /health HTTP/1.1" 403 Forbidden
15
+ ```
16
+
17
+ **Причина:** ProtocolMiddleware создавался как глобальный экземпляр с дефолтными настройками и не обновлялся при включении SSL.
18
+
19
+ **Решение:**
20
+ 1. **Использовать обновленный ProtocolManager** (Исправлено в v1.1.0):
21
+ - ProtocolManager теперь динамически обновляется на основе конфигурации SSL
22
+ - Автоматически разрешает HTTPS при включении SSL
23
+
24
+ 2. **Отключить ProtocolMiddleware для HTTPS** (Временное решение):
25
+ ```json
26
+ {
27
+ "server": {"host": "127.0.0.1", "port": 10004},
28
+ "ssl": {"enabled": true, "cert_file": "./certs/server.crt", "key_file": "./certs/server.key"},
29
+ "security": {"enabled": true, "auth": {"enabled": true, "methods": ["api_key"]}},
30
+ "protocols": {"enabled": false}
31
+ }
32
+ ```
33
+
34
+ ### Проблема 2: Конфликты конфигурации SSL
35
+
36
+ **Проблема:** Фреймворк читает конфигурацию SSL из двух мест: `ssl` (legacy) и `security.ssl`, что приводит к путанице.
37
+
38
+ **Симптомы:**
39
+ ```
40
+ 🔍 Debug: SSL config at start of validation: enabled=False
41
+ 🔍 Debug: Root SSL section found: enabled=True
42
+ 🔍 Debug: _get_ssl_config: security.ssl key_file=None
43
+ 🔍 Debug: _get_ssl_config: legacy ssl key_file=./certs/server.key
44
+ ```
45
+
46
+ **Решение:**
47
+ 1. **Использовать унифицированную конфигурацию SSL** (Рекомендуется):
48
+ ```json
49
+ {
50
+ "security": {
51
+ "ssl": {
52
+ "enabled": true,
53
+ "cert_file": "./certs/server.crt",
54
+ "key_file": "./certs/server.key"
55
+ }
56
+ }
57
+ }
58
+ ```
59
+
60
+ 2. **Использовать legacy конфигурацию SSL** (Обратная совместимость):
61
+ ```json
62
+ {
63
+ "ssl": {
64
+ "enabled": true,
65
+ "cert_file": "./certs/server.crt",
66
+ "key_file": "./certs/server.key"
67
+ }
68
+ }
69
+ ```
70
+
71
+ ### Проблема 3: Ошибки инициализации security framework
72
+
73
+ **Проблема:** Security framework падает при инициализации из-за отсутствующих или null значений конфигурации.
74
+
75
+ **Симптомы:**
76
+ ```
77
+ Failed to initialize security components: Failed to load roles configuration: argument should be a str or an os.PathLike object where __fspath__ returns a str, not 'NoneType'
78
+ ```
79
+
80
+ **Решение:**
81
+ 1. **Предоставить файл ролей** (Если используются роли):
82
+ ```json
83
+ {
84
+ "security": {
85
+ "permissions": {
86
+ "enabled": true,
87
+ "roles_file": "./roles.json"
88
+ }
89
+ }
90
+ }
91
+ ```
92
+
93
+ 2. **Отключить permissions** (Если роли не используются):
94
+ ```json
95
+ {
96
+ "security": {
97
+ "permissions": {
98
+ "enabled": false
99
+ }
100
+ }
101
+ }
102
+ ```
103
+
104
+ 3. **Использовать graceful fallback** (Исправлено в v1.1.0):
105
+ - Security framework теперь продолжает работу без ролей, если roles_file равен null
106
+ - Логирует предупреждение вместо падения
107
+
108
+ ## Примеры конфигураций
109
+
110
+ ### HTTP Simple
111
+ ```json
112
+ {
113
+ "server": {"host": "127.0.0.1", "port": 10001},
114
+ "ssl": {"enabled": false},
115
+ "security": {"enabled": false},
116
+ "protocols": {"enabled": true, "allowed_protocols": ["http"]}
117
+ }
118
+ ```
119
+
120
+ ### HTTPS Simple
121
+ ```json
122
+ {
123
+ "server": {"host": "127.0.0.1", "port": 10002},
124
+ "ssl": {"enabled": true, "cert_file": "./certs/server.crt", "key_file": "./certs/server.key"},
125
+ "security": {"enabled": false},
126
+ "protocols": {"enabled": true, "allowed_protocols": ["http", "https"]}
127
+ }
128
+ ```
129
+
130
+ ### HTTPS с токен-аутентификацией
131
+ ```json
132
+ {
133
+ "server": {"host": "127.0.0.1", "port": 10003},
134
+ "ssl": {"enabled": true, "cert_file": "./certs/server.crt", "key_file": "./certs/server.key"},
135
+ "security": {
136
+ "enabled": true,
137
+ "auth": {"enabled": true, "methods": ["api_key"]}
138
+ },
139
+ "protocols": {"enabled": true, "allowed_protocols": ["http", "https"]}
140
+ }
141
+ ```
142
+
143
+ ### HTTPS без ProtocolMiddleware
144
+ ```json
145
+ {
146
+ "server": {"host": "127.0.0.1", "port": 10004},
147
+ "ssl": {"enabled": true, "cert_file": "./certs/server.crt", "key_file": "./certs/server.key"},
148
+ "security": {
149
+ "enabled": true,
150
+ "auth": {"enabled": true, "methods": ["api_key"]}
151
+ },
152
+ "protocols": {"enabled": false}
153
+ }
154
+ ```
155
+
156
+ ### mTLS Simple
157
+ ```json
158
+ {
159
+ "server": {"host": "127.0.0.1", "port": 10005},
160
+ "ssl": {
161
+ "enabled": true,
162
+ "cert_file": "./certs/server.crt",
163
+ "key_file": "./certs/server.key",
164
+ "ca_cert": "./certs/ca.crt",
165
+ "verify_client": true
166
+ },
167
+ "security": {
168
+ "enabled": true,
169
+ "auth": {"enabled": true, "methods": ["certificate"]}
170
+ },
171
+ "protocols": {"enabled": true, "allowed_protocols": ["https", "mtls"]}
172
+ }
173
+ ```
174
+
175
+ ## Тестирование конфигурации
176
+
177
+ ### Тест HTTP
178
+ ```bash
179
+ curl http://127.0.0.1:10001/health
180
+ ```
181
+
182
+ ### Тест HTTPS
183
+ ```bash
184
+ curl -k https://127.0.0.1:10002/health
185
+ ```
186
+
187
+ ### Тест HTTPS с аутентификацией
188
+ ```bash
189
+ curl -k -H "Authorization: Bearer your-api-key" https://127.0.0.1:10003/health
190
+ ```
191
+
192
+ ### Тест mTLS
193
+ ```bash
194
+ curl -k --cert ./certs/client.crt --key ./certs/client.key https://127.0.0.1:10005/health
195
+ ```
196
+
197
+ ## Отладка
198
+
199
+ ### Включить debug логирование
200
+ ```json
201
+ {
202
+ "logging": {
203
+ "level": "DEBUG",
204
+ "console_output": true
205
+ }
206
+ }
207
+ ```
208
+
209
+ ### Проверить статус Protocol Manager
210
+ ```python
211
+ from mcp_proxy_adapter.core.protocol_manager import get_protocol_manager
212
+ from mcp_proxy_adapter.config import config
213
+
214
+ pm = get_protocol_manager(config.get_all())
215
+ print(f"Allowed protocols: {pm.get_allowed_protocols()}")
216
+ print(f"Protocol info: {pm.get_protocol_info()}")
217
+ ```
218
+
219
+ ### Проверить конфигурацию SSL
220
+ ```python
221
+ from mcp_proxy_adapter.config import config
222
+
223
+ ssl_config = config.get("ssl", {})
224
+ security_ssl = config.get("security", {}).get("ssl", {})
225
+ print(f"Legacy SSL: {ssl_config}")
226
+ print(f"Security SSL: {security_ssl}")
227
+ ```
228
+
229
+ ## Руководство по миграции
230
+
231
+ ### От legacy к новой конфигурации
232
+
233
+ **Старая (Legacy):**
234
+ ```json
235
+ {
236
+ "ssl": {"enabled": true, "cert_file": "./certs/server.crt", "key_file": "./certs/server.key"}
237
+ }
238
+ ```
239
+
240
+ **Новая (Рекомендуется):**
241
+ ```json
242
+ {
243
+ "security": {
244
+ "ssl": {"enabled": true, "cert_file": "./certs/server.crt", "key_file": "./certs/server.key"}
245
+ }
246
+ }
247
+ ```
248
+
249
+ ### Добавление управления протоколами
250
+
251
+ **Без управления протоколами:**
252
+ ```json
253
+ {
254
+ "protocols": {"enabled": false}
255
+ }
256
+ ```
257
+
258
+ **С управлением протоколами:**
259
+ ```json
260
+ {
261
+ "protocols": {
262
+ "enabled": true,
263
+ "allowed_protocols": ["http", "https"]
264
+ }
265
+ }
266
+ ```
267
+
268
+ ## Лучшие практики
269
+
270
+ 1. **Используйте security.ssl вместо legacy ssl** для новых конфигураций
271
+ 2. **Отключайте ProtocolMiddleware** если не нужна валидация протоколов
272
+ 3. **Предоставляйте roles_file** или отключайте permissions при использовании security framework
273
+ 4. **Тестируйте конфигурации** перед развертыванием в продакшене
274
+ 5. **Используйте debug логирование** для отладки
275
+ 6. **Храните сертификаты и ключи в безопасности** и правильно настраивайте
276
+
277
+ ## Поддержка
278
+
279
+ Если вы столкнулись с проблемами, не описанными в этом руководстве:
280
+
281
+ 1. Проверьте логи для получения подробных сообщений об ошибках
282
+ 2. Включите debug логирование для получения дополнительной информации
283
+ 3. Убедитесь, что файлы сертификатов существуют и доступны для чтения
284
+ 4. Тестируйте с простыми конфигурациями сначала
285
+ 5. Сообщайте о проблемах с полной конфигурацией и логами ошибок