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,35 @@
1
+ {
2
+ "server": {
3
+ "host": "0.0.0.0",
4
+ "port": 8446,
5
+ "debug": false,
6
+ "log_level": "INFO"
7
+ },
8
+ "ssl": {
9
+ "enabled": true,
10
+ "cert_file": "./certs/server.crt",
11
+ "key_file": "./certs/server.key",
12
+ "ca_cert": "./certs/ca.crt",
13
+ "verify_client": true
14
+ },
15
+ "security": {
16
+ "enabled": true,
17
+ "auth": {
18
+ "enabled": true,
19
+ "methods": ["certificate"]
20
+ }
21
+ },
22
+ "protocols": {
23
+ "enabled": true,
24
+ "allowed_protocols": ["https", "mtls"]
25
+ },
26
+ "logging": {
27
+ "level": "INFO",
28
+ "console_output": true,
29
+ "file_output": false
30
+ },
31
+ "commands": {
32
+ "auto_discovery": true,
33
+ "commands_directory": "./commands"
34
+ }
35
+ }
@@ -0,0 +1,45 @@
1
+ {
2
+ "server": {
3
+ "host": "0.0.0.0",
4
+ "port": 9444,
5
+ "debug": false,
6
+ "log_level": "INFO"
7
+ },
8
+ "ssl": {
9
+ "enabled": true,
10
+ "cert_file": "./certs/server.crt",
11
+ "key_file": "./certs/server.key",
12
+ "ca_cert": "./certs/ca.crt",
13
+ "verify_client": true,
14
+ "client_cert_required": true
15
+ },
16
+ "security": {
17
+ "enabled": true,
18
+ "auth": {
19
+ "enabled": true,
20
+ "methods": ["certificate"],
21
+ "certificate_auth": true
22
+ },
23
+ "permissions": {
24
+ "enabled": true,
25
+ "roles_file": "./roles.json",
26
+ "default_role": "user",
27
+ "deny_by_default": true
28
+ },
29
+ "rate_limit": {
30
+ "enabled": true,
31
+ "requests_per_minute": 60,
32
+ "requests_per_hour": 1000,
33
+ "burst_limit": 10
34
+ }
35
+ },
36
+ "logging": {
37
+ "level": "INFO",
38
+ "console_output": true,
39
+ "file_output": false
40
+ },
41
+ "commands": {
42
+ "auto_discovery": true,
43
+ "commands_directory": "./commands"
44
+ }
45
+ }
@@ -0,0 +1,63 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Basic Framework Example Application
4
+
5
+ This is a simple application that demonstrates the basic usage of MCP Proxy Adapter framework.
6
+
7
+ Author: Vasiliy Zdanovskiy
8
+ email: vasilyvz@gmail.com
9
+ """
10
+
11
+ import sys
12
+ import argparse
13
+ from pathlib import Path
14
+
15
+ # Add the framework to the path
16
+ sys.path.insert(0, str(Path(__file__).parent.parent.parent))
17
+
18
+ from mcp_proxy_adapter.api.app import create_app
19
+ from mcp_proxy_adapter.config import Config
20
+
21
+
22
+ def main():
23
+ """Main entry point for the basic framework example."""
24
+ parser = argparse.ArgumentParser(description="Basic Framework Example")
25
+ parser.add_argument("--config", "-c", required=True, help="Path to configuration file")
26
+ parser.add_argument("--host", default="0.0.0.0", help="Server host")
27
+ parser.add_argument("--port", type=int, help="Server port (overrides config)")
28
+ parser.add_argument("--debug", action="store_true", help="Enable debug mode")
29
+
30
+ args = parser.parse_args()
31
+
32
+ # Load configuration
33
+ config = Config(args.config)
34
+
35
+ # Override port if specified
36
+ if args.port:
37
+ config.set("server.port", args.port)
38
+
39
+ # Override debug if specified
40
+ if args.debug:
41
+ config.set("server.debug", True)
42
+
43
+ # Create application
44
+ app = create_app(app_config=config)
45
+
46
+ # Get server configuration
47
+ host = config.get("server.host", "0.0.0.0")
48
+ port = config.get("server.port", 8000)
49
+ debug = config.get("server.debug", False)
50
+
51
+ print(f"🚀 Starting Basic Framework Example")
52
+ print(f"📋 Configuration: {args.config}")
53
+ print(f"🌐 Server: {host}:{port}")
54
+ print(f"🔧 Debug: {debug}")
55
+ print("=" * 50)
56
+
57
+ # Import uvicorn here to avoid dependency issues
58
+ import uvicorn
59
+ uvicorn.run(app, host=host, port=port, log_level="info")
60
+
61
+
62
+ if __name__ == "__main__":
63
+ main()
@@ -0,0 +1,21 @@
1
+ {
2
+ "roles": {
3
+ "admin": {
4
+ "permissions": ["*"],
5
+ "description": "Administrator with full access"
6
+ },
7
+ "user": {
8
+ "permissions": ["read", "write"],
9
+ "description": "Regular user with read/write access"
10
+ },
11
+ "readonly": {
12
+ "permissions": ["read"],
13
+ "description": "Read-only user"
14
+ }
15
+ },
16
+ "user_roles": {
17
+ "admin": "admin",
18
+ "user": "user",
19
+ "readonly": "readonly"
20
+ }
21
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "ca_cert_path": "./mcp_proxy_adapter/examples/certs/ca_cert.pem",
3
+ "ca_key_path": "./mcp_proxy_adapter/examples/keys/ca_key.pem",
4
+ "cert_storage_path": "./mcp_proxy_adapter/examples/certs",
5
+ "key_storage_path": "./mcp_proxy_adapter/examples/keys",
6
+ "default_validity_days": 365,
7
+ "key_size": 2048,
8
+ "hash_algorithm": "sha256"
9
+ }
@@ -0,0 +1,32 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIFiTCCA3GgAwIBAgIUPVpLYroRXKLuF9TdHA/Utkb1RPwwDQYJKoZIhvcNAQEL
3
+ BQAwVDELMAkGA1UEBhMCVVMxDjAMBgNVBAgMBVN0YXRlMQ0wCwYDVQQHDARDaXR5
4
+ MRUwEwYDVQQKDAxPcmdhbml6YXRpb24xDzANBgNVBAMMBmNsaWVudDAeFw0yNTA4
5
+ MjkyMTQxMTFaFw0yNjA4MjkyMTQxMTFaMFQxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI
6
+ DAVTdGF0ZTENMAsGA1UEBwwEQ2l0eTEVMBMGA1UECgwMT3JnYW5pemF0aW9uMQ8w
7
+ DQYDVQQDDAZjbGllbnQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC7
8
+ TiO+GxCPckjjxFgSM0aFVOesQlPhp1Z8JDGWvHyIQ308DBkMwUWn/FwoLtQ1O2WP
9
+ 4wNCLD1ytE4HN1CrTZWbL+D+8SglEIWU1dpDf262irffj+ILEtIAfP5GPLN+g/2x
10
+ JsSGlARQKeeNVwNdNDIttqLXGoyM2s1lA0aRKqi+LshOpETl0wQLGtUfPi8A1aaN
11
+ gA5OVLtuu1jW4UrPRP7o1zA3fK5gk+HCkTb6Rh7f8P1+hPo0V9+65uCq/80tY8Aw
12
+ W4+VZL2vpXFPjObadb2uHSVvRl09ypbv9q6PG1pCZ5wkigTeW+nB/qquBs+HjYjR
13
+ 1I9qOu46zpKCxuR1dpAP6fAW+HoJtl/eKy2PbuHSzihJjDpAek3KmqMjoFpfgP0A
14
+ 6j5k9n623gK2oLZhZmyuK3DeelpoXmxX2xvNg6rxFa4fLDHzArbg9V5BMh6z14ML
15
+ czqDK6QEid1d1KqZJOeSuv5imt9qjyweLxtIlwHXhb330K3zPudjinn34FDjVVUi
16
+ rdq4se6nKlxIYQbBtrR1Cidl27kIx0BPK+hMGxZAa6sKVp0C3oU25Iw+xzu6ggkn
17
+ FWb3mZq4wdM061nE+7SNJ/ggErwekE43x01/RRaw0gPqGgLlUmezDDAdTPYSJwp+
18
+ UEyFjVO9E4iZZw3mCxWtMM4O+ne1dZy4J+Fef0YVmQIDAQABo1MwUTAdBgNVHQ4E
19
+ FgQUKrCEMyTAojlwKfK/ppgDzdp3fDQwHwYDVR0jBBgwFoAUKrCEMyTAojlwKfK/
20
+ ppgDzdp3fDQwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAaVAt
21
+ +pTjlkInJbz+cWTbD5Dive1kTwkH1NBOMH1H/xotM37bRWrmXP8NZ7b+ez1NPplN
22
+ av3ok07kXIi2ybvmrOIsRubMJnGkS0pfrmd49VzDbzE2nQ4zQ1sg7LoMR3hlzjvG
23
+ jGIVcKEZ6vyiHU6yPB8IEP8Ye9HcC0IK/Q2JrYoTVxnYEGKdiZ7D8zp4R/jtOk2v
24
+ q67+0R1hbPDe9KwZfuiDjhofuDjBjpPYWyg74SPjspZegQVy2z7dXKZop7AT+TXx
25
+ 8P4RDVrENXqOByzj4Xboq2F8KdxQrxnhjfbeu45vwEMeZQAzuJNnmT/aAm2XEZ4M
26
+ EmtUOgL8B1+bagqxcS0KK4QDIvGe/uedXzMcszkTvMqRpd7Xpwjqz189575w9Loa
27
+ SnFSZElj9Koy1s2njTXgikKioMFEcnN0Ia2pJ4iCzNVOE34pCjCZhroH2luZDWB2
28
+ lFcwNKi1q2C6RDCuyWi13clnC9bexw9enZYgI5Z8hQEWF2lCgCL32Dfb4qZZoFvv
29
+ gBbDpkoM6nE9PShy1VMa5OY1VKIVNr+1ga/lwpjKNj6UZB0h4r6uFrecTM3dElNZ
30
+ VrhHt/EOJzfJ9D2np1TdDQejT8z/P8xp0YhQ0IoZcpVI1o9Mnjh1V6sqhu4kxGj5
31
+ jfCGEnYPm1kqNuHPP4Kh04E+lUHO+NgiWcw4c64=
32
+ -----END CERTIFICATE-----
@@ -0,0 +1,52 @@
1
+ -----BEGIN PRIVATE KEY-----
2
+ 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
51
+ 0CvyxEnB8U5QYN1JslvBezOToHARkA==
52
+ -----END PRIVATE KEY-----
@@ -0,0 +1,21 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIDZjCCAk4CFHd9bUvLEIc95/KliRyeTqeeIfRxMA0GCSqGSIb3DQEBCwUAMHYx
3
+ CzAJBgNVBAYTAlVTMRMwEQYDVQQIDApUZXN0IFN0YXRlMRIwEAYDVQQHDAlUZXN0
4
+ IENpdHkxGjAYBgNVBAoMEVRlc3QgT3JnYW5pemF0aW9uMSIwIAYDVQQDDBlNQ1Ag
5
+ UHJveHkgQWRhcHRlciBUZXN0IENBMB4XDTI1MDgzMDAxMDUyNVoXDTI3MDgzMDAx
6
+ MDUyNVowaTELMAkGA1UEBhMCVVMxEzARBgNVBAgMClRlc3QgU3RhdGUxEjAQBgNV
7
+ BAcMCVRlc3QgQ2l0eTEaMBgGA1UECgwRVGVzdCBPcmdhbml6YXRpb24xFTATBgNV
8
+ BAMMDGFkbWluLWNsaWVudDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
9
+ ALH0MedEYl/Mv0x4Z51t/w9jK30cP87I4yXG5oLu174uTCAo/pCpukqYfLdtcPFq
10
+ dYKwr9v1GNDdLtR5dX3vzvTISXjp5d5ohpDE6BFXBylNoR4m+k5SbixIix6u46Lb
11
+ oMI7BK7pKcoY4mgNRj/cqKeGaFKp577nh7Dv30rY0I+2wZ8h8tM/TdFaHZEdyWlx
12
+ vC7gBsu2dsRaLMLUkbPKQSiOYxPnAYWM1MgH6VNqbb0Sn8FP6vxVTgXDOaGGuE6n
13
+ l8mOmDdR2NaBMjEGbLHdPdTpFOxcQ+lx/1GGSIp1WTsoSuEfctbYK4KeGhwwK3d/
14
+ BOlIYDn6S7qvxhlP139WsuECAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAf09+h1cm
15
+ ju11e8Y3mfoPWOX6kG7oWHK24tUnuwXzaRV70PwxDBFWVsI/e6Cwn7m7uTMFW1kG
16
+ sZMrZN8cAlHrvtBYIS5oBgRLUrRYc3OYBTTmuVCoEcZZnVQzjx/dEdpPwfD3c53m
17
+ nSV57hvarZgO1tRfEyjdJAu4PXPne16EydHvotN5Co4kdohPaj659h0wBiM0johN
18
+ oE4lmMkvIpbpXhKA+OqO4DcY6g3PVMAnRS/INi1bTfJnNL5ZgCLSUqtyePPLFn7c
19
+ fU4C5XPrDXfyrTmC7nXpsomIusMWr2hK3SjLpgtVMMBflCQE9Ziq/zwkKIl1E5LN
20
+ BXtRdxhSZ9h6gA==
21
+ -----END CERTIFICATE-----
@@ -0,0 +1,28 @@
1
+ -----BEGIN PRIVATE KEY-----
2
+ MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCx9DHnRGJfzL9M
3
+ eGedbf8PYyt9HD/OyOMlxuaC7te+LkwgKP6QqbpKmHy3bXDxanWCsK/b9RjQ3S7U
4
+ eXV97870yEl46eXeaIaQxOgRVwcpTaEeJvpOUm4sSIseruOi26DCOwSu6SnKGOJo
5
+ DUY/3KinhmhSqee+54ew799K2NCPtsGfIfLTP03RWh2RHclpcbwu4AbLtnbEWizC
6
+ 1JGzykEojmMT5wGFjNTIB+lTam29Ep/BT+r8VU4FwzmhhrhOp5fJjpg3UdjWgTIx
7
+ Bmyx3T3U6RTsXEPpcf9RhkiKdVk7KErhH3LW2CuCnhocMCt3fwTpSGA5+ku6r8YZ
8
+ T9d/VrLhAgMBAAECggEABdwSoJjh3GGzkuMMFmT+1xTe47nAaCC5Sg8om/sdY4fG
9
+ vfBboYvVNIuc37Vc2LY2tFz5DXceoBIIbrqpIcJ5wBmwQakCBrbOZ4n0Uk3ZUITb
10
+ 31BNQbL5KcAhxJrhqAUvX/Xti4zl8V+sZNy7CXNMomeMm9w4Y1LgZvUfFynYhELk
11
+ ITF9ZgaZ6eCogDPb3rtx5GMwwzEeA5qRK0IYCrRBwdlMbyVj+UBe5mJf/x3UIESo
12
+ avS817UDZuWdAsWpMaDclkMLPJ1DiwMJ9zkBiloqvGoJQ6VUZKK5iluSHoWzxpbn
13
+ /JBoYRTUj79tQCaHO+0VvqXH79FDZgDpYRMzgj3lmQKBgQD0r6ldWGrI+aZ594pF
14
+ S8nVHLBNuUcWZUo5SIARfmEj2pyid8kITZA7H9tSx2yKahaIibW2ttLLyc5EHgHb
15
+ wXQ20dbB7fg9b6uY9IDpPgzDVxvRCgGlHJHX58zxzts2fNeUCKyiQpddBQewMvEn
16
+ 69OqfYwNxns+rZPGKyUHzouMawKBgQC6LqBfcVcEbg39Lksk5+E+o38RSUFxXkgW
17
+ 2Y62NWALQqsELN1OjhHvdE0MDJsKsoGVuIhvDvU1nGZg8gA9Mwlb2hrVJAqU9or7
18
+ 53fmOjIZYmz6IpSBnzCQJuxK2+PjH781IQCVFpnR+xkGE4ELUjci7ztsH110G4uV
19
+ Z1Yo9xeQ4wKBgQCIkd8jFa2MfSM5IjwPz2xYwYl56DbQPjq+XEP2/6XyYBta5ybS
20
+ tpARIAfHXT2sx+fJz6sXz1U6n2m8RU9eO8zEqDyIw2zxxXluhtHI3XQ8N0t0UnR2
21
+ lsqkSmHueTmLYQTmQC0y554aMiuHYfeOA6eBmk9ohObXJgS77+rcP6FN/wKBgEok
22
+ 1WMM7N1rwpBoBi7dVRsv2yOUK8atCEJpQ2cWnHf/hcF06HEnLMdSZnh88KVy7x4j
23
+ zdmEeGxwK2lCFoxIrdpxYiwtXTVzdWfaByqdVGQ9iS6X5NI2Bg3yIjmxlfBWLTxI
24
+ N0YoKPuxZoa/760FgcWcxepKF1psucq2y14nALCHAoGBAJygJKKnqAlztAMqXtRE
25
+ t9T1ZsZ9GefqzSNmjcsfDfIaqoMOJlG/exu1Dr6uU4k9nLjywB5wKqonwONAIzlK
26
+ CGT44GLfC3lntnmGoJQBIZdfHnUnhM6dhrR0hjK83z1+7205dVxpcKue4gn90PNI
27
+ 36Avt5FO+riYepF+c4BkjmVq
28
+ -----END PRIVATE KEY-----
@@ -0,0 +1,23 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIDzTCCArWgAwIBAgIUW7pAGuHK3Txi9paH8K88gFllZUQwDQYJKoZIhvcNAQEL
3
+ BQAwdjELMAkGA1UEBhMCVVMxEzARBgNVBAgMClRlc3QgU3RhdGUxEjAQBgNVBAcM
4
+ CVRlc3QgQ2l0eTEaMBgGA1UECgwRVGVzdCBPcmdhbml6YXRpb24xIjAgBgNVBAMM
5
+ GU1DUCBQcm94eSBBZGFwdGVyIFRlc3QgQ0EwHhcNMjUwODMwMDEwNTI1WhcNMzUw
6
+ ODI4MDEwNTI1WjB2MQswCQYDVQQGEwJVUzETMBEGA1UECAwKVGVzdCBTdGF0ZTES
7
+ MBAGA1UEBwwJVGVzdCBDaXR5MRowGAYDVQQKDBFUZXN0IE9yZ2FuaXphdGlvbjEi
8
+ MCAGA1UEAwwZTUNQIFByb3h5IEFkYXB0ZXIgVGVzdCBDQTCCASIwDQYJKoZIhvcN
9
+ AQEBBQADggEPADCCAQoCggEBAMuUkxEl6WpfDYQAdB/wqfFJuKpjwR7arkbvGODJ
10
+ qYFp7gd05wKgu7gYDua9KYFkO+Po25WN1gqEpgdPN9PVpeDDH0NnKQMH38Cls9gU
11
+ 7eud27RznHFJPyImq0uTlgn7IzTisK/eaJCF1I1mM2UieKELm6g5etXJSCuDEqM7
12
+ GGS51bUIhoiBoiVslx+199TMS1x9iBIxzQncRlcTd+9f73GpYxZ+lyh+1Ywdmlxt
13
+ X7V2R7ryz6LkX73xMQbYnFuaWReA2rTFF1alydWixTixjF8qIoJY3lFSW6bH1eHU
14
+ yXDib8LfxmAzf8NZL7R0CXmvhDSU5sEXR6PnhTgFWAww48kCAwEAAaNTMFEwHQYD
15
+ VR0OBBYEFN+4HO/tMjbRNtCGRT5QcYdnq891MB8GA1UdIwQYMBaAFN+4HO/tMjbR
16
+ NtCGRT5QcYdnq891MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
17
+ AJxk5WwynoIYKhpq0LL7gM563Xoy/Vpq5d5Vg0QUg7tpkyXtzTqIj8ArgCP3kB3Z
18
+ K3VPVtxo5V4w/T4gfSxo+y9du6XFSdVroZZixiI6qYp18L5jAx2I4Q9ZBh7mVcjd
19
+ dbS674Cg3/tyNyq9DMyV+bUwEzcq9oqbU0JPu+DABtype/bL1q5itTelOXDDTr7U
20
+ hDt2/KME3PVh6Skw9TC0d1hUCtz06MNEO24GJvcidcf26II99RR+JV0X5c+xgiFX
21
+ hZXUvr+cSrSJ3QeY1fR5Im/dU4sqdYgvtvwnvIv5RC/qh0AphdcLnY+nDcaJL4m8
22
+ uaFMSt/YXh7G00rtHWifJ7k=
23
+ -----END CERTIFICATE-----
@@ -0,0 +1 @@
1
+ 777D6D4BCB10873DE7F2A5891C9E4EA79E21F475
@@ -0,0 +1,28 @@
1
+ -----BEGIN PRIVATE KEY-----
2
+ MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDWjQzvziU+/Y+S
3
+ wXDHXvcG5/ZV3C/R/9JhKZCAJ2g28Dg97Xjf9L8hh+Wzpkj3wDJL2Ho76nMegO5V
4
+ +m/HFVabSA/dn4bxOGqL5v7AXkQrdWRATYMRmGG6lS1NZC6pHRuD/Oun76Jv9aiN
5
+ QyYkLR3iFY8+pQTFhJX2MOO99gmPtAPmy3l3Zu1l2S87TB5Lv8MGuhSuPoNTWzND
6
+ hKP06oX6BCpqmqgkgo0Moy7SaVWAxviyZFjv/SbxUVU1kXqXJpUFoyCHX4ocQqNT
7
+ iGl+M2q0VZm9slhNuisoR7RfAx8eEBcPebOIlqzHBvq3hGgYeWWjnW34OrNwmhx1
8
+ kAPu3CRhAgMBAAECggEACi6y4NAGzSuEMdyDuWKUv2Yo4cBLy1/5yxS0P/DJgw9O
9
+ 4VmGNWgh3g8wuUr4sZFp5wGaI4J9U4Lzohmlo8GBKmjMH/eJ6aQvd6j53tqvyjmN
10
+ uCOK8eh/0uFw6fhe4osixYEuafpMhPBtacQ4aNp0ovM6U33KG9musvrKWYygvYog
11
+ /FUsR/3iUx0FK2Bpa9O7BDNpau7QdBwXyoQAv/BY+lGysdtfwuJOiQdIxg2if15v
12
+ QUgryNV+x6v2mmVV/wiJ/H+3D1Els+BQG5DA3s0IjblEKYKryA6xM5WdSLUCADt4
13
+ gE5V4yJ652iHPGd9X0OZ3wKEz55HJecIW6O8UORQsQKBgQD3uYdVLLMReZxV2tfk
14
+ hoIJ2HEtiJjCmvjnL5fSbLGVTnkCi/S94X02UsKeHnrkzR/QCRzSBKdOkPZXinMZ
15
+ cDYv4z7rNolBMc2Itqq27g5Yxu0NpJ1303QOc3m97O37X8y6r+TYj8frRJrx7iG1
16
+ 9N11j99ZoP9vH2LHcdDubcDL5QKBgQDdt9RYwyFo/vmi8I1KdYBScNXXujf6spPa
17
+ jgeZ3tP8Dkhuf2oABjflK7G4ySIAPl9BDBgc9paY4IcHkgw2YJd5pyYMaCrk4mPg
18
+ NnYCthGIxSzpeqfaFIEavE8/zxeT9jhTh7ScFCFqaUFtzzlzjTzc54MNm5fhc9oq
19
+ 2I4rl9OGzQKBgQCbjSQtl6PZlUNVpdVq6gs9o2tt7BgAGs+wW3I574aS+nOB5eAI
20
+ W08EjXMnVnxUr3kKaK5wMfvcmaoVzhn4Hz3nVApuKBCHn34wGoOX2mOn20F/D57R
21
+ XzXA3UHUwLGu5rjngQtx8NbYJHwm7iC84MUuzOiynyXF4S9ljVJkZQZrAQKBgGOg
22
+ /DlajYPJt1FBeKvxutTQwTasBgWQAyJdWgsJdwY3QNLuTCpwoONIzBZ1wuKLJHBt
23
+ R9ST9b4CfoqnVPeGVeqjclR25ndtR2Xz8vlq6NwlhfXwWMaFGjJyVcYdf8HMDSlz
24
+ vHO6E/3mCDGYwX8sAyJcoaYWuZvkXC+Omev60GEtAoGAeryzTJzl8DHbDKk/3Zvv
25
+ Zo6CbiPh2iBdb6PoPL4cSg/NBDNuHrnWPr/N0RZ5D/cNfA8cv20I1tWBPr+X6r3F
26
+ 2QQKSVt89JqfWJ1Xpj2Nxpnfa3QGFiQFCG5/366rZgASaQsuZNTAVgpbMEpwCjzI
27
+ t0rl84AcRvCvzc67//51jZg=
28
+ -----END PRIVATE KEY-----
@@ -0,0 +1,9 @@
1
+ {
2
+ "ca_cert_path": "/home/vasilyvz/projects/mcp_proxy_adapter/mcp_proxy_adapter/examples/certs/ca_cert.pem",
3
+ "ca_key_path": "/home/vasilyvz/projects/mcp_proxy_adapter/mcp_proxy_adapter/examples/keys/ca_key.pem",
4
+ "cert_storage_path": "/home/vasilyvz/projects/mcp_proxy_adapter/mcp_proxy_adapter/examples/certs",
5
+ "key_storage_path": "/home/vasilyvz/projects/mcp_proxy_adapter/mcp_proxy_adapter/examples/keys",
6
+ "default_validity_days": 365,
7
+ "key_size": 2048,
8
+ "hash_algorithm": "sha256"
9
+ }
@@ -0,0 +1,32 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIFiTCCA3GgAwIBAgIUPVpLYroRXKLuF9TdHA/Utkb1RPwwDQYJKoZIhvcNAQEL
3
+ BQAwVDELMAkGA1UEBhMCVVMxDjAMBgNVBAgMBVN0YXRlMQ0wCwYDVQQHDARDaXR5
4
+ MRUwEwYDVQQKDAxPcmdhbml6YXRpb24xDzANBgNVBAMMBmNsaWVudDAeFw0yNTA4
5
+ MjkyMTQxMTFaFw0yNjA4MjkyMTQxMTFaMFQxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI
6
+ DAVTdGF0ZTENMAsGA1UEBwwEQ2l0eTEVMBMGA1UECgwMT3JnYW5pemF0aW9uMQ8w
7
+ DQYDVQQDDAZjbGllbnQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC7
8
+ TiO+GxCPckjjxFgSM0aFVOesQlPhp1Z8JDGWvHyIQ308DBkMwUWn/FwoLtQ1O2WP
9
+ 4wNCLD1ytE4HN1CrTZWbL+D+8SglEIWU1dpDf262irffj+ILEtIAfP5GPLN+g/2x
10
+ JsSGlARQKeeNVwNdNDIttqLXGoyM2s1lA0aRKqi+LshOpETl0wQLGtUfPi8A1aaN
11
+ gA5OVLtuu1jW4UrPRP7o1zA3fK5gk+HCkTb6Rh7f8P1+hPo0V9+65uCq/80tY8Aw
12
+ W4+VZL2vpXFPjObadb2uHSVvRl09ypbv9q6PG1pCZ5wkigTeW+nB/qquBs+HjYjR
13
+ 1I9qOu46zpKCxuR1dpAP6fAW+HoJtl/eKy2PbuHSzihJjDpAek3KmqMjoFpfgP0A
14
+ 6j5k9n623gK2oLZhZmyuK3DeelpoXmxX2xvNg6rxFa4fLDHzArbg9V5BMh6z14ML
15
+ czqDK6QEid1d1KqZJOeSuv5imt9qjyweLxtIlwHXhb330K3zPudjinn34FDjVVUi
16
+ rdq4se6nKlxIYQbBtrR1Cidl27kIx0BPK+hMGxZAa6sKVp0C3oU25Iw+xzu6ggkn
17
+ FWb3mZq4wdM061nE+7SNJ/ggErwekE43x01/RRaw0gPqGgLlUmezDDAdTPYSJwp+
18
+ UEyFjVO9E4iZZw3mCxWtMM4O+ne1dZy4J+Fef0YVmQIDAQABo1MwUTAdBgNVHQ4E
19
+ FgQUKrCEMyTAojlwKfK/ppgDzdp3fDQwHwYDVR0jBBgwFoAUKrCEMyTAojlwKfK/
20
+ ppgDzdp3fDQwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAaVAt
21
+ +pTjlkInJbz+cWTbD5Dive1kTwkH1NBOMH1H/xotM37bRWrmXP8NZ7b+ez1NPplN
22
+ av3ok07kXIi2ybvmrOIsRubMJnGkS0pfrmd49VzDbzE2nQ4zQ1sg7LoMR3hlzjvG
23
+ jGIVcKEZ6vyiHU6yPB8IEP8Ye9HcC0IK/Q2JrYoTVxnYEGKdiZ7D8zp4R/jtOk2v
24
+ q67+0R1hbPDe9KwZfuiDjhofuDjBjpPYWyg74SPjspZegQVy2z7dXKZop7AT+TXx
25
+ 8P4RDVrENXqOByzj4Xboq2F8KdxQrxnhjfbeu45vwEMeZQAzuJNnmT/aAm2XEZ4M
26
+ EmtUOgL8B1+bagqxcS0KK4QDIvGe/uedXzMcszkTvMqRpd7Xpwjqz189575w9Loa
27
+ SnFSZElj9Koy1s2njTXgikKioMFEcnN0Ia2pJ4iCzNVOE34pCjCZhroH2luZDWB2
28
+ lFcwNKi1q2C6RDCuyWi13clnC9bexw9enZYgI5Z8hQEWF2lCgCL32Dfb4qZZoFvv
29
+ gBbDpkoM6nE9PShy1VMa5OY1VKIVNr+1ga/lwpjKNj6UZB0h4r6uFrecTM3dElNZ
30
+ VrhHt/EOJzfJ9D2np1TdDQejT8z/P8xp0YhQ0IoZcpVI1o9Mnjh1V6sqhu4kxGj5
31
+ jfCGEnYPm1kqNuHPP4Kh04E+lUHO+NgiWcw4c64=
32
+ -----END CERTIFICATE-----
@@ -0,0 +1,52 @@
1
+ -----BEGIN PRIVATE KEY-----
2
+ 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
51
+ 0CvyxEnB8U5QYN1JslvBezOToHARkA==
52
+ -----END PRIVATE KEY-----
@@ -0,0 +1,32 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIFiTCCA3GgAwIBAgIUPVpLYroRXKLuF9TdHA/Utkb1RPwwDQYJKoZIhvcNAQEL
3
+ BQAwVDELMAkGA1UEBhMCVVMxDjAMBgNVBAgMBVN0YXRlMQ0wCwYDVQQHDARDaXR5
4
+ MRUwEwYDVQQKDAxPcmdhbml6YXRpb24xDzANBgNVBAMMBmNsaWVudDAeFw0yNTA4
5
+ MjkyMTQxMTFaFw0yNjA4MjkyMTQxMTFaMFQxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI
6
+ DAVTdGF0ZTENMAsGA1UEBwwEQ2l0eTEVMBMGA1UECgwMT3JnYW5pemF0aW9uMQ8w
7
+ DQYDVQQDDAZjbGllbnQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC7
8
+ TiO+GxCPckjjxFgSM0aFVOesQlPhp1Z8JDGWvHyIQ308DBkMwUWn/FwoLtQ1O2WP
9
+ 4wNCLD1ytE4HN1CrTZWbL+D+8SglEIWU1dpDf262irffj+ILEtIAfP5GPLN+g/2x
10
+ JsSGlARQKeeNVwNdNDIttqLXGoyM2s1lA0aRKqi+LshOpETl0wQLGtUfPi8A1aaN
11
+ gA5OVLtuu1jW4UrPRP7o1zA3fK5gk+HCkTb6Rh7f8P1+hPo0V9+65uCq/80tY8Aw
12
+ W4+VZL2vpXFPjObadb2uHSVvRl09ypbv9q6PG1pCZ5wkigTeW+nB/qquBs+HjYjR
13
+ 1I9qOu46zpKCxuR1dpAP6fAW+HoJtl/eKy2PbuHSzihJjDpAek3KmqMjoFpfgP0A
14
+ 6j5k9n623gK2oLZhZmyuK3DeelpoXmxX2xvNg6rxFa4fLDHzArbg9V5BMh6z14ML
15
+ czqDK6QEid1d1KqZJOeSuv5imt9qjyweLxtIlwHXhb330K3zPudjinn34FDjVVUi
16
+ rdq4se6nKlxIYQbBtrR1Cidl27kIx0BPK+hMGxZAa6sKVp0C3oU25Iw+xzu6ggkn
17
+ FWb3mZq4wdM061nE+7SNJ/ggErwekE43x01/RRaw0gPqGgLlUmezDDAdTPYSJwp+
18
+ UEyFjVO9E4iZZw3mCxWtMM4O+ne1dZy4J+Fef0YVmQIDAQABo1MwUTAdBgNVHQ4E
19
+ FgQUKrCEMyTAojlwKfK/ppgDzdp3fDQwHwYDVR0jBBgwFoAUKrCEMyTAojlwKfK/
20
+ ppgDzdp3fDQwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAaVAt
21
+ +pTjlkInJbz+cWTbD5Dive1kTwkH1NBOMH1H/xotM37bRWrmXP8NZ7b+ez1NPplN
22
+ av3ok07kXIi2ybvmrOIsRubMJnGkS0pfrmd49VzDbzE2nQ4zQ1sg7LoMR3hlzjvG
23
+ jGIVcKEZ6vyiHU6yPB8IEP8Ye9HcC0IK/Q2JrYoTVxnYEGKdiZ7D8zp4R/jtOk2v
24
+ q67+0R1hbPDe9KwZfuiDjhofuDjBjpPYWyg74SPjspZegQVy2z7dXKZop7AT+TXx
25
+ 8P4RDVrENXqOByzj4Xboq2F8KdxQrxnhjfbeu45vwEMeZQAzuJNnmT/aAm2XEZ4M
26
+ EmtUOgL8B1+bagqxcS0KK4QDIvGe/uedXzMcszkTvMqRpd7Xpwjqz189575w9Loa
27
+ SnFSZElj9Koy1s2njTXgikKioMFEcnN0Ia2pJ4iCzNVOE34pCjCZhroH2luZDWB2
28
+ lFcwNKi1q2C6RDCuyWi13clnC9bexw9enZYgI5Z8hQEWF2lCgCL32Dfb4qZZoFvv
29
+ gBbDpkoM6nE9PShy1VMa5OY1VKIVNr+1ga/lwpjKNj6UZB0h4r6uFrecTM3dElNZ
30
+ VrhHt/EOJzfJ9D2np1TdDQejT8z/P8xp0YhQ0IoZcpVI1o9Mnjh1V6sqhu4kxGj5
31
+ jfCGEnYPm1kqNuHPP4Kh04E+lUHO+NgiWcw4c64=
32
+ -----END CERTIFICATE-----
@@ -0,0 +1,52 @@
1
+ -----BEGIN PRIVATE KEY-----
2
+ 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
51
+ 0CvyxEnB8U5QYN1JslvBezOToHARkA==
52
+ -----END PRIVATE KEY-----
@@ -0,0 +1,32 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIFiTCCA3GgAwIBAgIUPVpLYroRXKLuF9TdHA/Utkb1RPwwDQYJKoZIhvcNAQEL
3
+ BQAwVDELMAkGA1UEBhMCVVMxDjAMBgNVBAgMBVN0YXRlMQ0wCwYDVQQHDARDaXR5
4
+ MRUwEwYDVQQKDAxPcmdhbml6YXRpb24xDzANBgNVBAMMBmNsaWVudDAeFw0yNTA4
5
+ MjkyMTQxMTFaFw0yNjA4MjkyMTQxMTFaMFQxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI
6
+ DAVTdGF0ZTENMAsGA1UEBwwEQ2l0eTEVMBMGA1UECgwMT3JnYW5pemF0aW9uMQ8w
7
+ DQYDVQQDDAZjbGllbnQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC7
8
+ TiO+GxCPckjjxFgSM0aFVOesQlPhp1Z8JDGWvHyIQ308DBkMwUWn/FwoLtQ1O2WP
9
+ 4wNCLD1ytE4HN1CrTZWbL+D+8SglEIWU1dpDf262irffj+ILEtIAfP5GPLN+g/2x
10
+ JsSGlARQKeeNVwNdNDIttqLXGoyM2s1lA0aRKqi+LshOpETl0wQLGtUfPi8A1aaN
11
+ gA5OVLtuu1jW4UrPRP7o1zA3fK5gk+HCkTb6Rh7f8P1+hPo0V9+65uCq/80tY8Aw
12
+ W4+VZL2vpXFPjObadb2uHSVvRl09ypbv9q6PG1pCZ5wkigTeW+nB/qquBs+HjYjR
13
+ 1I9qOu46zpKCxuR1dpAP6fAW+HoJtl/eKy2PbuHSzihJjDpAek3KmqMjoFpfgP0A
14
+ 6j5k9n623gK2oLZhZmyuK3DeelpoXmxX2xvNg6rxFa4fLDHzArbg9V5BMh6z14ML
15
+ czqDK6QEid1d1KqZJOeSuv5imt9qjyweLxtIlwHXhb330K3zPudjinn34FDjVVUi
16
+ rdq4se6nKlxIYQbBtrR1Cidl27kIx0BPK+hMGxZAa6sKVp0C3oU25Iw+xzu6ggkn
17
+ FWb3mZq4wdM061nE+7SNJ/ggErwekE43x01/RRaw0gPqGgLlUmezDDAdTPYSJwp+
18
+ UEyFjVO9E4iZZw3mCxWtMM4O+ne1dZy4J+Fef0YVmQIDAQABo1MwUTAdBgNVHQ4E
19
+ FgQUKrCEMyTAojlwKfK/ppgDzdp3fDQwHwYDVR0jBBgwFoAUKrCEMyTAojlwKfK/
20
+ ppgDzdp3fDQwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAaVAt
21
+ +pTjlkInJbz+cWTbD5Dive1kTwkH1NBOMH1H/xotM37bRWrmXP8NZ7b+ez1NPplN
22
+ av3ok07kXIi2ybvmrOIsRubMJnGkS0pfrmd49VzDbzE2nQ4zQ1sg7LoMR3hlzjvG
23
+ jGIVcKEZ6vyiHU6yPB8IEP8Ye9HcC0IK/Q2JrYoTVxnYEGKdiZ7D8zp4R/jtOk2v
24
+ q67+0R1hbPDe9KwZfuiDjhofuDjBjpPYWyg74SPjspZegQVy2z7dXKZop7AT+TXx
25
+ 8P4RDVrENXqOByzj4Xboq2F8KdxQrxnhjfbeu45vwEMeZQAzuJNnmT/aAm2XEZ4M
26
+ EmtUOgL8B1+bagqxcS0KK4QDIvGe/uedXzMcszkTvMqRpd7Xpwjqz189575w9Loa
27
+ SnFSZElj9Koy1s2njTXgikKioMFEcnN0Ia2pJ4iCzNVOE34pCjCZhroH2luZDWB2
28
+ lFcwNKi1q2C6RDCuyWi13clnC9bexw9enZYgI5Z8hQEWF2lCgCL32Dfb4qZZoFvv
29
+ gBbDpkoM6nE9PShy1VMa5OY1VKIVNr+1ga/lwpjKNj6UZB0h4r6uFrecTM3dElNZ
30
+ VrhHt/EOJzfJ9D2np1TdDQejT8z/P8xp0YhQ0IoZcpVI1o9Mnjh1V6sqhu4kxGj5
31
+ jfCGEnYPm1kqNuHPP4Kh04E+lUHO+NgiWcw4c64=
32
+ -----END CERTIFICATE-----
@@ -0,0 +1,52 @@
1
+ -----BEGIN PRIVATE KEY-----
2
+ MIIJQgIBADANBgkqhkiG9w0BAQEFAASCCSwwggkoAgEAAoICAQC7TiO+GxCPckjj
3
+ xFgSM0aFVOesQlPhp1Z8JDGWvHyIQ308DBkMwUWn/FwoLtQ1O2WP4wNCLD1ytE4H
4
+ N1CrTZWbL+D+8SglEIWU1dpDf262irffj+ILEtIAfP5GPLN+g/2xJsSGlARQKeeN
5
+ VwNdNDIttqLXGoyM2s1lA0aRKqi+LshOpETl0wQLGtUfPi8A1aaNgA5OVLtuu1jW
6
+ 4UrPRP7o1zA3fK5gk+HCkTb6Rh7f8P1+hPo0V9+65uCq/80tY8AwW4+VZL2vpXFP
7
+ jObadb2uHSVvRl09ypbv9q6PG1pCZ5wkigTeW+nB/qquBs+HjYjR1I9qOu46zpKC
8
+ xuR1dpAP6fAW+HoJtl/eKy2PbuHSzihJjDpAek3KmqMjoFpfgP0A6j5k9n623gK2
9
+ oLZhZmyuK3DeelpoXmxX2xvNg6rxFa4fLDHzArbg9V5BMh6z14MLczqDK6QEid1d
10
+ 1KqZJOeSuv5imt9qjyweLxtIlwHXhb330K3zPudjinn34FDjVVUirdq4se6nKlxI
11
+ YQbBtrR1Cidl27kIx0BPK+hMGxZAa6sKVp0C3oU25Iw+xzu6ggknFWb3mZq4wdM0
12
+ 61nE+7SNJ/ggErwekE43x01/RRaw0gPqGgLlUmezDDAdTPYSJwp+UEyFjVO9E4iZ
13
+ Zw3mCxWtMM4O+ne1dZy4J+Fef0YVmQIDAQABAoICABhJcF1boWDq8Y7wbCJmr1Zl
14
+ j9QTFlD/A49S8B0lW+5yoH/96kJFo1RovBhibhYS7r84Bo742+TjgpnxRGQEn4lW
15
+ WCcmj6KICxIlTUkNnTD35BIN1EJu/SJJaCfPrM89qn0N06jG85eOFMi2cii5NmfI
16
+ CUMOsw/ROpXGVXWdoZtmHIdZ9IG/xAPz8D4+BWvnHX1hOo78nKsl3sX0w4sEXXCa
17
+ n9VqCisFXIjVOdrnkbmkRB0OKBVLxFELU9wdvCCOZngUFJZLUESWFWRlFvVXvrHK
18
+ H2BXhYqYGiHhC3m3Pb5jiehmVG2dXxOjrm+kpsSNsnfRceEqkAO5ul9RDoQ5TJeS
19
+ YTdOatnLZHpvagNn+IqUjO97ozK0g4PN8ooCg67WvJOZ0jPe1L+43fFGztsx5/Dl
20
+ 2VQus22EWcPqiLdJe/xlzP+xFJI352pwrk9cqXKi6/e7H14eobHkFMBNOvMmK4L1
21
+ qoE28c3ivlbuDlY6kTz34OC790tK2h8PS/Uu6b/UMTy2aVnOj3z1RYfI7B+gT9ie
22
+ hXDf2dc2v5l/VqVDaPwHXBYHWM68rXaz1VZQdaZDOdcc9n/WEnsknR0ij1DTV85T
23
+ JnIsaAHsA1iOmrj/tP4cqNQNii+5xRsrEB687MYeIgN2B2RznXPx1hEC0fPSo77b
24
+ t+dDhFMI1nM9uHOC4AojAoIBAQD5139k5mVnAK2BTN4LGkYCdOq8+Pd4OC2KLZ8Q
25
+ 41VWoi1z36dxUpy/lS4xN8dRx0PaG45BX6tfNFTarsFQ8gFEVvEE3TnAP+2hvjpr
26
+ JzPpmS3Mzhvw3P8QooslQu1mswucGlfbA8pmi9TE12NpMoJfDHQv4h6K0ANKhwFL
27
+ OJzwqxxw2d7Tqj0FNUAoUqKo6VIcKxOFg/FQbV04DfcpXtWXdMWZQIO+TJzEb24g
28
+ +KvXHNdDN10GsXp9Xgixxw9cSdT78mthlwD/Dt39b6dqhGF/Qv9ROqCXtGM6U+uT
29
+ yT9Xg8dhjYDwXy+ByjMbbJKTSoL7H3D7JYYDRL7NLta87URTAoIBAQC/7AlBYUvI
30
+ 0uv2BBh5Xam2l6YmMPZFyNMUg//U5efDxoyOMzqCWNEC4NkvFm2sTEfGepKK5uYx
31
+ 6o52fkEtcoCXZxJV5ZPLZTD4X3tOzsBSNnHfv7zXPSg8IZ8ldWL040p89AMS8/od
32
+ 0w2CTqbEZbjh7pW5G0N5lJrGlrMyKQcELP9BOVbpPTGsImVpHNxO4pdRW3NUi0Sq
33
+ HjSyc5TQMIcpV7snggAFxSFZXVLwBRZ74mKlL3RHBA7uwiutap8CRjFDFICvX0cR
34
+ xOOg40Cpc9LOQRBZe2pxR7Dg45YBEZ54gBBol6t/RQfwkWHD1hs4n68eYyimzNWD
35
+ PUkgQ3YXQ4DjAoIBAQDs+6/nMXN15Hqvbw4fUeieY/BVF4MFEaSAsQ10o25LIsIi
36
+ az8UitwMDaEnJlV2CKEfvYuODwUq5SSn2aOc+DCjdiRgDMe+x+TLyvj2stTW+2kq
37
+ H0b5jWaTjNqXmYg+Jg8ZHxO+tzXBV1mW7QdqvXJUXifHU6DM4sp8YtqjUyvqTSRJ
38
+ Fx/5fj0rN3uHw/puZgJwnZuCxcicFWCazwRmxYGsjCLyXvOYCmuZGGlJ9RZqkPzO
39
+ 0TD4LFiXmh59Iug7Df1sjmG0y9syFBQVVVdj/fXNFOvBTO8Pdxe4N+n44Keoh2MT
40
+ 8Xkgh+k0H2ui07Wk6MSdFxG/57PaXdbuIUOnKRfpAoIBADG6YgeLw0wswrEDDKhd
41
+ yXyjPIzGwPkB+RdmwGIUlAHZL1AlG/LsOnPpeLzHrfEn7q0R02ikPV8PrIwtWIwD
42
+ ECiqr0iMbMgV1yNz8gpQbeqfatAT6UVH9mXmPEtDaDmVrxZDT4yYpOUXa3epE3Lt
43
+ /IKmBCtrUgdtptDv+Ux07vl5A0aOKePTVEyKuQYMUVUrRxPwgyiT0V3W58aZRiTP
44
+ fiYLMlYhTAoystpp4PSKDPJajT7J1fIUrh3VN+X+K2c2csszw8gtAsgq4OQuHfIK
45
+ LcP9fdQBs2nYro8GyTZLr2j/ncDME8atR0phERjiIDmCvqg7/yuBBY200n7GnBGZ
46
+ DwsCggEAWfRqz96nkV2Iew+2Zuabr4MZjD6FjHqcSI+8edtMWWkCHvkj7N5rear1
47
+ vGJeM4lyUJ8wTQmd3/x6OLNoMSeIelTbZdgAdLawLWnrweroJ7Y6uqSt0o8vFFWg
48
+ Gr6BKrpMJlRu9D2tx3Vj+7Rw22HU1+vlGMxgEs341qghpVU8k+vNo1vZ2IMjsCVC
49
+ Ei1AHQFvtS2u9+YBuUnAxVNKIje3IAvHZzh8SuWBqIPWdCkxYrssLoUBPt6fkZ75
50
+ z9uJEnwKRvnwxORqHuGLTZfQrdKizk8u8KMm9gkrr7TCfzOwu+pQllE5AogtWcc/
51
+ 0CvyxEnB8U5QYN1JslvBezOToHARkA==
52
+ -----END PRIVATE KEY-----