mcp-proxy-adapter 2.0.1__py3-none-any.whl ā 6.9.50__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.
Potentially problematic release.
This version of mcp-proxy-adapter might be problematic. Click here for more details.
- mcp_proxy_adapter/__init__.py +47 -0
- mcp_proxy_adapter/__main__.py +13 -0
- mcp_proxy_adapter/api/__init__.py +0 -0
- mcp_proxy_adapter/api/app.py +66 -0
- mcp_proxy_adapter/api/core/__init__.py +18 -0
- mcp_proxy_adapter/api/core/app_factory.py +400 -0
- mcp_proxy_adapter/api/core/lifespan_manager.py +55 -0
- mcp_proxy_adapter/api/core/registration_context.py +356 -0
- mcp_proxy_adapter/api/core/registration_manager.py +307 -0
- mcp_proxy_adapter/api/core/registration_tasks.py +84 -0
- mcp_proxy_adapter/api/core/ssl_context_factory.py +88 -0
- mcp_proxy_adapter/api/handlers.py +181 -0
- mcp_proxy_adapter/api/middleware/__init__.py +21 -0
- mcp_proxy_adapter/api/middleware/base.py +54 -0
- mcp_proxy_adapter/api/middleware/command_permission_middleware.py +73 -0
- mcp_proxy_adapter/api/middleware/error_handling.py +76 -0
- mcp_proxy_adapter/api/middleware/factory.py +147 -0
- mcp_proxy_adapter/api/middleware/logging.py +31 -0
- mcp_proxy_adapter/api/middleware/performance.py +51 -0
- mcp_proxy_adapter/api/middleware/protocol_middleware.py +140 -0
- mcp_proxy_adapter/api/middleware/transport_middleware.py +87 -0
- mcp_proxy_adapter/api/middleware/unified_security.py +223 -0
- mcp_proxy_adapter/api/middleware/user_info_middleware.py +132 -0
- mcp_proxy_adapter/api/openapi/__init__.py +21 -0
- mcp_proxy_adapter/api/openapi/command_integration.py +105 -0
- mcp_proxy_adapter/api/openapi/openapi_generator.py +40 -0
- mcp_proxy_adapter/api/openapi/openapi_registry.py +62 -0
- mcp_proxy_adapter/api/openapi/schema_loader.py +116 -0
- mcp_proxy_adapter/api/schemas.py +270 -0
- mcp_proxy_adapter/api/tool_integration.py +131 -0
- mcp_proxy_adapter/api/tools.py +163 -0
- mcp_proxy_adapter/cli/__init__.py +12 -0
- mcp_proxy_adapter/cli/commands/__init__.py +15 -0
- mcp_proxy_adapter/cli/commands/client.py +100 -0
- mcp_proxy_adapter/cli/commands/config_generate.py +105 -0
- mcp_proxy_adapter/cli/commands/config_validate.py +94 -0
- mcp_proxy_adapter/cli/commands/generate.py +259 -0
- mcp_proxy_adapter/cli/commands/server.py +174 -0
- mcp_proxy_adapter/cli/commands/sets.py +132 -0
- mcp_proxy_adapter/cli/commands/testconfig.py +177 -0
- mcp_proxy_adapter/cli/examples/__init__.py +8 -0
- mcp_proxy_adapter/cli/examples/http_basic.py +82 -0
- mcp_proxy_adapter/cli/examples/https_token.py +96 -0
- mcp_proxy_adapter/cli/examples/mtls_roles.py +103 -0
- mcp_proxy_adapter/cli/main.py +63 -0
- mcp_proxy_adapter/cli/parser.py +338 -0
- mcp_proxy_adapter/cli/validators.py +231 -0
- mcp_proxy_adapter/client/jsonrpc_client/__init__.py +9 -0
- mcp_proxy_adapter/client/jsonrpc_client/client.py +42 -0
- mcp_proxy_adapter/client/jsonrpc_client/command_api.py +45 -0
- mcp_proxy_adapter/client/jsonrpc_client/proxy_api.py +224 -0
- mcp_proxy_adapter/client/jsonrpc_client/queue_api.py +60 -0
- mcp_proxy_adapter/client/jsonrpc_client/transport.py +108 -0
- mcp_proxy_adapter/client/proxy.py +123 -0
- mcp_proxy_adapter/commands/__init__.py +66 -0
- mcp_proxy_adapter/commands/auth_validation_command.py +69 -0
- mcp_proxy_adapter/commands/base.py +389 -0
- mcp_proxy_adapter/commands/builtin_commands.py +30 -0
- mcp_proxy_adapter/commands/catalog/__init__.py +20 -0
- mcp_proxy_adapter/commands/catalog/catalog_loader.py +34 -0
- mcp_proxy_adapter/commands/catalog/catalog_manager.py +122 -0
- mcp_proxy_adapter/commands/catalog/catalog_syncer.py +149 -0
- mcp_proxy_adapter/commands/catalog/command_catalog.py +43 -0
- mcp_proxy_adapter/commands/catalog/dependency_manager.py +37 -0
- mcp_proxy_adapter/commands/catalog_manager.py +97 -0
- mcp_proxy_adapter/commands/cert_monitor_command.py +552 -0
- mcp_proxy_adapter/commands/certificate_management_command.py +562 -0
- mcp_proxy_adapter/commands/command_registry.py +298 -0
- mcp_proxy_adapter/commands/config_command.py +102 -0
- mcp_proxy_adapter/commands/dependency_container.py +40 -0
- mcp_proxy_adapter/commands/dependency_manager.py +143 -0
- mcp_proxy_adapter/commands/echo_command.py +48 -0
- mcp_proxy_adapter/commands/health_command.py +142 -0
- mcp_proxy_adapter/commands/help_command.py +175 -0
- mcp_proxy_adapter/commands/hooks.py +172 -0
- mcp_proxy_adapter/commands/key_management_command.py +484 -0
- mcp_proxy_adapter/commands/load_command.py +123 -0
- mcp_proxy_adapter/commands/plugins_command.py +246 -0
- mcp_proxy_adapter/commands/protocol_management_command.py +216 -0
- mcp_proxy_adapter/commands/proxy_registration_command.py +319 -0
- mcp_proxy_adapter/commands/queue_commands.py +750 -0
- mcp_proxy_adapter/commands/registration_status_command.py +76 -0
- mcp_proxy_adapter/commands/registry/__init__.py +18 -0
- mcp_proxy_adapter/commands/registry/command_info.py +103 -0
- mcp_proxy_adapter/commands/registry/command_loader.py +207 -0
- mcp_proxy_adapter/commands/registry/command_manager.py +119 -0
- mcp_proxy_adapter/commands/registry/command_registry.py +217 -0
- mcp_proxy_adapter/commands/reload_command.py +136 -0
- mcp_proxy_adapter/commands/result.py +157 -0
- mcp_proxy_adapter/commands/role_test_command.py +99 -0
- mcp_proxy_adapter/commands/roles_management_command.py +502 -0
- mcp_proxy_adapter/commands/security_command.py +472 -0
- mcp_proxy_adapter/commands/settings_command.py +113 -0
- mcp_proxy_adapter/commands/ssl_setup_command.py +306 -0
- mcp_proxy_adapter/commands/token_management_command.py +500 -0
- mcp_proxy_adapter/commands/transport_management_command.py +129 -0
- mcp_proxy_adapter/commands/unload_command.py +92 -0
- mcp_proxy_adapter/config.py +32 -0
- mcp_proxy_adapter/core/__init__.py +8 -0
- mcp_proxy_adapter/core/app_factory.py +560 -0
- mcp_proxy_adapter/core/app_runner.py +318 -0
- mcp_proxy_adapter/core/auth_validator.py +508 -0
- mcp_proxy_adapter/core/certificate/__init__.py +20 -0
- mcp_proxy_adapter/core/certificate/certificate_creator.py +372 -0
- mcp_proxy_adapter/core/certificate/certificate_extractor.py +185 -0
- mcp_proxy_adapter/core/certificate/certificate_utils.py +249 -0
- mcp_proxy_adapter/core/certificate/certificate_validator.py +481 -0
- mcp_proxy_adapter/core/certificate/ssl_context_manager.py +65 -0
- mcp_proxy_adapter/core/certificate_utils.py +249 -0
- mcp_proxy_adapter/core/client.py +608 -0
- mcp_proxy_adapter/core/client_manager.py +271 -0
- mcp_proxy_adapter/core/client_security.py +411 -0
- mcp_proxy_adapter/core/config/__init__.py +18 -0
- mcp_proxy_adapter/core/config/config.py +237 -0
- mcp_proxy_adapter/core/config/config_factory.py +22 -0
- mcp_proxy_adapter/core/config/config_loader.py +66 -0
- mcp_proxy_adapter/core/config/feature_manager.py +31 -0
- mcp_proxy_adapter/core/config/simple_config.py +204 -0
- mcp_proxy_adapter/core/config/simple_config_generator.py +131 -0
- mcp_proxy_adapter/core/config/simple_config_validator.py +476 -0
- mcp_proxy_adapter/core/config_converter.py +252 -0
- mcp_proxy_adapter/core/config_validator.py +211 -0
- mcp_proxy_adapter/core/crl_utils.py +362 -0
- mcp_proxy_adapter/core/errors.py +276 -0
- mcp_proxy_adapter/core/job_manager.py +54 -0
- mcp_proxy_adapter/core/logging.py +250 -0
- mcp_proxy_adapter/core/mtls_asgi.py +140 -0
- mcp_proxy_adapter/core/mtls_asgi_app.py +187 -0
- mcp_proxy_adapter/core/mtls_proxy.py +229 -0
- mcp_proxy_adapter/core/mtls_server.py +154 -0
- mcp_proxy_adapter/core/protocol_manager.py +232 -0
- mcp_proxy_adapter/core/proxy/__init__.py +19 -0
- mcp_proxy_adapter/core/proxy/auth_manager.py +26 -0
- mcp_proxy_adapter/core/proxy/proxy_registration_manager.py +160 -0
- mcp_proxy_adapter/core/proxy/registration_client.py +186 -0
- mcp_proxy_adapter/core/proxy/ssl_manager.py +101 -0
- mcp_proxy_adapter/core/proxy_client.py +184 -0
- mcp_proxy_adapter/core/proxy_registration.py +80 -0
- mcp_proxy_adapter/core/role_utils.py +103 -0
- mcp_proxy_adapter/core/security_adapter.py +343 -0
- mcp_proxy_adapter/core/security_factory.py +96 -0
- mcp_proxy_adapter/core/security_integration.py +342 -0
- mcp_proxy_adapter/core/server_adapter.py +251 -0
- mcp_proxy_adapter/core/server_engine.py +217 -0
- mcp_proxy_adapter/core/settings.py +260 -0
- mcp_proxy_adapter/core/signal_handler.py +107 -0
- mcp_proxy_adapter/core/ssl_utils.py +161 -0
- mcp_proxy_adapter/core/transport_manager.py +153 -0
- mcp_proxy_adapter/core/unified_config_adapter.py +471 -0
- mcp_proxy_adapter/core/utils.py +101 -0
- mcp_proxy_adapter/core/validation/__init__.py +21 -0
- mcp_proxy_adapter/core/validation/config_validator.py +219 -0
- mcp_proxy_adapter/core/validation/file_validator.py +131 -0
- mcp_proxy_adapter/core/validation/protocol_validator.py +205 -0
- mcp_proxy_adapter/core/validation/security_validator.py +140 -0
- mcp_proxy_adapter/core/validation/validation_result.py +27 -0
- mcp_proxy_adapter/custom_openapi.py +58 -0
- mcp_proxy_adapter/examples/__init__.py +16 -0
- mcp_proxy_adapter/examples/basic_framework/__init__.py +9 -0
- mcp_proxy_adapter/examples/basic_framework/commands/__init__.py +4 -0
- mcp_proxy_adapter/examples/basic_framework/hooks/__init__.py +4 -0
- mcp_proxy_adapter/examples/basic_framework/main.py +52 -0
- mcp_proxy_adapter/examples/bugfix_certificate_config.py +261 -0
- mcp_proxy_adapter/examples/cert_manager_bugfix.py +203 -0
- mcp_proxy_adapter/examples/check_config.py +413 -0
- mcp_proxy_adapter/examples/client_usage_example.py +164 -0
- mcp_proxy_adapter/examples/commands/__init__.py +5 -0
- mcp_proxy_adapter/examples/config_builder.py +234 -0
- mcp_proxy_adapter/examples/config_cli.py +282 -0
- mcp_proxy_adapter/examples/create_test_configs.py +174 -0
- mcp_proxy_adapter/examples/debug_request_state.py +130 -0
- mcp_proxy_adapter/examples/debug_role_chain.py +191 -0
- mcp_proxy_adapter/examples/demo_client.py +287 -0
- mcp_proxy_adapter/examples/full_application/__init__.py +12 -0
- mcp_proxy_adapter/examples/full_application/commands/__init__.py +8 -0
- mcp_proxy_adapter/examples/full_application/commands/custom_echo_command.py +45 -0
- mcp_proxy_adapter/examples/full_application/commands/dynamic_calculator_command.py +52 -0
- mcp_proxy_adapter/examples/full_application/commands/echo_command.py +32 -0
- mcp_proxy_adapter/examples/full_application/commands/help_command.py +54 -0
- mcp_proxy_adapter/examples/full_application/commands/list_command.py +57 -0
- mcp_proxy_adapter/examples/full_application/hooks/__init__.py +5 -0
- mcp_proxy_adapter/examples/full_application/hooks/application_hooks.py +29 -0
- mcp_proxy_adapter/examples/full_application/hooks/builtin_command_hooks.py +27 -0
- mcp_proxy_adapter/examples/full_application/main.py +311 -0
- mcp_proxy_adapter/examples/full_application/proxy_endpoints.py +161 -0
- mcp_proxy_adapter/examples/full_application/run_mtls.py +252 -0
- mcp_proxy_adapter/examples/full_application/run_simple.py +152 -0
- mcp_proxy_adapter/examples/full_application/test_minimal_server.py +45 -0
- mcp_proxy_adapter/examples/full_application/test_server.py +163 -0
- mcp_proxy_adapter/examples/full_application/test_simple_server.py +62 -0
- mcp_proxy_adapter/examples/generate_config.py +502 -0
- mcp_proxy_adapter/examples/proxy_registration_example.py +335 -0
- mcp_proxy_adapter/examples/queue_demo_simple.py +632 -0
- mcp_proxy_adapter/examples/queue_integration_example.py +578 -0
- mcp_proxy_adapter/examples/queue_server_demo.py +82 -0
- mcp_proxy_adapter/examples/queue_server_example.py +85 -0
- mcp_proxy_adapter/examples/queue_server_simple.py +173 -0
- mcp_proxy_adapter/examples/required_certificates.py +208 -0
- mcp_proxy_adapter/examples/run_example.py +77 -0
- mcp_proxy_adapter/examples/run_full_test_suite.py +619 -0
- mcp_proxy_adapter/examples/run_proxy_server.py +153 -0
- mcp_proxy_adapter/examples/run_security_tests_fixed.py +435 -0
- mcp_proxy_adapter/examples/security_test/__init__.py +18 -0
- mcp_proxy_adapter/examples/security_test/auth_manager.py +14 -0
- mcp_proxy_adapter/examples/security_test/ssl_context_manager.py +28 -0
- mcp_proxy_adapter/examples/security_test/test_client.py +159 -0
- mcp_proxy_adapter/examples/security_test/test_result.py +22 -0
- mcp_proxy_adapter/examples/security_test_client.py +72 -0
- mcp_proxy_adapter/examples/setup/__init__.py +24 -0
- mcp_proxy_adapter/examples/setup/certificate_manager.py +215 -0
- mcp_proxy_adapter/examples/setup/config_generator.py +12 -0
- mcp_proxy_adapter/examples/setup/config_validator.py +118 -0
- mcp_proxy_adapter/examples/setup/environment_setup.py +62 -0
- mcp_proxy_adapter/examples/setup/test_files_generator.py +10 -0
- mcp_proxy_adapter/examples/setup/test_runner.py +89 -0
- mcp_proxy_adapter/examples/setup_test_environment.py +235 -0
- mcp_proxy_adapter/examples/simple_protocol_test.py +125 -0
- mcp_proxy_adapter/examples/test_chk_hostname_automated.py +211 -0
- mcp_proxy_adapter/examples/test_config.py +205 -0
- mcp_proxy_adapter/examples/test_config_builder.py +110 -0
- mcp_proxy_adapter/examples/test_examples.py +308 -0
- mcp_proxy_adapter/examples/test_framework_complete.py +267 -0
- mcp_proxy_adapter/examples/test_mcp_server.py +187 -0
- mcp_proxy_adapter/examples/test_protocol_examples.py +337 -0
- mcp_proxy_adapter/examples/universal_client.py +674 -0
- mcp_proxy_adapter/examples/update_config_certificates.py +135 -0
- mcp_proxy_adapter/examples/validate_generator_compatibility.py +385 -0
- mcp_proxy_adapter/examples/validate_generator_compatibility_simple.py +61 -0
- mcp_proxy_adapter/integrations/__init__.py +25 -0
- mcp_proxy_adapter/integrations/queuemgr_integration.py +462 -0
- mcp_proxy_adapter/main.py +311 -0
- mcp_proxy_adapter/openapi.py +375 -0
- mcp_proxy_adapter/schemas/base_schema.json +114 -0
- mcp_proxy_adapter/schemas/openapi_schema.json +314 -0
- mcp_proxy_adapter/schemas/roles.json +37 -0
- mcp_proxy_adapter/schemas/roles_schema.json +162 -0
- mcp_proxy_adapter/version.py +5 -0
- mcp_proxy_adapter-6.9.50.dist-info/METADATA +1088 -0
- mcp_proxy_adapter-6.9.50.dist-info/RECORD +242 -0
- {mcp_proxy_adapter-2.0.1.dist-info ā mcp_proxy_adapter-6.9.50.dist-info}/WHEEL +1 -1
- mcp_proxy_adapter-6.9.50.dist-info/entry_points.txt +14 -0
- mcp_proxy_adapter-6.9.50.dist-info/top_level.txt +1 -0
- adapters/__init__.py +0 -16
- analyzers/__init__.py +0 -14
- analyzers/docstring_analyzer.py +0 -199
- analyzers/type_analyzer.py +0 -151
- cli/__init__.py +0 -12
- cli/__main__.py +0 -79
- cli/command_runner.py +0 -233
- dispatchers/__init__.py +0 -14
- dispatchers/base_dispatcher.py +0 -85
- dispatchers/json_rpc_dispatcher.py +0 -198
- generators/__init__.py +0 -14
- generators/endpoint_generator.py +0 -172
- generators/openapi_generator.py +0 -254
- generators/rest_api_generator.py +0 -207
- mcp_proxy_adapter-2.0.1.dist-info/METADATA +0 -272
- mcp_proxy_adapter-2.0.1.dist-info/RECORD +0 -28
- mcp_proxy_adapter-2.0.1.dist-info/licenses/LICENSE +0 -21
- mcp_proxy_adapter-2.0.1.dist-info/top_level.txt +0 -7
- openapi_schema/__init__.py +0 -38
- openapi_schema/command_registry.py +0 -312
- openapi_schema/rest_schema.py +0 -510
- openapi_schema/rpc_generator.py +0 -307
- openapi_schema/rpc_schema.py +0 -416
- validators/__init__.py +0 -14
- validators/base_validator.py +0 -23
- validators/docstring_validator.py +0 -75
- validators/metadata_validator.py +0 -76
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Test mTLS Server for Full Application Example
|
|
4
|
+
Simple HTTPS server with mTLS for testing curl commands.
|
|
5
|
+
|
|
6
|
+
Author: Vasiliy Zdanovskiy
|
|
7
|
+
email: vasilyvz@gmail.com
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
import sys
|
|
11
|
+
import json
|
|
12
|
+
import ssl
|
|
13
|
+
import socket
|
|
14
|
+
import threading
|
|
15
|
+
import time
|
|
16
|
+
from pathlib import Path
|
|
17
|
+
from http.server import HTTPServer, BaseHTTPRequestHandler
|
|
18
|
+
|
|
19
|
+
class TestMTLSHandler(BaseHTTPRequestHandler):
|
|
20
|
+
"""Test handler for mTLS requests."""
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def get_client_cert_info(self):
|
|
25
|
+
"""Get client certificate information."""
|
|
26
|
+
try:
|
|
27
|
+
cert = self.connection.getpeercert()
|
|
28
|
+
if cert:
|
|
29
|
+
return {
|
|
30
|
+
"subject": dict(x[0] for x in cert.get('subject', [])),
|
|
31
|
+
"issuer": dict(x[0] for x in cert.get('issuer', [])),
|
|
32
|
+
"serial": cert.get('serialNumber'),
|
|
33
|
+
"not_before": cert.get('notBefore'),
|
|
34
|
+
"not_after": cert.get('notAfter')
|
|
35
|
+
}
|
|
36
|
+
except Exception:
|
|
37
|
+
pass
|
|
38
|
+
return None
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class TestMTLSServer:
|
|
42
|
+
"""Test mTLS server for the full application example."""
|
|
43
|
+
|
|
44
|
+
def __init__(self, config_path: str):
|
|
45
|
+
self.config_path = config_path
|
|
46
|
+
self.config = self.load_config()
|
|
47
|
+
self.server = None
|
|
48
|
+
self.thread = None
|
|
49
|
+
|
|
50
|
+
def load_config(self):
|
|
51
|
+
"""Load configuration from file."""
|
|
52
|
+
with open(self.config_path, 'r') as f:
|
|
53
|
+
return json.load(f)
|
|
54
|
+
|
|
55
|
+
def create_ssl_context(self):
|
|
56
|
+
"""Create SSL context for mTLS."""
|
|
57
|
+
ssl_config = self.config.get('ssl', {})
|
|
58
|
+
|
|
59
|
+
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
|
|
60
|
+
context.load_cert_chain(
|
|
61
|
+
ssl_config.get('cert_file'),
|
|
62
|
+
ssl_config.get('key_file')
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
# Load CA certificate for client verification
|
|
66
|
+
if ssl_config.get('verify_client', False):
|
|
67
|
+
context.load_verify_locations(ssl_config.get('ca_cert_file'))
|
|
68
|
+
context.verify_mode = ssl.CERT_REQUIRED
|
|
69
|
+
|
|
70
|
+
# Set ciphers and protocols
|
|
71
|
+
if ssl_config.get('ciphers'):
|
|
72
|
+
context.set_ciphers(ssl_config['ciphers'])
|
|
73
|
+
|
|
74
|
+
return context
|
|
75
|
+
|
|
76
|
+
def start_server(self):
|
|
77
|
+
"""Start the mTLS server."""
|
|
78
|
+
server_config = self.config.get('server', {})
|
|
79
|
+
host = server_config.get('host', '0.0.0.0')
|
|
80
|
+
port = server_config.get('port', 8443)
|
|
81
|
+
|
|
82
|
+
print(f"š Starting mTLS Test Server")
|
|
83
|
+
print(f"š Configuration: {self.config_path}")
|
|
84
|
+
print(f"š Server: {host}:{port}")
|
|
85
|
+
print(f"š mTLS: {'Enabled' if self.config.get('ssl', {}).get('verify_client', False) else 'Disabled'}")
|
|
86
|
+
|
|
87
|
+
# Create server
|
|
88
|
+
self.server = HTTPServer((host, port), TestMTLSHandler)
|
|
89
|
+
|
|
90
|
+
# Configure SSL
|
|
91
|
+
ssl_context = self.create_ssl_context()
|
|
92
|
+
self.server.socket = ssl_context.wrap_socket(
|
|
93
|
+
self.server.socket,
|
|
94
|
+
server_side=True
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
print(f"ā
mTLS Test Server started on {host}:{port}")
|
|
98
|
+
print(f"š SSL Context configured")
|
|
99
|
+
print(f"š Available endpoints:")
|
|
100
|
+
print(f" - GET /health - Health check")
|
|
101
|
+
print(f" - GET /echo - Echo test")
|
|
102
|
+
print(f" - POST /echo - Echo with data")
|
|
103
|
+
print(f"\nš Press Ctrl+C to stop the server")
|
|
104
|
+
|
|
105
|
+
try:
|
|
106
|
+
self.server.serve_forever()
|
|
107
|
+
except KeyboardInterrupt:
|
|
108
|
+
print(f"\nš Server stopped by user")
|
|
109
|
+
self.server.shutdown()
|
|
110
|
+
|
|
111
|
+
def start_background(self):
|
|
112
|
+
"""Start server in background thread."""
|
|
113
|
+
self.thread = threading.Thread(target=self.start_server, daemon=True)
|
|
114
|
+
self.thread.start()
|
|
115
|
+
time.sleep(1) # Give server time to start
|
|
116
|
+
return self.thread.is_alive()
|
|
117
|
+
|
|
118
|
+
def stop_server(self):
|
|
119
|
+
"""Stop the server."""
|
|
120
|
+
if self.server:
|
|
121
|
+
self.server.shutdown()
|
|
122
|
+
if self.thread:
|
|
123
|
+
self.thread.join(timeout=5)
|
|
124
|
+
|
|
125
|
+
def main():
|
|
126
|
+
"""Main function."""
|
|
127
|
+
import argparse
|
|
128
|
+
|
|
129
|
+
parser = argparse.ArgumentParser(description="Test mTLS Server")
|
|
130
|
+
parser.add_argument("--config", required=True, help="Configuration file path")
|
|
131
|
+
parser.add_argument("--background", action="store_true", help="Run in background")
|
|
132
|
+
args = parser.parse_args()
|
|
133
|
+
|
|
134
|
+
# Check if config file exists
|
|
135
|
+
config_path = Path(args.config)
|
|
136
|
+
if not config_path.exists():
|
|
137
|
+
print(f"ā Configuration file not found: {config_path}")
|
|
138
|
+
return 1
|
|
139
|
+
|
|
140
|
+
# Create and start server
|
|
141
|
+
server = TestMTLSServer(str(config_path))
|
|
142
|
+
|
|
143
|
+
if args.background:
|
|
144
|
+
print("š Starting server in background...")
|
|
145
|
+
if server.start_background():
|
|
146
|
+
print("ā
Server started in background")
|
|
147
|
+
print("š” Use Ctrl+C to stop")
|
|
148
|
+
try:
|
|
149
|
+
while True:
|
|
150
|
+
time.sleep(1)
|
|
151
|
+
except KeyboardInterrupt:
|
|
152
|
+
print("\nš Stopping background server...")
|
|
153
|
+
server.stop_server()
|
|
154
|
+
else:
|
|
155
|
+
print("ā Failed to start server in background")
|
|
156
|
+
return 1
|
|
157
|
+
else:
|
|
158
|
+
server.start_server()
|
|
159
|
+
|
|
160
|
+
return 0
|
|
161
|
+
|
|
162
|
+
if __name__ == "__main__":
|
|
163
|
+
sys.exit(main())
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Simple server test without complex lifespan.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import sys
|
|
7
|
+
import os
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
|
|
10
|
+
# Add the project root to the path
|
|
11
|
+
project_root = Path(__file__).parent.parent.parent.parent
|
|
12
|
+
sys.path.insert(0, str(project_root))
|
|
13
|
+
|
|
14
|
+
from mcp_proxy_adapter.api.app import create_app
|
|
15
|
+
from mcp_proxy_adapter.config import Config
|
|
16
|
+
import uvicorn
|
|
17
|
+
|
|
18
|
+
def main():
|
|
19
|
+
"""Test simple server startup."""
|
|
20
|
+
print("š Testing Simple Server Startup")
|
|
21
|
+
print("=" * 50)
|
|
22
|
+
|
|
23
|
+
# Load configuration
|
|
24
|
+
config_path = "configs/http_simple_correct.json"
|
|
25
|
+
if not os.path.exists(config_path):
|
|
26
|
+
print(f"ā Configuration file not found: {config_path}")
|
|
27
|
+
return 1
|
|
28
|
+
|
|
29
|
+
try:
|
|
30
|
+
# Load config
|
|
31
|
+
config = Config()
|
|
32
|
+
config.load_from_file(config_path)
|
|
33
|
+
app_config = config.get_all()
|
|
34
|
+
|
|
35
|
+
print(f"ā
Configuration loaded: {config_path}")
|
|
36
|
+
print(f"š Config keys: {list(app_config.keys())}")
|
|
37
|
+
|
|
38
|
+
# Create app
|
|
39
|
+
app = create_app(
|
|
40
|
+
title="Test Server",
|
|
41
|
+
description="Simple test server",
|
|
42
|
+
version="1.0.0",
|
|
43
|
+
app_config=app_config
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
print("ā
FastAPI app created successfully")
|
|
47
|
+
|
|
48
|
+
# Start server
|
|
49
|
+
print("š Starting server on http://0.0.0.0:8000")
|
|
50
|
+
print("š” Test with: curl -X POST http://localhost:8000/api/jsonrpc -H 'Content-Type: application/json' -d '{\"jsonrpc\": \"2.0\", \"method\": \"health\", \"id\": 1}'")
|
|
51
|
+
print("š Press Ctrl+C to stop")
|
|
52
|
+
|
|
53
|
+
uvicorn.run(app, host="0.0.0.0", port=8000)
|
|
54
|
+
|
|
55
|
+
except Exception as e:
|
|
56
|
+
print(f"ā Error: {e}")
|
|
57
|
+
import traceback
|
|
58
|
+
traceback.print_exc()
|
|
59
|
+
return 1
|
|
60
|
+
|
|
61
|
+
if __name__ == "__main__":
|
|
62
|
+
sys.exit(main())
|