mcp-proxy-adapter 6.4.10__py3-none-any.whl → 6.4.11__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.
- mcp_proxy_adapter/examples/run_full_test_suite.py +122 -0
- mcp_proxy_adapter/examples/setup_test_environment.py +12 -11
- mcp_proxy_adapter/version.py +1 -1
- mcp_proxy_adapter-6.4.11.dist-info/METADATA +156 -0
- {mcp_proxy_adapter-6.4.10.dist-info → mcp_proxy_adapter-6.4.11.dist-info}/RECORD +8 -16
- mcp_proxy_adapter-6.4.11.dist-info/top_level.txt +1 -0
- mcp_proxy_adapter/examples/basic_framework/roles.json +0 -21
- mcp_proxy_adapter/examples/full_application/roles.json +0 -21
- mcp_proxy_adapter/examples/generate_comprehensive_config.py +0 -177
- mcp_proxy_adapter/examples/test_mcp_adapter.py +0 -207
- mcp_proxy_adapter/schemas/base_schema.json +0 -114
- mcp_proxy_adapter/schemas/openapi_schema.json +0 -314
- mcp_proxy_adapter/utils/config_generator.py +0 -1167
- mcp_proxy_adapter-6.4.10.dist-info/METADATA +0 -680
- mcp_proxy_adapter-6.4.10.dist-info/top_level.txt +0 -2
- mcp_proxy_adapter_issue_package/demonstrate_issue.py +0 -208
- {mcp_proxy_adapter-6.4.10.dist-info → mcp_proxy_adapter-6.4.11.dist-info}/WHEEL +0 -0
- {mcp_proxy_adapter-6.4.10.dist-info → mcp_proxy_adapter-6.4.11.dist-info}/entry_points.txt +0 -0
@@ -235,6 +235,123 @@ class FullTestSuiteRunner:
|
|
235
235
|
self.print_error(f"Failed to run security tests: {e}")
|
236
236
|
return False
|
237
237
|
|
238
|
+
def run_mtls_registration_test(self) -> bool:
|
239
|
+
"""Run mTLS with proxy registration test."""
|
240
|
+
self.print_step("6", "mTLS Proxy Registration Testing")
|
241
|
+
|
242
|
+
try:
|
243
|
+
# Check if test_proxy_registration.py exists
|
244
|
+
test_script = self.working_dir / "test_proxy_registration.py"
|
245
|
+
if not test_script.exists():
|
246
|
+
self.print_error(f"Test script not found: {test_script}")
|
247
|
+
return False
|
248
|
+
|
249
|
+
# Create test_proxy_registration.json config if it doesn't exist
|
250
|
+
test_config = self.configs_dir / "test_proxy_registration.json"
|
251
|
+
if not test_config.exists():
|
252
|
+
self.print_info("Creating test_proxy_registration.json configuration...")
|
253
|
+
test_config_content = {
|
254
|
+
"uuid": "550e8400-e29b-41d4-a716-446655440001",
|
255
|
+
"server": {
|
256
|
+
"host": "127.0.0.1",
|
257
|
+
"port": 20005
|
258
|
+
},
|
259
|
+
"ssl": {
|
260
|
+
"enabled": True,
|
261
|
+
"cert_file": "certs/localhost_server.crt",
|
262
|
+
"key_file": "keys/localhost_server.key",
|
263
|
+
"ca_cert": "certs/mcp_proxy_adapter_ca_ca.crt",
|
264
|
+
"client_cert_file": "certs/admin_cert.pem",
|
265
|
+
"client_key_file": "certs/admin_key.pem",
|
266
|
+
"verify_client": True
|
267
|
+
},
|
268
|
+
"registration": {
|
269
|
+
"enabled": True,
|
270
|
+
"auth_method": "token",
|
271
|
+
"server_url": "http://127.0.0.1:3006/proxy",
|
272
|
+
"token": {
|
273
|
+
"enabled": True,
|
274
|
+
"token": "proxy_registration_token_123"
|
275
|
+
},
|
276
|
+
"proxy_info": {
|
277
|
+
"name": "mcp_test_server",
|
278
|
+
"capabilities": [
|
279
|
+
"jsonrpc",
|
280
|
+
"rest",
|
281
|
+
"security",
|
282
|
+
"proxy_registration"
|
283
|
+
],
|
284
|
+
"endpoints": {
|
285
|
+
"jsonrpc": "/api/jsonrpc",
|
286
|
+
"rest": "/cmd",
|
287
|
+
"health": "/health"
|
288
|
+
}
|
289
|
+
},
|
290
|
+
"heartbeat": {
|
291
|
+
"enabled": True,
|
292
|
+
"interval": 30
|
293
|
+
}
|
294
|
+
},
|
295
|
+
"security": {
|
296
|
+
"enabled": True,
|
297
|
+
"auth": {
|
298
|
+
"enabled": True,
|
299
|
+
"methods": [
|
300
|
+
"certificate"
|
301
|
+
]
|
302
|
+
},
|
303
|
+
"permissions": {
|
304
|
+
"enabled": True,
|
305
|
+
"roles_file": "configs/roles.json"
|
306
|
+
}
|
307
|
+
},
|
308
|
+
"protocols": {
|
309
|
+
"enabled": True,
|
310
|
+
"default_protocol": "mtls",
|
311
|
+
"allowed_protocols": [
|
312
|
+
"https",
|
313
|
+
"mtls"
|
314
|
+
]
|
315
|
+
}
|
316
|
+
}
|
317
|
+
|
318
|
+
import json
|
319
|
+
with open(test_config, 'w', encoding='utf-8') as f:
|
320
|
+
json.dump(test_config_content, f, indent=2)
|
321
|
+
self.print_success(f"Created test configuration: {test_config}")
|
322
|
+
|
323
|
+
self.print_info("Running mTLS proxy registration test...")
|
324
|
+
self.print_info("This test verifies:")
|
325
|
+
self.print_info(" - mTLS server startup with client certificate verification")
|
326
|
+
self.print_info(" - Proxy registration functionality")
|
327
|
+
self.print_info(" - SSL configuration validation")
|
328
|
+
|
329
|
+
# Run the test
|
330
|
+
cmd = [sys.executable, "test_proxy_registration.py"]
|
331
|
+
result = subprocess.run(
|
332
|
+
cmd, capture_output=True, text=True, cwd=self.working_dir
|
333
|
+
)
|
334
|
+
|
335
|
+
if result.returncode == 0:
|
336
|
+
self.print_success("mTLS proxy registration test completed successfully!")
|
337
|
+
if result.stdout:
|
338
|
+
print("Test output:")
|
339
|
+
print(result.stdout)
|
340
|
+
return True
|
341
|
+
else:
|
342
|
+
self.print_error("mTLS proxy registration test failed!")
|
343
|
+
if result.stdout:
|
344
|
+
print("Test output:")
|
345
|
+
print(result.stdout)
|
346
|
+
if result.stderr:
|
347
|
+
print("Error output:")
|
348
|
+
print(result.stderr)
|
349
|
+
return False
|
350
|
+
|
351
|
+
except Exception as e:
|
352
|
+
self.print_error(f"Failed to run mTLS registration test: {e}")
|
353
|
+
return False
|
354
|
+
|
238
355
|
def cleanup(self):
|
239
356
|
"""Clean up temporary files and processes."""
|
240
357
|
self.print_info("Cleaning up...")
|
@@ -305,6 +422,10 @@ class FullTestSuiteRunner:
|
|
305
422
|
if not self.run_security_tests():
|
306
423
|
return False
|
307
424
|
|
425
|
+
# Step 6: mTLS proxy registration testing
|
426
|
+
if not self.run_mtls_registration_test():
|
427
|
+
return False
|
428
|
+
|
308
429
|
# All steps completed successfully
|
309
430
|
print(f"\n{'='*60}")
|
310
431
|
print("🎉 FULL TEST SUITE COMPLETED SUCCESSFULLY!")
|
@@ -315,6 +436,7 @@ class FullTestSuiteRunner:
|
|
315
436
|
print("✅ Certificates generated")
|
316
437
|
print("✅ Configurations generated")
|
317
438
|
print("✅ Security tests passed")
|
439
|
+
print("✅ mTLS proxy registration test passed")
|
318
440
|
print(f"\n📁 Test artifacts created in: {self.working_dir}")
|
319
441
|
print(f"📁 Configurations: {self.configs_dir}")
|
320
442
|
print(f"📁 Certificates: {self.certs_dir}")
|
@@ -420,7 +420,8 @@ import asyncio
|
|
420
420
|
import ssl
|
421
421
|
from fastapi import FastAPI, Request
|
422
422
|
from fastapi.responses import JSONResponse
|
423
|
-
import
|
423
|
+
from hypercorn.asyncio import serve
|
424
|
+
from hypercorn.config import Config
|
424
425
|
|
425
426
|
|
426
427
|
app = FastAPI(title="Test mTLS Proxy Server", version="1.0.0")
|
@@ -472,7 +473,7 @@ async def health_check():
|
|
472
473
|
)
|
473
474
|
|
474
475
|
|
475
|
-
def main():
|
476
|
+
async def main():
|
476
477
|
"""Run the mTLS proxy server."""
|
477
478
|
print("🚀 Starting Test mTLS Proxy Server...")
|
478
479
|
print("📡 Server URL: https://127.0.0.1:3004")
|
@@ -482,19 +483,19 @@ def main():
|
|
482
483
|
print(" GET /health - Health check")
|
483
484
|
print("⚡ Press Ctrl+C to stop\\n")
|
484
485
|
|
486
|
+
# Configure hypercorn
|
487
|
+
config = Config()
|
488
|
+
config.bind = ["127.0.0.1:3004"]
|
489
|
+
config.keyfile = "mtls_certificates/server/mcp-proxy.key"
|
490
|
+
config.certfile = "mtls_certificates/server/mcp-proxy.pem"
|
491
|
+
config.loglevel = "info"
|
492
|
+
|
485
493
|
# Run server with mTLS
|
486
|
-
|
487
|
-
app,
|
488
|
-
host="127.0.0.1",
|
489
|
-
port=3004,
|
490
|
-
ssl_keyfile="mtls_certificates/server/mcp-proxy.key",
|
491
|
-
ssl_certfile="mtls_certificates/server/mcp-proxy.pem",
|
492
|
-
log_level="info"
|
493
|
-
)
|
494
|
+
await serve(app, config)
|
494
495
|
|
495
496
|
|
496
497
|
if __name__ == "__main__":
|
497
|
-
main()
|
498
|
+
asyncio.run(main())
|
498
499
|
'''
|
499
500
|
)
|
500
501
|
|
mcp_proxy_adapter/version.py
CHANGED
@@ -0,0 +1,156 @@
|
|
1
|
+
Metadata-Version: 2.4
|
2
|
+
Name: mcp-proxy-adapter
|
3
|
+
Version: 6.4.11
|
4
|
+
Summary: Powerful JSON-RPC microservices framework with built-in security, authentication, and proxy registration
|
5
|
+
Home-page: https://github.com/maverikod/mcp-proxy-adapter
|
6
|
+
Author: Vasiliy Zdanovskiy
|
7
|
+
Author-email: Vasiliy Zdanovskiy <vasilyvz@gmail.com>
|
8
|
+
Maintainer: Vasiliy Zdanovskiy
|
9
|
+
Maintainer-email: Vasiliy Zdanovskiy <vasilyvz@gmail.com>
|
10
|
+
License: MIT
|
11
|
+
Project-URL: Homepage, https://github.com/maverikod/mcp-proxy-adapter
|
12
|
+
Project-URL: Documentation, https://github.com/maverikod/mcp-proxy-adapter#readme
|
13
|
+
Project-URL: Source, https://github.com/maverikod/mcp-proxy-adapter
|
14
|
+
Project-URL: Tracker, https://github.com/maverikod/mcp-proxy-adapter/issues
|
15
|
+
Project-URL: PyPI, https://pypi.org/project/mcp-proxy-adapter/
|
16
|
+
Keywords: json-rpc,microservices,fastapi,security,authentication,authorization,proxy,mcp,mtls,ssl,rest,api
|
17
|
+
Classifier: Development Status :: 4 - Beta
|
18
|
+
Classifier: Intended Audience :: Developers
|
19
|
+
Classifier: Operating System :: OS Independent
|
20
|
+
Classifier: Programming Language :: Python :: 3
|
21
|
+
Classifier: Programming Language :: Python :: 3.9
|
22
|
+
Classifier: Programming Language :: Python :: 3.10
|
23
|
+
Classifier: Programming Language :: Python :: 3.11
|
24
|
+
Classifier: Programming Language :: Python :: 3.12
|
25
|
+
Classifier: Framework :: FastAPI
|
26
|
+
Classifier: Topic :: Internet :: WWW/HTTP :: HTTP Servers
|
27
|
+
Classifier: Topic :: Security
|
28
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
29
|
+
Requires-Python: >=3.9
|
30
|
+
Description-Content-Type: text/markdown
|
31
|
+
Requires-Dist: fastapi<1.0.0,>=0.95.0
|
32
|
+
Requires-Dist: pydantic>=2.0.0
|
33
|
+
Requires-Dist: hypercorn<1.0.0,>=0.15.0
|
34
|
+
Requires-Dist: docstring-parser<1.0.0,>=0.15
|
35
|
+
Requires-Dist: typing-extensions<5.0.0,>=4.5.0
|
36
|
+
Requires-Dist: jsonrpc>=1.2.0
|
37
|
+
Requires-Dist: psutil>=5.9.0
|
38
|
+
Requires-Dist: mcp_security_framework>=1.1.2
|
39
|
+
Requires-Dist: packaging>=20.0
|
40
|
+
Requires-Dist: aiohttp<4.0.0,>=3.8.0
|
41
|
+
Requires-Dist: requests<3.0.0,>=2.28.0
|
42
|
+
Provides-Extra: dev
|
43
|
+
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
44
|
+
Requires-Dist: pytest-asyncio>=0.20.0; extra == "dev"
|
45
|
+
Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
|
46
|
+
Requires-Dist: black>=23.0.0; extra == "dev"
|
47
|
+
Requires-Dist: isort>=5.12.0; extra == "dev"
|
48
|
+
Provides-Extra: test
|
49
|
+
Requires-Dist: pytest>=7.0.0; extra == "test"
|
50
|
+
Requires-Dist: pytest-asyncio>=0.21.0; extra == "test"
|
51
|
+
Requires-Dist: pytest-cov>=4.0.0; extra == "test"
|
52
|
+
Requires-Dist: httpx>=0.24.0; extra == "test"
|
53
|
+
Requires-Dist: pytest-mock>=3.10.0; extra == "test"
|
54
|
+
Provides-Extra: examples
|
55
|
+
Dynamic: author
|
56
|
+
Dynamic: home-page
|
57
|
+
Dynamic: maintainer
|
58
|
+
Dynamic: requires-python
|
59
|
+
|
60
|
+
# MCP Proxy Adapter
|
61
|
+
|
62
|
+
**Author:** Vasiliy Zdanovskiy
|
63
|
+
**Email:** vasilyvz@gmail.com
|
64
|
+
|
65
|
+
## Overview
|
66
|
+
|
67
|
+
MCP Proxy Adapter is a comprehensive framework for building JSON-RPC API servers with built-in security, SSL/TLS support, and proxy registration capabilities. It provides a unified interface for command execution, protocol management, and security enforcement.
|
68
|
+
|
69
|
+
## Features
|
70
|
+
|
71
|
+
- **JSON-RPC API**: Full JSON-RPC 2.0 support with built-in commands
|
72
|
+
- **Security Framework**: Integrated authentication, authorization, and SSL/TLS
|
73
|
+
- **Protocol Management**: HTTP, HTTPS, and mTLS protocol support
|
74
|
+
- **Proxy Registration**: Automatic registration with proxy servers
|
75
|
+
- **Command System**: Extensible command registry with built-in commands
|
76
|
+
- **Configuration Management**: Comprehensive configuration with environment variable overrides
|
77
|
+
|
78
|
+
## Quick Start
|
79
|
+
|
80
|
+
1. **Installation**:
|
81
|
+
```bash
|
82
|
+
pip install mcp-proxy-adapter
|
83
|
+
```
|
84
|
+
|
85
|
+
2. **Basic Configuration**:
|
86
|
+
```bash
|
87
|
+
# Use the comprehensive config with all options disabled by default
|
88
|
+
python -m mcp_proxy_adapter --config config.json
|
89
|
+
```
|
90
|
+
|
91
|
+
3. **Access the API**:
|
92
|
+
- Health check: `GET http://localhost:8000/health`
|
93
|
+
- JSON-RPC: `POST http://localhost:8000/api/jsonrpc`
|
94
|
+
- REST API: `POST http://localhost:8000/cmd`
|
95
|
+
- Documentation: `http://localhost:8000/docs`
|
96
|
+
|
97
|
+
## Configuration
|
98
|
+
|
99
|
+
The adapter uses a comprehensive JSON configuration file (`config.json`) that includes all available options with sensible defaults. All features are disabled by default and can be enabled as needed:
|
100
|
+
|
101
|
+
- **Server settings**: Host, port, debug mode
|
102
|
+
- **Security**: Authentication methods, SSL/TLS, permissions
|
103
|
+
- **Protocols**: HTTP/HTTPS/mTLS configuration
|
104
|
+
- **Proxy registration**: Automatic server registration
|
105
|
+
- **Logging**: Comprehensive logging configuration
|
106
|
+
- **Commands**: Built-in and custom command management
|
107
|
+
|
108
|
+
See `docs/EN/configuration.md` for complete configuration documentation.
|
109
|
+
|
110
|
+
## Built-in Commands
|
111
|
+
|
112
|
+
- `health` - Server health check
|
113
|
+
- `echo` - Echo test command
|
114
|
+
- `config` - Configuration management
|
115
|
+
- `help` - Command help and documentation
|
116
|
+
- `reload` - Configuration reload
|
117
|
+
- `settings` - Settings management
|
118
|
+
- `load`/`unload` - Command loading/unloading
|
119
|
+
- `plugins` - Plugin management
|
120
|
+
- `proxy_registration` - Proxy registration control
|
121
|
+
- `transport_management` - Transport protocol management
|
122
|
+
- `role_test` - Role-based access testing
|
123
|
+
|
124
|
+
## Security Features
|
125
|
+
|
126
|
+
- **Authentication**: API keys, JWT tokens, certificate-based auth
|
127
|
+
- **Authorization**: Role-based permissions with wildcard support
|
128
|
+
- **SSL/TLS**: Full SSL/TLS and mTLS support
|
129
|
+
- **Rate Limiting**: Configurable request rate limiting
|
130
|
+
- **Security Headers**: Automatic security header injection
|
131
|
+
|
132
|
+
## Examples
|
133
|
+
|
134
|
+
The `mcp_proxy_adapter/examples/` directory contains comprehensive examples for different use cases:
|
135
|
+
|
136
|
+
- **Basic Framework**: Simple HTTP server setup
|
137
|
+
- **Full Application**: Complete application with custom commands and hooks
|
138
|
+
- **Security Testing**: Comprehensive security test suite
|
139
|
+
- **Certificate Generation**: SSL/TLS certificate management
|
140
|
+
|
141
|
+
## Development
|
142
|
+
|
143
|
+
The project follows a modular architecture:
|
144
|
+
|
145
|
+
- `mcp_proxy_adapter/api/` - FastAPI application and handlers
|
146
|
+
- `mcp_proxy_adapter/commands/` - Command system and built-in commands
|
147
|
+
- `mcp_proxy_adapter/core/` - Core functionality and utilities
|
148
|
+
- `mcp_proxy_adapter/config.py` - Configuration management
|
149
|
+
|
150
|
+
## License
|
151
|
+
|
152
|
+
This project is licensed under the MIT License.
|
153
|
+
|
154
|
+
## Support
|
155
|
+
|
156
|
+
For issues and questions, please contact vasilyvz@gmail.com.
|
@@ -4,7 +4,7 @@ mcp_proxy_adapter/config.py,sha256=-7iVS0mUWWKNeao7nqTAFlUD6FcMwRlDkchN7OwYsr0,2
|
|
4
4
|
mcp_proxy_adapter/custom_openapi.py,sha256=yLle4CntYK9wpivgn9NflZyJhy-YNrmWjJzt0ai5nP0,14672
|
5
5
|
mcp_proxy_adapter/main.py,sha256=idp3KUR7CT7kTXLVPvvclJlNnt8d_HYl8_jY98uknmo,4677
|
6
6
|
mcp_proxy_adapter/openapi.py,sha256=2UZOI09ZDRJuBYBjKbMyb2U4uASszoCMD5o_4ktRpvg,13480
|
7
|
-
mcp_proxy_adapter/version.py,sha256=
|
7
|
+
mcp_proxy_adapter/version.py,sha256=QSqFIalgBU1t8DL-yxneIQ7zVK8-re5PzA9QaBZSRjw,75
|
8
8
|
mcp_proxy_adapter/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
9
9
|
mcp_proxy_adapter/api/app.py,sha256=UQ7_m-LbUzKuuPJPxS_69ahANUQ5rnPwoddQ2MMXNkg,33941
|
10
10
|
mcp_proxy_adapter/api/handlers.py,sha256=iyFGoEuUS1wxbV1ELA0zmaxIyQR7j4zw-4MrD-uIO6E,8294
|
@@ -89,24 +89,21 @@ mcp_proxy_adapter/examples/demo_client.py,sha256=en2Rtb70B1sQmhL-vdQ4PDpKNNl_mfl
|
|
89
89
|
mcp_proxy_adapter/examples/generate_all_certificates.py,sha256=lLP5RKmJwpSyprvrxQXFt_xcN4aiUzlIxk5WVdXx2Fk,19024
|
90
90
|
mcp_proxy_adapter/examples/generate_certificates.py,sha256=VRJnT9Za2Wk_oKRT5g2SA7qcGeBSxZm9wPMOM5i50T0,6707
|
91
91
|
mcp_proxy_adapter/examples/generate_certificates_and_tokens.py,sha256=hUCoJH3fy5WeR_YMHj-_W0mR0ZKUWqewH4FVN3yWyrM,17972
|
92
|
-
mcp_proxy_adapter/examples/generate_comprehensive_config.py,sha256=2UyTGIUKxw3EdCFaOMwO1vB-OZjOQV0senU44JPuyH0,4787
|
93
92
|
mcp_proxy_adapter/examples/generate_test_configs.py,sha256=FWg_QFJAWinI1lw05RccX4_VbhsCBEKPpZA6I9v6KAs,14379
|
94
93
|
mcp_proxy_adapter/examples/proxy_registration_example.py,sha256=vemRhftnjbiOBCJkmtDGqlWQ8syTG0a8755GCOnaQsg,12503
|
95
94
|
mcp_proxy_adapter/examples/run_example.py,sha256=yp-a6HIrSk3ddQmbn0KkuKwErId0aNfj028TE6U-zmY,2626
|
96
|
-
mcp_proxy_adapter/examples/run_full_test_suite.py,sha256=
|
95
|
+
mcp_proxy_adapter/examples/run_full_test_suite.py,sha256=5tdmTKcgfUMfl_ZTaY0xBly3sTXXTjJJcpja_LN7V-0,17685
|
97
96
|
mcp_proxy_adapter/examples/run_proxy_server.py,sha256=SBLSSY2F_VEBQD3MsCE_Pa9xFE6Sszr3vHdE9QOEN4Y,5242
|
98
97
|
mcp_proxy_adapter/examples/run_security_tests.py,sha256=0vjaUdWC-rLyviQuNxM3PtfiU9TzSRuxGxWMehrFA_w,23311
|
99
98
|
mcp_proxy_adapter/examples/run_security_tests_fixed.py,sha256=2BKMT0_-FhmcZA73hdQOt2XR7Cgb9Sq8qBI88BkwAAA,10934
|
100
99
|
mcp_proxy_adapter/examples/security_test_client.py,sha256=K5gEVat1SJS2pBVxqLl5c9-uiiG12k8UT3ULQDXZ2Uc,35713
|
101
|
-
mcp_proxy_adapter/examples/setup_test_environment.py,sha256=
|
100
|
+
mcp_proxy_adapter/examples/setup_test_environment.py,sha256=4aYYwtEsUhjLWXTY5l_xklspJYdL3LYA3tD98SxTAdg,34658
|
102
101
|
mcp_proxy_adapter/examples/test_config.py,sha256=ekEoUZe9q484vU_0IxOVhQdNMVJXG3IpmQpP--VmuDI,6491
|
103
102
|
mcp_proxy_adapter/examples/test_config_generator.py,sha256=PBXk1V_awJ-iBlbE66Pme5sQwu6CJDxkmqgm8uPtM58,4091
|
104
103
|
mcp_proxy_adapter/examples/test_examples.py,sha256=CYlVatdHUVC_rwv4NsvxFG3GXiKIyxPDUH43BOJHjrU,12330
|
105
|
-
mcp_proxy_adapter/examples/test_mcp_adapter.py,sha256=hwxWwIiXXvyZuLrYB0SiKURRwqCXEmPGfl0mWIfvvz8,7830
|
106
104
|
mcp_proxy_adapter/examples/universal_client.py,sha256=n1-cBPOiCipA86Zcc_mI_jMywDMZS1p3u5JT3AqTsrQ,27577
|
107
105
|
mcp_proxy_adapter/examples/basic_framework/__init__.py,sha256=4aYD--R6hy9n9CUxj7Osb9HcdVUMJ6_cfpu4ujkbCwI,345
|
108
106
|
mcp_proxy_adapter/examples/basic_framework/main.py,sha256=AkGUXW05_AK8SEKwlS_0isJKKqjulKBDPp7t36t9QJk,1787
|
109
|
-
mcp_proxy_adapter/examples/basic_framework/roles.json,sha256=I0lSP3hfq1DESv3xsZ7-xOEdzaQGCb8b9YMK_AOPDsE,510
|
110
107
|
mcp_proxy_adapter/examples/basic_framework/commands/__init__.py,sha256=_VQNLUEdsxUG-4yt9BZI_vtOxHAdGG0OUSsP6Wj-Vz4,76
|
111
108
|
mcp_proxy_adapter/examples/basic_framework/hooks/__init__.py,sha256=IE_EIXMnkdXuakZn7wLD9kBFyfDF5lYi56ejgiBeb-A,70
|
112
109
|
mcp_proxy_adapter/examples/commands/__init__.py,sha256=zvY_OpH_B1bVc_khrNIl6O8vqCw1FH6gGMAsJAkGWGY,170
|
@@ -126,7 +123,6 @@ mcp_proxy_adapter/examples/examples/full_application/hooks/builtin_command_hooks
|
|
126
123
|
mcp_proxy_adapter/examples/full_application/__init__.py,sha256=xGiPYhRAzs1Fh9wA8HoowV-Gg9QMLaMZn-OamExq1TI,320
|
127
124
|
mcp_proxy_adapter/examples/full_application/main.py,sha256=ogL3Bil_5puGnwvMh3YNOjrW76FIzzoggKEp-04HSfo,7855
|
128
125
|
mcp_proxy_adapter/examples/full_application/proxy_endpoints.py,sha256=Kt_WAsG61HLTMkKQ1mQqjvlX9I4TcfwYq0NaRR9HKvM,6179
|
129
|
-
mcp_proxy_adapter/examples/full_application/roles.json,sha256=I0lSP3hfq1DESv3xsZ7-xOEdzaQGCb8b9YMK_AOPDsE,510
|
130
126
|
mcp_proxy_adapter/examples/full_application/commands/__init__.py,sha256=yQHxVSFkAyFLUOdk42QOebUODPlQV9IbydPgF3UKsGM,217
|
131
127
|
mcp_proxy_adapter/examples/full_application/commands/custom_echo_command.py,sha256=H7FPJmVJNWT61rPWxep06-7hsYRt8XYBUSBiwqpBurU,3096
|
132
128
|
mcp_proxy_adapter/examples/full_application/commands/dynamic_calculator_command.py,sha256=DFTqVnIDt6nBdZ27-vD_f1X2cFcDInVQiCEq9ltw4lA,3428
|
@@ -136,12 +132,8 @@ mcp_proxy_adapter/examples/full_application/hooks/builtin_command_hooks.py,sha25
|
|
136
132
|
mcp_proxy_adapter/examples/scripts/config_generator.py,sha256=SKFlRRCE_pEHGbfjDuzfKpvV2DMwG6lRfK90uJwRlJM,33410
|
137
133
|
mcp_proxy_adapter/examples/scripts/create_certificates_simple.py,sha256=yCWdUIhMSDPwoPhuLR9rhPdf7jLN5hCjzNfYYgVyHnw,27769
|
138
134
|
mcp_proxy_adapter/examples/scripts/generate_certificates_and_tokens.py,sha256=hUCoJH3fy5WeR_YMHj-_W0mR0ZKUWqewH4FVN3yWyrM,17972
|
139
|
-
mcp_proxy_adapter/
|
140
|
-
mcp_proxy_adapter/
|
141
|
-
mcp_proxy_adapter/
|
142
|
-
|
143
|
-
mcp_proxy_adapter-6.4.
|
144
|
-
mcp_proxy_adapter-6.4.10.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
145
|
-
mcp_proxy_adapter-6.4.10.dist-info/entry_points.txt,sha256=J3eV6ID0lt_VSp4lIdIgBFTqLCThgObNNxRCbyfiMHw,70
|
146
|
-
mcp_proxy_adapter-6.4.10.dist-info/top_level.txt,sha256=CHk-Mc-AxjO-tRheegA2qLiQnU4vZRnxuTF81So6SAc,50
|
147
|
-
mcp_proxy_adapter-6.4.10.dist-info/RECORD,,
|
135
|
+
mcp_proxy_adapter-6.4.11.dist-info/METADATA,sha256=wMmu8wxnHQ5yesrOKSu-Aapi8J4xmOnvC5AfTvGQYV8,6087
|
136
|
+
mcp_proxy_adapter-6.4.11.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
137
|
+
mcp_proxy_adapter-6.4.11.dist-info/entry_points.txt,sha256=J3eV6ID0lt_VSp4lIdIgBFTqLCThgObNNxRCbyfiMHw,70
|
138
|
+
mcp_proxy_adapter-6.4.11.dist-info/top_level.txt,sha256=JZT7vPLBYrtroX-ij68JBhJYbjDdghcV-DFySRy-Nnw,18
|
139
|
+
mcp_proxy_adapter-6.4.11.dist-info/RECORD,,
|
@@ -0,0 +1 @@
|
|
1
|
+
mcp_proxy_adapter
|
@@ -1,21 +0,0 @@
|
|
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
|
-
}
|
@@ -1,21 +0,0 @@
|
|
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
|
-
}
|
@@ -1,177 +0,0 @@
|
|
1
|
-
#!/usr/bin/env python3
|
2
|
-
"""
|
3
|
-
Author: Vasiliy Zdanovskiy
|
4
|
-
email: vasilyvz@gmail.com
|
5
|
-
Script for generating comprehensive HTTP configuration for MCP Proxy Adapter.
|
6
|
-
Generates single comprehensive configuration with all features enabled.
|
7
|
-
"""
|
8
|
-
import json
|
9
|
-
import os
|
10
|
-
import argparse
|
11
|
-
import uuid
|
12
|
-
from typing import Dict, Any
|
13
|
-
|
14
|
-
|
15
|
-
def generate_comprehensive_http_config(
|
16
|
-
port: int = 20001,
|
17
|
-
roles_file: str = "configs/roles.json",
|
18
|
-
) -> Dict[str, Any]:
|
19
|
-
"""Generate comprehensive HTTP configuration with all features."""
|
20
|
-
return {
|
21
|
-
"uuid": str(uuid.uuid4()),
|
22
|
-
"server": {
|
23
|
-
"host": "127.0.0.1",
|
24
|
-
"port": port,
|
25
|
-
"debug": False,
|
26
|
-
"log_level": "INFO",
|
27
|
-
"workers": 1,
|
28
|
-
"reload": False
|
29
|
-
},
|
30
|
-
"ssl": {
|
31
|
-
"enabled": False
|
32
|
-
},
|
33
|
-
"security": {
|
34
|
-
"enabled": True,
|
35
|
-
"auth": {
|
36
|
-
"enabled": True,
|
37
|
-
"methods": [
|
38
|
-
"api_key"
|
39
|
-
],
|
40
|
-
"api_keys": {
|
41
|
-
"admin-token-123": "admin",
|
42
|
-
"user-token-456": "user",
|
43
|
-
"readonly-token-789": "readonly",
|
44
|
-
"guest-token-abc": "guest",
|
45
|
-
"proxy-token-def": "proxy"
|
46
|
-
}
|
47
|
-
},
|
48
|
-
"permissions": {
|
49
|
-
"enabled": True,
|
50
|
-
"roles_file": roles_file
|
51
|
-
}
|
52
|
-
},
|
53
|
-
"registration": {
|
54
|
-
"enabled": True,
|
55
|
-
"url": "http://127.0.0.1:3004/proxy",
|
56
|
-
"name": "comprehensive_http_adapter",
|
57
|
-
"capabilities": [
|
58
|
-
"http",
|
59
|
-
"token_auth",
|
60
|
-
"roles",
|
61
|
-
"registration",
|
62
|
-
"heartbeat"
|
63
|
-
],
|
64
|
-
"retry_count": 3,
|
65
|
-
"retry_delay": 5,
|
66
|
-
"heartbeat": {
|
67
|
-
"enabled": True,
|
68
|
-
"interval": 30
|
69
|
-
}
|
70
|
-
},
|
71
|
-
"protocols": {
|
72
|
-
"enabled": True,
|
73
|
-
"allowed_protocols": [
|
74
|
-
"http"
|
75
|
-
]
|
76
|
-
}
|
77
|
-
}
|
78
|
-
|
79
|
-
|
80
|
-
def generate_roles_config() -> Dict[str, Any]:
|
81
|
-
"""Generate comprehensive roles configuration."""
|
82
|
-
return {
|
83
|
-
"admin": {
|
84
|
-
"description": "Full administrative access",
|
85
|
-
"permissions": [
|
86
|
-
"read",
|
87
|
-
"write",
|
88
|
-
"execute",
|
89
|
-
"delete",
|
90
|
-
"admin"
|
91
|
-
],
|
92
|
-
"inherits": []
|
93
|
-
},
|
94
|
-
"user": {
|
95
|
-
"description": "Standard user access",
|
96
|
-
"permissions": [
|
97
|
-
"read",
|
98
|
-
"write",
|
99
|
-
"execute"
|
100
|
-
],
|
101
|
-
"inherits": []
|
102
|
-
},
|
103
|
-
"readonly": {
|
104
|
-
"description": "Read-only access",
|
105
|
-
"permissions": [
|
106
|
-
"read"
|
107
|
-
],
|
108
|
-
"inherits": []
|
109
|
-
},
|
110
|
-
"guest": {
|
111
|
-
"description": "Limited guest access",
|
112
|
-
"permissions": [
|
113
|
-
"read"
|
114
|
-
],
|
115
|
-
"inherits": []
|
116
|
-
},
|
117
|
-
"proxy": {
|
118
|
-
"description": "Proxy registration access",
|
119
|
-
"permissions": [
|
120
|
-
"read",
|
121
|
-
"register",
|
122
|
-
"heartbeat"
|
123
|
-
],
|
124
|
-
"inherits": []
|
125
|
-
}
|
126
|
-
}
|
127
|
-
|
128
|
-
|
129
|
-
def main():
|
130
|
-
"""Generate comprehensive configuration."""
|
131
|
-
parser = argparse.ArgumentParser(description="Generate comprehensive HTTP configuration")
|
132
|
-
parser.add_argument(
|
133
|
-
"--output-dir",
|
134
|
-
default="configs",
|
135
|
-
help="Output directory for configuration files"
|
136
|
-
)
|
137
|
-
parser.add_argument(
|
138
|
-
"--port",
|
139
|
-
type=int,
|
140
|
-
default=20001,
|
141
|
-
help="Server port"
|
142
|
-
)
|
143
|
-
|
144
|
-
args = parser.parse_args()
|
145
|
-
|
146
|
-
# Create output directory
|
147
|
-
os.makedirs(args.output_dir, exist_ok=True)
|
148
|
-
|
149
|
-
# Generate comprehensive HTTP configuration
|
150
|
-
config = generate_comprehensive_http_config(port=args.port)
|
151
|
-
config_file = os.path.join(args.output_dir, "comprehensive_http.json")
|
152
|
-
|
153
|
-
with open(config_file, 'w') as f:
|
154
|
-
json.dump(config, f, indent=2)
|
155
|
-
|
156
|
-
print(f"Generated: {config_file}")
|
157
|
-
|
158
|
-
# Generate roles configuration
|
159
|
-
roles = generate_roles_config()
|
160
|
-
roles_file = os.path.join(args.output_dir, "roles.json")
|
161
|
-
|
162
|
-
with open(roles_file, 'w') as f:
|
163
|
-
json.dump(roles, f, indent=2)
|
164
|
-
|
165
|
-
print(f"Generated: {roles_file}")
|
166
|
-
|
167
|
-
print(f"\nGenerated comprehensive configuration in {args.output_dir}/")
|
168
|
-
print("Configuration includes:")
|
169
|
-
print("- HTTP server with token authentication")
|
170
|
-
print("- Role-based permissions")
|
171
|
-
print("- Proxy registration")
|
172
|
-
print("- Heartbeat monitoring")
|
173
|
-
print("- 5 predefined tokens with roles")
|
174
|
-
|
175
|
-
|
176
|
-
if __name__ == "__main__":
|
177
|
-
main()
|