mcp-proxy-adapter 4.1.1__py3-none-any.whl → 6.0.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (200) hide show
  1. mcp_proxy_adapter/__main__.py +32 -0
  2. mcp_proxy_adapter/api/app.py +290 -33
  3. mcp_proxy_adapter/api/handlers.py +32 -6
  4. mcp_proxy_adapter/api/middleware/__init__.py +38 -32
  5. mcp_proxy_adapter/api/middleware/command_permission_middleware.py +148 -0
  6. mcp_proxy_adapter/api/middleware/error_handling.py +9 -0
  7. mcp_proxy_adapter/api/middleware/factory.py +243 -0
  8. mcp_proxy_adapter/api/middleware/logging.py +32 -6
  9. mcp_proxy_adapter/api/middleware/protocol_middleware.py +201 -0
  10. mcp_proxy_adapter/api/middleware/transport_middleware.py +122 -0
  11. mcp_proxy_adapter/api/middleware/unified_security.py +197 -0
  12. mcp_proxy_adapter/api/middleware/user_info_middleware.py +158 -0
  13. mcp_proxy_adapter/commands/__init__.py +19 -4
  14. mcp_proxy_adapter/commands/auth_validation_command.py +408 -0
  15. mcp_proxy_adapter/commands/base.py +66 -32
  16. mcp_proxy_adapter/commands/builtin_commands.py +95 -0
  17. mcp_proxy_adapter/commands/catalog_manager.py +838 -0
  18. mcp_proxy_adapter/commands/cert_monitor_command.py +620 -0
  19. mcp_proxy_adapter/commands/certificate_management_command.py +608 -0
  20. mcp_proxy_adapter/commands/command_registry.py +711 -354
  21. mcp_proxy_adapter/commands/dependency_manager.py +245 -0
  22. mcp_proxy_adapter/commands/echo_command.py +81 -0
  23. mcp_proxy_adapter/commands/health_command.py +8 -1
  24. mcp_proxy_adapter/commands/help_command.py +21 -14
  25. mcp_proxy_adapter/commands/hooks.py +200 -167
  26. mcp_proxy_adapter/commands/key_management_command.py +506 -0
  27. mcp_proxy_adapter/commands/load_command.py +176 -0
  28. mcp_proxy_adapter/commands/plugins_command.py +235 -0
  29. mcp_proxy_adapter/commands/protocol_management_command.py +232 -0
  30. mcp_proxy_adapter/commands/proxy_registration_command.py +409 -0
  31. mcp_proxy_adapter/commands/reload_command.py +48 -50
  32. mcp_proxy_adapter/commands/result.py +1 -0
  33. mcp_proxy_adapter/commands/role_test_command.py +141 -0
  34. mcp_proxy_adapter/commands/roles_management_command.py +697 -0
  35. mcp_proxy_adapter/commands/security_command.py +488 -0
  36. mcp_proxy_adapter/commands/ssl_setup_command.py +366 -0
  37. mcp_proxy_adapter/commands/token_management_command.py +529 -0
  38. mcp_proxy_adapter/commands/transport_management_command.py +144 -0
  39. mcp_proxy_adapter/commands/unload_command.py +158 -0
  40. mcp_proxy_adapter/config.py +394 -14
  41. mcp_proxy_adapter/core/app_factory.py +410 -0
  42. mcp_proxy_adapter/core/app_runner.py +272 -0
  43. mcp_proxy_adapter/core/auth_validator.py +606 -0
  44. mcp_proxy_adapter/core/certificate_utils.py +1045 -0
  45. mcp_proxy_adapter/core/client.py +574 -0
  46. mcp_proxy_adapter/core/client_manager.py +284 -0
  47. mcp_proxy_adapter/core/client_security.py +384 -0
  48. mcp_proxy_adapter/core/config_converter.py +405 -0
  49. mcp_proxy_adapter/core/config_validator.py +218 -0
  50. mcp_proxy_adapter/core/logging.py +19 -3
  51. mcp_proxy_adapter/core/mtls_asgi.py +156 -0
  52. mcp_proxy_adapter/core/mtls_asgi_app.py +187 -0
  53. mcp_proxy_adapter/core/protocol_manager.py +385 -0
  54. mcp_proxy_adapter/core/proxy_client.py +602 -0
  55. mcp_proxy_adapter/core/proxy_registration.py +522 -0
  56. mcp_proxy_adapter/core/role_utils.py +426 -0
  57. mcp_proxy_adapter/core/security_adapter.py +370 -0
  58. mcp_proxy_adapter/core/security_factory.py +239 -0
  59. mcp_proxy_adapter/core/security_integration.py +286 -0
  60. mcp_proxy_adapter/core/server_adapter.py +282 -0
  61. mcp_proxy_adapter/core/server_engine.py +270 -0
  62. mcp_proxy_adapter/core/settings.py +1 -0
  63. mcp_proxy_adapter/core/ssl_utils.py +234 -0
  64. mcp_proxy_adapter/core/transport_manager.py +292 -0
  65. mcp_proxy_adapter/core/unified_config_adapter.py +579 -0
  66. mcp_proxy_adapter/custom_openapi.py +22 -11
  67. mcp_proxy_adapter/examples/__init__.py +13 -4
  68. mcp_proxy_adapter/examples/basic_framework/__init__.py +9 -0
  69. mcp_proxy_adapter/examples/basic_framework/commands/__init__.py +4 -0
  70. mcp_proxy_adapter/examples/basic_framework/hooks/__init__.py +4 -0
  71. mcp_proxy_adapter/examples/basic_framework/main.py +44 -0
  72. mcp_proxy_adapter/examples/commands/__init__.py +5 -0
  73. mcp_proxy_adapter/examples/create_certificates_simple.py +550 -0
  74. mcp_proxy_adapter/examples/debug_request_state.py +112 -0
  75. mcp_proxy_adapter/examples/debug_role_chain.py +158 -0
  76. mcp_proxy_adapter/examples/demo_client.py +275 -0
  77. mcp_proxy_adapter/examples/examples/basic_framework/__init__.py +9 -0
  78. mcp_proxy_adapter/examples/examples/basic_framework/commands/__init__.py +4 -0
  79. mcp_proxy_adapter/examples/examples/basic_framework/hooks/__init__.py +4 -0
  80. mcp_proxy_adapter/examples/examples/basic_framework/main.py +44 -0
  81. mcp_proxy_adapter/examples/examples/full_application/__init__.py +12 -0
  82. mcp_proxy_adapter/examples/examples/full_application/commands/__init__.py +7 -0
  83. mcp_proxy_adapter/examples/examples/full_application/commands/custom_echo_command.py +80 -0
  84. mcp_proxy_adapter/examples/examples/full_application/commands/dynamic_calculator_command.py +90 -0
  85. mcp_proxy_adapter/examples/examples/full_application/hooks/__init__.py +7 -0
  86. mcp_proxy_adapter/examples/examples/full_application/hooks/application_hooks.py +75 -0
  87. mcp_proxy_adapter/examples/examples/full_application/hooks/builtin_command_hooks.py +71 -0
  88. mcp_proxy_adapter/examples/examples/full_application/main.py +173 -0
  89. mcp_proxy_adapter/examples/examples/full_application/proxy_endpoints.py +154 -0
  90. mcp_proxy_adapter/examples/full_application/__init__.py +12 -0
  91. mcp_proxy_adapter/examples/full_application/commands/__init__.py +7 -0
  92. mcp_proxy_adapter/examples/full_application/commands/custom_echo_command.py +80 -0
  93. mcp_proxy_adapter/examples/full_application/commands/dynamic_calculator_command.py +90 -0
  94. mcp_proxy_adapter/examples/full_application/hooks/__init__.py +7 -0
  95. mcp_proxy_adapter/examples/full_application/hooks/application_hooks.py +75 -0
  96. mcp_proxy_adapter/examples/full_application/hooks/builtin_command_hooks.py +71 -0
  97. mcp_proxy_adapter/examples/full_application/main.py +173 -0
  98. mcp_proxy_adapter/examples/full_application/proxy_endpoints.py +154 -0
  99. mcp_proxy_adapter/examples/generate_all_certificates.py +362 -0
  100. mcp_proxy_adapter/examples/generate_certificates.py +177 -0
  101. mcp_proxy_adapter/examples/generate_certificates_and_tokens.py +369 -0
  102. mcp_proxy_adapter/examples/generate_test_configs.py +331 -0
  103. mcp_proxy_adapter/examples/proxy_registration_example.py +334 -0
  104. mcp_proxy_adapter/examples/run_example.py +59 -0
  105. mcp_proxy_adapter/examples/run_full_test_suite.py +318 -0
  106. mcp_proxy_adapter/examples/run_proxy_server.py +146 -0
  107. mcp_proxy_adapter/examples/run_security_tests.py +544 -0
  108. mcp_proxy_adapter/examples/run_security_tests_fixed.py +247 -0
  109. mcp_proxy_adapter/examples/scripts/config_generator.py +740 -0
  110. mcp_proxy_adapter/examples/scripts/create_certificates_simple.py +560 -0
  111. mcp_proxy_adapter/examples/scripts/generate_certificates_and_tokens.py +369 -0
  112. mcp_proxy_adapter/examples/security_test_client.py +782 -0
  113. mcp_proxy_adapter/examples/setup_test_environment.py +328 -0
  114. mcp_proxy_adapter/examples/test_config.py +148 -0
  115. mcp_proxy_adapter/examples/test_config_generator.py +86 -0
  116. mcp_proxy_adapter/examples/test_examples.py +281 -0
  117. mcp_proxy_adapter/examples/universal_client.py +620 -0
  118. mcp_proxy_adapter/main.py +93 -0
  119. mcp_proxy_adapter/utils/config_generator.py +1008 -0
  120. mcp_proxy_adapter/version.py +5 -2
  121. mcp_proxy_adapter-6.0.1.dist-info/METADATA +679 -0
  122. mcp_proxy_adapter-6.0.1.dist-info/RECORD +140 -0
  123. mcp_proxy_adapter-6.0.1.dist-info/entry_points.txt +2 -0
  124. {mcp_proxy_adapter-4.1.1.dist-info → mcp_proxy_adapter-6.0.1.dist-info}/licenses/LICENSE +2 -2
  125. mcp_proxy_adapter/api/middleware/auth.py +0 -146
  126. mcp_proxy_adapter/api/middleware/rate_limit.py +0 -152
  127. mcp_proxy_adapter/commands/reload_settings_command.py +0 -125
  128. mcp_proxy_adapter/examples/README.md +0 -124
  129. mcp_proxy_adapter/examples/basic_server/README.md +0 -60
  130. mcp_proxy_adapter/examples/basic_server/__init__.py +0 -7
  131. mcp_proxy_adapter/examples/basic_server/basic_custom_settings.json +0 -39
  132. mcp_proxy_adapter/examples/basic_server/config.json +0 -35
  133. mcp_proxy_adapter/examples/basic_server/custom_settings_example.py +0 -238
  134. mcp_proxy_adapter/examples/basic_server/server.py +0 -103
  135. mcp_proxy_adapter/examples/custom_commands/README.md +0 -127
  136. mcp_proxy_adapter/examples/custom_commands/__init__.py +0 -27
  137. mcp_proxy_adapter/examples/custom_commands/advanced_hooks.py +0 -250
  138. mcp_proxy_adapter/examples/custom_commands/auto_commands/__init__.py +0 -6
  139. mcp_proxy_adapter/examples/custom_commands/auto_commands/auto_echo_command.py +0 -103
  140. mcp_proxy_adapter/examples/custom_commands/auto_commands/auto_info_command.py +0 -111
  141. mcp_proxy_adapter/examples/custom_commands/config.json +0 -35
  142. mcp_proxy_adapter/examples/custom_commands/custom_health_command.py +0 -169
  143. mcp_proxy_adapter/examples/custom_commands/custom_help_command.py +0 -215
  144. mcp_proxy_adapter/examples/custom_commands/custom_openapi_generator.py +0 -76
  145. mcp_proxy_adapter/examples/custom_commands/custom_settings.json +0 -96
  146. mcp_proxy_adapter/examples/custom_commands/custom_settings_manager.py +0 -241
  147. mcp_proxy_adapter/examples/custom_commands/data_transform_command.py +0 -135
  148. mcp_proxy_adapter/examples/custom_commands/echo_command.py +0 -122
  149. mcp_proxy_adapter/examples/custom_commands/hooks.py +0 -230
  150. mcp_proxy_adapter/examples/custom_commands/intercept_command.py +0 -123
  151. mcp_proxy_adapter/examples/custom_commands/manual_echo_command.py +0 -103
  152. mcp_proxy_adapter/examples/custom_commands/server.py +0 -228
  153. mcp_proxy_adapter/examples/custom_commands/test_hooks.py +0 -176
  154. mcp_proxy_adapter/examples/deployment/README.md +0 -49
  155. mcp_proxy_adapter/examples/deployment/__init__.py +0 -7
  156. mcp_proxy_adapter/examples/deployment/config.development.json +0 -8
  157. mcp_proxy_adapter/examples/deployment/config.json +0 -29
  158. mcp_proxy_adapter/examples/deployment/config.production.json +0 -12
  159. mcp_proxy_adapter/examples/deployment/config.staging.json +0 -11
  160. mcp_proxy_adapter/examples/deployment/docker-compose.yml +0 -31
  161. mcp_proxy_adapter/examples/deployment/run.sh +0 -43
  162. mcp_proxy_adapter/examples/deployment/run_docker.sh +0 -84
  163. mcp_proxy_adapter/schemas/base_schema.json +0 -114
  164. mcp_proxy_adapter/schemas/openapi_schema.json +0 -314
  165. mcp_proxy_adapter/tests/__init__.py +0 -0
  166. mcp_proxy_adapter/tests/api/__init__.py +0 -3
  167. mcp_proxy_adapter/tests/api/test_cmd_endpoint.py +0 -115
  168. mcp_proxy_adapter/tests/api/test_custom_openapi.py +0 -617
  169. mcp_proxy_adapter/tests/api/test_handlers.py +0 -522
  170. mcp_proxy_adapter/tests/api/test_middleware.py +0 -340
  171. mcp_proxy_adapter/tests/api/test_schemas.py +0 -546
  172. mcp_proxy_adapter/tests/api/test_tool_integration.py +0 -531
  173. mcp_proxy_adapter/tests/commands/__init__.py +0 -3
  174. mcp_proxy_adapter/tests/commands/test_config_command.py +0 -211
  175. mcp_proxy_adapter/tests/commands/test_echo_command.py +0 -127
  176. mcp_proxy_adapter/tests/commands/test_help_command.py +0 -136
  177. mcp_proxy_adapter/tests/conftest.py +0 -131
  178. mcp_proxy_adapter/tests/functional/__init__.py +0 -3
  179. mcp_proxy_adapter/tests/functional/test_api.py +0 -253
  180. mcp_proxy_adapter/tests/integration/__init__.py +0 -3
  181. mcp_proxy_adapter/tests/integration/test_cmd_integration.py +0 -129
  182. mcp_proxy_adapter/tests/integration/test_integration.py +0 -255
  183. mcp_proxy_adapter/tests/performance/__init__.py +0 -3
  184. mcp_proxy_adapter/tests/performance/test_performance.py +0 -189
  185. mcp_proxy_adapter/tests/stubs/__init__.py +0 -10
  186. mcp_proxy_adapter/tests/stubs/echo_command.py +0 -104
  187. mcp_proxy_adapter/tests/test_api_endpoints.py +0 -271
  188. mcp_proxy_adapter/tests/test_api_handlers.py +0 -289
  189. mcp_proxy_adapter/tests/test_base_command.py +0 -123
  190. mcp_proxy_adapter/tests/test_batch_requests.py +0 -117
  191. mcp_proxy_adapter/tests/test_command_registry.py +0 -281
  192. mcp_proxy_adapter/tests/test_config.py +0 -127
  193. mcp_proxy_adapter/tests/test_utils.py +0 -65
  194. mcp_proxy_adapter/tests/unit/__init__.py +0 -3
  195. mcp_proxy_adapter/tests/unit/test_base_command.py +0 -436
  196. mcp_proxy_adapter/tests/unit/test_config.py +0 -217
  197. mcp_proxy_adapter-4.1.1.dist-info/METADATA +0 -200
  198. mcp_proxy_adapter-4.1.1.dist-info/RECORD +0 -110
  199. {mcp_proxy_adapter-4.1.1.dist-info → mcp_proxy_adapter-6.0.1.dist-info}/WHEEL +0 -0
  200. {mcp_proxy_adapter-4.1.1.dist-info → mcp_proxy_adapter-6.0.1.dist-info}/top_level.txt +0 -0
@@ -1,176 +0,0 @@
1
- """
2
- Test Hooks Example
3
-
4
- This script demonstrates the hooks system by making requests to the server
5
- and showing how hooks process the commands.
6
- """
7
-
8
- import requests
9
- import json
10
- import time
11
-
12
-
13
- def test_echo_hooks():
14
- """Test echo command with hooks."""
15
- print("\n🔔 Testing Echo Command with Hooks")
16
- print("=" * 50)
17
-
18
- # Test basic echo
19
- response = requests.post(
20
- "http://localhost:8000/cmd",
21
- json={
22
- "command": "echo",
23
- "params": {"message": "Hello from hooks!"}
24
- }
25
- )
26
-
27
- if response.status_code == 200:
28
- result = response.json()
29
- print("✅ Echo command executed successfully")
30
- print(f"📤 Result: {json.dumps(result, indent=2)}")
31
- else:
32
- print(f"❌ Error: {response.status_code} - {response.text}")
33
-
34
-
35
- def test_help_hooks():
36
- """Test help command with hooks."""
37
- print("\n📖 Testing Help Command with Hooks")
38
- print("=" * 50)
39
-
40
- # Test help for all commands
41
- response = requests.post(
42
- "http://localhost:8000/cmd",
43
- json={"command": "help"}
44
- )
45
-
46
- if response.status_code == 200:
47
- result = response.json()
48
- print("✅ Help command executed successfully")
49
- print(f"📚 Total commands: {result.get('total', 0)}")
50
- print(f"🔧 Custom features: {result.get('custom_features', {})}")
51
- else:
52
- print(f"❌ Error: {response.status_code} - {response.text}")
53
-
54
- # Test help for specific command
55
- response = requests.post(
56
- "http://localhost:8000/cmd",
57
- json={
58
- "command": "help",
59
- "params": {"cmdname": "echo"}
60
- }
61
- )
62
-
63
- if response.status_code == 200:
64
- result = response.json()
65
- print("✅ Help for echo command executed successfully")
66
- print(f"📖 Command info: {result.get('info', {}).get('description', 'N/A')}")
67
- else:
68
- print(f"❌ Error: {response.status_code} - {response.text}")
69
-
70
-
71
- def test_health_hooks():
72
- """Test health command with hooks."""
73
- print("\n🏥 Testing Health Command with Hooks")
74
- print("=" * 50)
75
-
76
- response = requests.post(
77
- "http://localhost:8000/cmd",
78
- json={"command": "health"}
79
- )
80
-
81
- if response.status_code == 200:
82
- result = response.json()
83
- print("✅ Health command executed successfully")
84
-
85
- data = result.get("data", {})
86
- print(f"🏥 Status: {data.get('status', 'unknown')}")
87
- print(f"⏱️ Uptime: {data.get('uptime', 0):.2f}s")
88
-
89
- custom_metrics = data.get("custom_metrics", {})
90
- print(f"🔧 Hook enhanced: {custom_metrics.get('hook_enhanced', False)}")
91
- print(f"🆔 Health check ID: {custom_metrics.get('health_check_id', 'N/A')}")
92
- else:
93
- print(f"❌ Error: {response.status_code} - {response.text}")
94
-
95
-
96
- def test_security_hooks():
97
- """Test security hooks with sensitive data."""
98
- print("\n🔒 Testing Security Hooks")
99
- print("=" * 50)
100
-
101
- # Test with sensitive parameter
102
- response = requests.post(
103
- "http://localhost:8000/cmd",
104
- json={
105
- "command": "echo",
106
- "params": {
107
- "message": "Test message",
108
- "password": "secret123",
109
- "api_token": "sensitive_data"
110
- }
111
- }
112
- )
113
-
114
- if response.status_code == 200:
115
- result = response.json()
116
- print("✅ Echo command with sensitive data executed")
117
- print("🔒 Security hooks should have logged warnings")
118
- else:
119
- print(f"❌ Error: {response.status_code} - {response.text}")
120
-
121
-
122
- def test_performance_hooks():
123
- """Test performance hooks with slow operation simulation."""
124
- print("\n⏱️ Testing Performance Hooks")
125
- print("=" * 50)
126
-
127
- # Test with a command that might be slow
128
- response = requests.post(
129
- "http://localhost:8000/cmd",
130
- json={
131
- "command": "health",
132
- "params": {}
133
- }
134
- )
135
-
136
- if response.status_code == 200:
137
- result = response.json()
138
- print("✅ Health command executed")
139
- print("⏱️ Performance hooks should have logged execution time")
140
- else:
141
- print(f"❌ Error: {response.status_code} - {response.text}")
142
-
143
-
144
- def main():
145
- """Run all hook tests."""
146
- print("🧪 Testing Custom Commands with Hooks")
147
- print("=" * 60)
148
- print("Make sure the server is running on http://localhost:8000")
149
- print("Check the server logs to see hook activity")
150
- print("=" * 60)
151
-
152
- # Wait a moment for server to be ready
153
- time.sleep(1)
154
-
155
- try:
156
- test_echo_hooks()
157
- test_help_hooks()
158
- test_health_hooks()
159
- test_security_hooks()
160
- test_performance_hooks()
161
-
162
- print("\n✅ All tests completed!")
163
- print("📋 Check the server logs to see hook activity:")
164
- print(" - Command-specific hooks")
165
- print(" - Global hooks")
166
- print(" - Performance monitoring")
167
- print(" - Security monitoring")
168
-
169
- except requests.exceptions.ConnectionError:
170
- print("❌ Could not connect to server. Make sure it's running on http://localhost:8000")
171
- except Exception as e:
172
- print(f"❌ Error during testing: {e}")
173
-
174
-
175
- if __name__ == "__main__":
176
- main()
@@ -1,49 +0,0 @@
1
- # Deployment Examples
2
-
3
- This directory contains deployment examples for the MCP Proxy Adapter framework.
4
-
5
- ## Files
6
-
7
- ### Docker Deployment
8
- - `Dockerfile` - Docker image configuration for the framework
9
- - `docker-compose.yml` - Docker Compose configuration for easy deployment
10
- - `run_docker.sh` - Script to run the application in Docker
11
-
12
- ### Local Deployment
13
- - `run.sh` - Script to run the application locally
14
-
15
- ### Configuration Files
16
- - `config.json` - Default configuration file
17
- - `config.development.json` - Development environment configuration
18
- - `config.staging.json` - Staging environment configuration
19
- - `config.production.json` - Production environment configuration
20
-
21
- ## Usage
22
-
23
- ### Local Development
24
- ```bash
25
- ./run.sh
26
- ```
27
-
28
- ### Docker Deployment
29
- ```bash
30
- ./run_docker.sh
31
- ```
32
-
33
- ### Docker Compose
34
- ```bash
35
- docker-compose up -d
36
- ```
37
-
38
- ## Configuration
39
-
40
- Copy the appropriate configuration file to your project root:
41
- ```bash
42
- cp config.development.json config.json
43
- ```
44
-
45
- ## Notes
46
-
47
- - These are example configurations and should be customized for your specific use case
48
- - The framework itself is designed to be used as a library, not as a standalone application
49
- - Modify the configuration files according to your deployment requirements
@@ -1,7 +0,0 @@
1
- """
2
- Deployment Examples
3
-
4
- This package contains deployment examples for the MCP Proxy Adapter framework.
5
- """
6
-
7
- __version__ = "1.0.0"
@@ -1,8 +0,0 @@
1
- {
2
- "host": "0.0.0.0",
3
- "port": 8000,
4
- "log_level": "DEBUG",
5
- "log_file": "logs/mcp_proxy.log",
6
- "cors_origins": ["*"],
7
- "api_keys": ["dev-api-key"]
8
- }
@@ -1,29 +0,0 @@
1
- {
2
- "server": {
3
- "host": "0.0.0.0",
4
- "port": 8000,
5
- "debug": false,
6
- "log_level": "info"
7
- },
8
- "logging": {
9
- "level": "INFO",
10
- "file": "adapter.log",
11
- "rotation": {
12
- "type": "size",
13
- "max_bytes": 10485760,
14
- "backup_count": 5
15
- }
16
- },
17
- "service": {
18
- "name": "MCP Proxy Adapter",
19
- "version": "1.0.0"
20
- },
21
- "discovery": {
22
- "enabled": true,
23
- "package": "commands"
24
- },
25
- "docker": {
26
- "container_name": "mcp-proxy-adapter",
27
- "network": "default"
28
- }
29
- }
@@ -1,12 +0,0 @@
1
- {
2
- "host": "0.0.0.0",
3
- "port": 8000,
4
- "log_level": "WARNING",
5
- "log_file": "logs/mcp_proxy.log",
6
- "log_rotation_type": "time",
7
- "log_rotation_when": "D",
8
- "log_rotation_interval": 1,
9
- "log_rotation_backup_count": 30,
10
- "cors_origins": ["https://example.com"],
11
- "api_keys": ["${API_KEY}"]
12
- }
@@ -1,11 +0,0 @@
1
- {
2
- "host": "0.0.0.0",
3
- "port": 8000,
4
- "log_level": "INFO",
5
- "log_file": "logs/mcp_proxy.log",
6
- "log_rotation_type": "size",
7
- "log_max_bytes": 10485760,
8
- "log_backup_count": 5,
9
- "cors_origins": ["https://staging.example.com"],
10
- "api_keys": ["staging-api-key"]
11
- }
@@ -1,31 +0,0 @@
1
- version: '3.8'
2
-
3
- # Variables for docker-compose
4
- x-environment: &default-env
5
- - CONFIG_PATH=/app/config.json
6
- - LOG_LEVEL=INFO
7
-
8
- x-volume-mounts: &default-mounts
9
- - ./config.json:/app/config.json:ro
10
- - ./logs:/app/logs:rw
11
- - ./data:/app/data:rw
12
- - ./cache:/app/cache:rw
13
-
14
- services:
15
- mcp-proxy-adapter:
16
- container_name: ${CONTAINER_NAME:-mcp-proxy-adapter}
17
- build:
18
- context: ../../
19
- dockerfile: mcp_proxy_adapter/examples/deployment/Dockerfile
20
- ports:
21
- - "127.0.0.1:${HOST_PORT:-8000}:${SERVICE_PORT:-8000}"
22
- volumes: *default-mounts
23
- environment: *default-env
24
- restart: unless-stopped
25
- user: "${USER_ID:-1000}:${GROUP_ID:-1000}"
26
- networks:
27
- - default
28
-
29
- networks:
30
- default:
31
- driver: bridge
@@ -1,43 +0,0 @@
1
- #!/bin/bash
2
-
3
- # MCP Proxy Adapter - Local Development Script
4
- # This script runs the framework locally for development
5
-
6
- # Variables
7
- HOST_PORT=${HOST_PORT:-8000}
8
- CONFIG_PATH=${CONFIG_PATH:-"config.json"}
9
- LOG_LEVEL=${LOG_LEVEL:-"INFO"}
10
-
11
- # Get the project root directory (3 levels up from this script)
12
- PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../../.." && pwd)"
13
-
14
- echo "Starting MCP Proxy Adapter locally..."
15
- echo "Project root: $PROJECT_ROOT"
16
- echo "Config path: $CONFIG_PATH"
17
- echo "Port: $HOST_PORT"
18
-
19
- # Activate virtual environment if it exists
20
- if [ -d "$PROJECT_ROOT/.venv" ]; then
21
- echo "Activating virtual environment..."
22
- source "$PROJECT_ROOT/.venv/bin/activate"
23
- fi
24
-
25
- # Install dependencies if needed
26
- if [ ! -d "$PROJECT_ROOT/.venv" ]; then
27
- echo "Creating virtual environment..."
28
- python3 -m venv "$PROJECT_ROOT/.venv"
29
- source "$PROJECT_ROOT/.venv/bin/activate"
30
- pip install -r "$PROJECT_ROOT/requirements.txt"
31
- fi
32
-
33
- # Copy config file if it doesn't exist
34
- if [ ! -f "$PROJECT_ROOT/config.json" ]; then
35
- echo "Copying default config..."
36
- cp "$(dirname "${BASH_SOURCE[0]}")/config.json" "$PROJECT_ROOT/config.json"
37
- fi
38
-
39
- # Run the application
40
- cd "$PROJECT_ROOT"
41
- python -m uvicorn mcp_proxy_adapter.api.app:create_app --host 0.0.0.0 --port $HOST_PORT --reload
42
-
43
- echo "MCP Proxy Adapter started on http://localhost:$HOST_PORT"
@@ -1,84 +0,0 @@
1
- #!/bin/bash
2
-
3
- # MCP Proxy Adapter - Docker Deployment Script
4
- # This script runs the framework in Docker
5
-
6
- # Function to extract value from JSON config
7
- function get_json_value {
8
- local json_file=$1
9
- local json_path=$2
10
-
11
- python3 -c "
12
- import json
13
- with open('$json_file', 'r') as f:
14
- config = json.load(f)
15
- path = '$json_path'.split('.')
16
- result = config
17
- for key in path:
18
- result = result.get(key, {})
19
- print(result)
20
- "
21
- }
22
-
23
- # Get project root directory
24
- PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../../.." && pwd)"
25
- CONFIG_FILE="$PROJECT_ROOT/config.json"
26
-
27
- # Check if config.json exists, copy from examples if not
28
- if [ ! -f "$CONFIG_FILE" ]; then
29
- echo "Config file not found, copying from examples..."
30
- cp "$(dirname "${BASH_SOURCE[0]}")/config.json" "$CONFIG_FILE"
31
- fi
32
-
33
- # Create necessary directories
34
- mkdir -p "$PROJECT_ROOT/logs" "$PROJECT_ROOT/data" "$PROJECT_ROOT/cache"
35
-
36
- # Extract values from configuration
37
- CONTAINER_NAME=$(get_json_value "$CONFIG_FILE" "docker.container_name")
38
- SERVICE_PORT=$(get_json_value "$CONFIG_FILE" "server.port")
39
- USER_ID=$(id -u)
40
- GROUP_ID=$(id -g)
41
-
42
- # Use default values if not defined in config
43
- CONTAINER_NAME=${CONTAINER_NAME:-mcp-proxy-adapter}
44
- SERVICE_PORT=${SERVICE_PORT:-8000}
45
- HOST_PORT=${SERVICE_PORT}
46
-
47
- echo "Using configuration:"
48
- echo " Container name: $CONTAINER_NAME"
49
- echo " Port mapping: 127.0.0.1:$HOST_PORT -> $SERVICE_PORT"
50
- echo " User/Group: $USER_ID:$GROUP_ID"
51
-
52
- # Export variables for docker-compose
53
- export CONTAINER_NAME=$CONTAINER_NAME
54
- export SERVICE_PORT=$SERVICE_PORT
55
- export HOST_PORT=$HOST_PORT
56
- export USER_ID=$USER_ID
57
- export GROUP_ID=$GROUP_ID
58
-
59
- # Stop container if it already exists
60
- docker-compose -f "$(dirname "${BASH_SOURCE[0]}")/docker-compose.yml" down
61
-
62
- # Start container
63
- docker-compose -f "$(dirname "${BASH_SOURCE[0]}")/docker-compose.yml" up -d
64
-
65
- # Check if we need to connect to additional network
66
- NETWORK=$(get_json_value "$CONFIG_FILE" "docker.network")
67
- if [ ! -z "$NETWORK" ] && [ "$NETWORK" != "{}" ]; then
68
- echo "Connecting to network: $NETWORK"
69
- # Check if network exists
70
- if docker network inspect "$NETWORK" &>/dev/null; then
71
- # Connect container to network if not already connected
72
- if ! docker network inspect "$NETWORK" | grep -q "$CONTAINER_NAME"; then
73
- docker network connect "$NETWORK" "$CONTAINER_NAME"
74
- echo "Container connected to network: $NETWORK"
75
- else
76
- echo "Container already connected to network: $NETWORK"
77
- fi
78
- else
79
- echo "Warning: Network $NETWORK does not exist"
80
- fi
81
- fi
82
-
83
- echo "Container started. Use the following command to check logs:"
84
- echo " docker logs $CONTAINER_NAME"
@@ -1,114 +0,0 @@
1
- {
2
- "$schema": "http://json-schema.org/draft-07/schema#",
3
- "title": "Base Schema",
4
- "description": "Basic schema for validating commands and results",
5
- "definitions": {
6
- "command": {
7
- "type": "object",
8
- "properties": {
9
- "jsonrpc": {
10
- "type": "string",
11
- "enum": ["2.0"],
12
- "description": "JSON-RPC version"
13
- },
14
- "method": {
15
- "type": "string",
16
- "description": "Command name"
17
- },
18
- "params": {
19
- "type": "object",
20
- "description": "Command parameters"
21
- },
22
- "id": {
23
- "oneOf": [
24
- {"type": "string"},
25
- {"type": "integer"},
26
- {"type": "null"}
27
- ],
28
- "description": "Request ID"
29
- }
30
- },
31
- "required": ["jsonrpc", "method"]
32
- },
33
- "success_response": {
34
- "type": "object",
35
- "properties": {
36
- "jsonrpc": {
37
- "type": "string",
38
- "enum": ["2.0"],
39
- "description": "JSON-RPC version"
40
- },
41
- "result": {
42
- "type": "object",
43
- "properties": {
44
- "success": {
45
- "type": "boolean",
46
- "enum": [true],
47
- "description": "Success flag"
48
- },
49
- "data": {
50
- "type": "object",
51
- "description": "Response data"
52
- },
53
- "message": {
54
- "type": "string",
55
- "description": "Response message"
56
- }
57
- },
58
- "required": ["success"]
59
- },
60
- "id": {
61
- "oneOf": [
62
- {"type": "string"},
63
- {"type": "integer"},
64
- {"type": "null"}
65
- ],
66
- "description": "Request ID"
67
- }
68
- },
69
- "required": ["jsonrpc", "result"]
70
- },
71
- "error_response": {
72
- "type": "object",
73
- "properties": {
74
- "jsonrpc": {
75
- "type": "string",
76
- "enum": ["2.0"],
77
- "description": "JSON-RPC version"
78
- },
79
- "error": {
80
- "type": "object",
81
- "properties": {
82
- "code": {
83
- "type": "integer",
84
- "description": "Error code"
85
- },
86
- "message": {
87
- "type": "string",
88
- "description": "Error message"
89
- },
90
- "details": {
91
- "type": "object",
92
- "description": "Detailed error information"
93
- }
94
- },
95
- "required": ["code", "message"]
96
- },
97
- "id": {
98
- "oneOf": [
99
- {"type": "string"},
100
- {"type": "integer"},
101
- {"type": "null"}
102
- ],
103
- "description": "Request ID"
104
- }
105
- },
106
- "required": ["jsonrpc", "error"]
107
- }
108
- },
109
- "oneOf": [
110
- {"$ref": "#/definitions/command"},
111
- {"$ref": "#/definitions/success_response"},
112
- {"$ref": "#/definitions/error_response"}
113
- ]
114
- }