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,85 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Queue Server Example for MCP Proxy Adapter.
|
|
3
|
+
|
|
4
|
+
This example demonstrates how to run an MCP server with queue integration
|
|
5
|
+
for managing background jobs.
|
|
6
|
+
|
|
7
|
+
Author: Vasiliy Zdanovskiy
|
|
8
|
+
email: vasilyvz@gmail.com
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
import asyncio
|
|
12
|
+
from hypercorn.asyncio import serve
|
|
13
|
+
from hypercorn.config import Config as HyperConfig
|
|
14
|
+
from mcp_proxy_adapter.api.app import create_app
|
|
15
|
+
from mcp_proxy_adapter.commands.command_registry import registry
|
|
16
|
+
from mcp_proxy_adapter.commands.queue_commands import (
|
|
17
|
+
QueueAddJobCommand,
|
|
18
|
+
QueueStartJobCommand,
|
|
19
|
+
QueueStopJobCommand,
|
|
20
|
+
QueueDeleteJobCommand,
|
|
21
|
+
QueueGetJobStatusCommand,
|
|
22
|
+
QueueListJobsCommand,
|
|
23
|
+
QueueHealthCommand,
|
|
24
|
+
)
|
|
25
|
+
from mcp_proxy_adapter.integrations.queuemgr_integration import (
|
|
26
|
+
init_global_queue_manager,
|
|
27
|
+
shutdown_global_queue_manager,
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
async def setup_queue_commands():
|
|
32
|
+
"""Setup queue management commands."""
|
|
33
|
+
print("š§ Setting up queue management commands...")
|
|
34
|
+
|
|
35
|
+
# Register queue commands
|
|
36
|
+
registry.register(QueueAddJobCommand())
|
|
37
|
+
registry.register(QueueStartJobCommand())
|
|
38
|
+
registry.register(QueueStopJobCommand())
|
|
39
|
+
registry.register(QueueDeleteJobCommand())
|
|
40
|
+
registry.register(QueueGetJobStatusCommand())
|
|
41
|
+
registry.register(QueueListJobsCommand())
|
|
42
|
+
registry.register(QueueHealthCommand())
|
|
43
|
+
|
|
44
|
+
print("ā
Queue commands registered")
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def create_queue_server_app() -> any:
|
|
48
|
+
"""Create MCP server application with queue integration."""
|
|
49
|
+
app = create_app()
|
|
50
|
+
|
|
51
|
+
@app.on_event("startup")
|
|
52
|
+
async def _on_startup() -> None:
|
|
53
|
+
await init_global_queue_manager()
|
|
54
|
+
await setup_queue_commands()
|
|
55
|
+
|
|
56
|
+
@app.on_event("shutdown")
|
|
57
|
+
async def _on_shutdown() -> None:
|
|
58
|
+
await shutdown_global_queue_manager()
|
|
59
|
+
|
|
60
|
+
return app
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
async def main():
|
|
64
|
+
"""Main function to run the queue server with Hypercorn."""
|
|
65
|
+
print("š Starting MCP Proxy Adapter Queue Server")
|
|
66
|
+
print("=" * 50)
|
|
67
|
+
|
|
68
|
+
app = create_queue_server_app()
|
|
69
|
+
|
|
70
|
+
hc = HyperConfig()
|
|
71
|
+
hc.bind = ["0.0.0.0:8000"]
|
|
72
|
+
hc.loglevel = "info"
|
|
73
|
+
|
|
74
|
+
print("ā
MCP Queue Server will start at http://localhost:8000")
|
|
75
|
+
print("š Example usage:")
|
|
76
|
+
print(" curl -X POST http://localhost:8000/api/jsonrpc \\")
|
|
77
|
+
print(" -H 'Content-Type: application/json' \\")
|
|
78
|
+
print(" -d '{\"jsonrpc\": \"2.0\", \"method\": \"queue_health\", \"params\": {}, \"id\": 1}'")
|
|
79
|
+
print()
|
|
80
|
+
|
|
81
|
+
await serve(app, hc)
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
if __name__ == "__main__":
|
|
85
|
+
asyncio.run(main())
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Simple Queue Server for MCP Proxy Adapter.
|
|
4
|
+
|
|
5
|
+
This example demonstrates how to run an MCP server with queue integration
|
|
6
|
+
using a minimal configuration.
|
|
7
|
+
|
|
8
|
+
Author: Vasiliy Zdanovskiy
|
|
9
|
+
email: vasilyvz@gmail.com
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
import asyncio
|
|
13
|
+
import uvicorn
|
|
14
|
+
from mcp_proxy_adapter.api.app import create_app
|
|
15
|
+
from mcp_proxy_adapter.commands.command_registry import registry
|
|
16
|
+
from mcp_proxy_adapter.commands.queue_commands import (
|
|
17
|
+
QueueAddJobCommand,
|
|
18
|
+
QueueStartJobCommand,
|
|
19
|
+
QueueStopJobCommand,
|
|
20
|
+
QueueDeleteJobCommand,
|
|
21
|
+
QueueGetJobStatusCommand,
|
|
22
|
+
QueueListJobsCommand,
|
|
23
|
+
QueueHealthCommand,
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def setup_queue_commands():
|
|
28
|
+
"""Setup queue management commands."""
|
|
29
|
+
print("š§ Setting up queue management commands...")
|
|
30
|
+
|
|
31
|
+
# Register queue commands
|
|
32
|
+
registry.register_custom(QueueAddJobCommand())
|
|
33
|
+
registry.register_custom(QueueStartJobCommand())
|
|
34
|
+
registry.register_custom(QueueStopJobCommand())
|
|
35
|
+
registry.register_custom(QueueDeleteJobCommand())
|
|
36
|
+
registry.register_custom(QueueGetJobStatusCommand())
|
|
37
|
+
registry.register_custom(QueueListJobsCommand())
|
|
38
|
+
registry.register_custom(QueueHealthCommand())
|
|
39
|
+
|
|
40
|
+
print("ā
Queue commands registered")
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def create_queue_server_app():
|
|
44
|
+
"""Create MCP server application with queue integration."""
|
|
45
|
+
# Create minimal config
|
|
46
|
+
config = {
|
|
47
|
+
"uuid": "123e4567-e89b-42d3-8a56-426614174000",
|
|
48
|
+
"server": {
|
|
49
|
+
"host": "172.28.0.1",
|
|
50
|
+
"port": 8000,
|
|
51
|
+
"protocol": "http",
|
|
52
|
+
"debug": False,
|
|
53
|
+
"log_level": "INFO"
|
|
54
|
+
},
|
|
55
|
+
"logging": {
|
|
56
|
+
"level": "INFO",
|
|
57
|
+
"file": None,
|
|
58
|
+
"log_dir": "./logs",
|
|
59
|
+
"log_file": "mcp_proxy_adapter.log",
|
|
60
|
+
"error_log_file": "mcp_proxy_adapter_error.log",
|
|
61
|
+
"access_log_file": "mcp_proxy_adapter_access.log",
|
|
62
|
+
"max_file_size": "10MB",
|
|
63
|
+
"backup_count": 5,
|
|
64
|
+
"format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s",
|
|
65
|
+
"date_format": "%Y-%m-%d %H:%M:%S",
|
|
66
|
+
"console_output": True,
|
|
67
|
+
"file_output": True
|
|
68
|
+
},
|
|
69
|
+
"commands": {
|
|
70
|
+
"auto_discovery": True,
|
|
71
|
+
"commands_directory": "./commands",
|
|
72
|
+
"catalog_directory": "./catalog",
|
|
73
|
+
"plugin_servers": [],
|
|
74
|
+
"auto_install_dependencies": True,
|
|
75
|
+
"enabled_commands": ["health", "echo", "list", "help"],
|
|
76
|
+
"disabled_commands": [],
|
|
77
|
+
"custom_commands_path": "./commands"
|
|
78
|
+
},
|
|
79
|
+
"transport": {
|
|
80
|
+
"type": "http",
|
|
81
|
+
"port": 8000
|
|
82
|
+
},
|
|
83
|
+
"ssl": {
|
|
84
|
+
"enabled": False
|
|
85
|
+
},
|
|
86
|
+
"proxy_registration": {
|
|
87
|
+
"enabled": True,
|
|
88
|
+
"proxy_url": "https://172.28.0.4:3004",
|
|
89
|
+
"server_id": "mcp_queue_server",
|
|
90
|
+
"server_name": "MCP Queue Server",
|
|
91
|
+
"description": "Queue management server with mTLS",
|
|
92
|
+
"version": "6.9.28",
|
|
93
|
+
"protocol": "mtls",
|
|
94
|
+
"ssl": {
|
|
95
|
+
"enabled": True,
|
|
96
|
+
"verify_ssl": False,
|
|
97
|
+
"verify_hostname": False,
|
|
98
|
+
"verify_mode": "CERT_REQUIRED",
|
|
99
|
+
"ca_cert": "./mtls_certificates/ca/ca.crt",
|
|
100
|
+
"cert_file": "./mtls_certificates/client/test-client.crt",
|
|
101
|
+
"key_file": "./mtls_certificates/client/test-client.key"
|
|
102
|
+
},
|
|
103
|
+
"certificate": {
|
|
104
|
+
"cert_file": "./mtls_certificates/client/test-client.crt",
|
|
105
|
+
"key_file": "./mtls_certificates/client/test-client.key"
|
|
106
|
+
},
|
|
107
|
+
"registration_timeout": 30,
|
|
108
|
+
"retry_attempts": 3,
|
|
109
|
+
"retry_delay": 5,
|
|
110
|
+
"auto_register_on_startup": True,
|
|
111
|
+
"auto_unregister_on_shutdown": True,
|
|
112
|
+
"heartbeat": {
|
|
113
|
+
"enabled": True,
|
|
114
|
+
"interval": 30,
|
|
115
|
+
"timeout": 10,
|
|
116
|
+
"retry_attempts": 3,
|
|
117
|
+
"retry_delay": 5,
|
|
118
|
+
"url": "/heartbeat"
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
"debug": {
|
|
122
|
+
"enabled": False,
|
|
123
|
+
"level": "WARNING"
|
|
124
|
+
},
|
|
125
|
+
"security": {
|
|
126
|
+
"enabled": False
|
|
127
|
+
},
|
|
128
|
+
"roles": {
|
|
129
|
+
"enabled": False
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
# Register commands before creating the app
|
|
134
|
+
setup_queue_commands()
|
|
135
|
+
|
|
136
|
+
app = create_app(app_config=config)
|
|
137
|
+
|
|
138
|
+
@app.on_event("startup")
|
|
139
|
+
|
|
140
|
+
@app.on_event("shutdown")
|
|
141
|
+
|
|
142
|
+
return app
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
async def main():
|
|
146
|
+
"""Main function to run the queue server."""
|
|
147
|
+
print("š Starting MCP Proxy Adapter Queue Server")
|
|
148
|
+
print("=" * 50)
|
|
149
|
+
|
|
150
|
+
# Create the app
|
|
151
|
+
app = create_queue_server_app()
|
|
152
|
+
|
|
153
|
+
# Run the server
|
|
154
|
+
config = uvicorn.Config(
|
|
155
|
+
app=app,
|
|
156
|
+
host="0.0.0.0",
|
|
157
|
+
port=8000,
|
|
158
|
+
log_level="info"
|
|
159
|
+
)
|
|
160
|
+
server = uvicorn.Server(config)
|
|
161
|
+
|
|
162
|
+
print("ā
MCP Queue Server started at http://localhost:8000")
|
|
163
|
+
print("š Example usage:")
|
|
164
|
+
print(" curl -X POST http://localhost:8000/api/jsonrpc \\")
|
|
165
|
+
print(" -H 'Content-Type: application/json' \\")
|
|
166
|
+
print(" -d '{\"jsonrpc\": \"2.0\", \"method\": \"queue_health\", \"params\": {}, \"id\": 1}'")
|
|
167
|
+
print()
|
|
168
|
+
|
|
169
|
+
await server.serve()
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
if __name__ == "__main__":
|
|
173
|
+
asyncio.run(main())
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Required Certificates Configuration
|
|
4
|
+
Defines all certificates needed for testing different server configurations.
|
|
5
|
+
|
|
6
|
+
Author: Vasiliy Zdanovskiy
|
|
7
|
+
email: vasilyvz@gmail.com
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
# Base paths
|
|
12
|
+
CERTS_DIR = Path("certs")
|
|
13
|
+
KEYS_DIR = Path("keys")
|
|
14
|
+
|
|
15
|
+
# Required certificates for different server configurations
|
|
16
|
+
REQUIRED_CERTIFICATES = {
|
|
17
|
+
# CA Certificate (required for all SSL/mTLS configurations)
|
|
18
|
+
"ca_cert": {
|
|
19
|
+
"type": "ca",
|
|
20
|
+
"common_name": "MCP Proxy Adapter Test CA",
|
|
21
|
+
"organization": "Test Organization",
|
|
22
|
+
"country": "US",
|
|
23
|
+
"state": "Test State",
|
|
24
|
+
"city": "Test City",
|
|
25
|
+
"validity_days": 3650, # 10 years
|
|
26
|
+
"output_cert": CERTS_DIR / "ca_cert.pem",
|
|
27
|
+
"output_key": KEYS_DIR / "ca_key.pem",
|
|
28
|
+
"required_for": ["https", "mtls", "proxy_registration"]
|
|
29
|
+
},
|
|
30
|
+
|
|
31
|
+
# Server Certificate for HTTPS configurations
|
|
32
|
+
"server_cert": {
|
|
33
|
+
"type": "server",
|
|
34
|
+
"common_name": "localhost",
|
|
35
|
+
"organization": "Test Organization",
|
|
36
|
+
"country": "US",
|
|
37
|
+
"state": "Test State",
|
|
38
|
+
"city": "Test City",
|
|
39
|
+
"validity_days": 365,
|
|
40
|
+
"san": ["localhost", "127.0.0.1", "mcp-proxy-adapter-test.local"],
|
|
41
|
+
"ca_cert_path": CERTS_DIR / "ca_cert.pem",
|
|
42
|
+
"ca_key_path": KEYS_DIR / "ca_key.pem",
|
|
43
|
+
"output_cert": CERTS_DIR / "server_cert.pem",
|
|
44
|
+
"output_key": KEYS_DIR / "server_key.pem",
|
|
45
|
+
"required_for": ["https", "mtls"]
|
|
46
|
+
},
|
|
47
|
+
|
|
48
|
+
# Admin Client Certificate
|
|
49
|
+
"admin_cert": {
|
|
50
|
+
"type": "client",
|
|
51
|
+
"common_name": "admin-client",
|
|
52
|
+
"organization": "Test Organization",
|
|
53
|
+
"country": "US",
|
|
54
|
+
"state": "Test State",
|
|
55
|
+
"city": "Test City",
|
|
56
|
+
"validity_days": 365,
|
|
57
|
+
"roles": ["admin"],
|
|
58
|
+
"permissions": ["*"],
|
|
59
|
+
"ca_cert_path": CERTS_DIR / "ca_cert.pem",
|
|
60
|
+
"ca_key_path": KEYS_DIR / "ca_key.pem",
|
|
61
|
+
"output_cert": CERTS_DIR / "admin_cert.pem",
|
|
62
|
+
"output_key": KEYS_DIR / "admin_key.pem",
|
|
63
|
+
"required_for": ["mtls", "client_auth"]
|
|
64
|
+
},
|
|
65
|
+
|
|
66
|
+
# User Client Certificate
|
|
67
|
+
"user_cert": {
|
|
68
|
+
"type": "client",
|
|
69
|
+
"common_name": "user-client",
|
|
70
|
+
"organization": "Test Organization",
|
|
71
|
+
"country": "US",
|
|
72
|
+
"state": "Test State",
|
|
73
|
+
"city": "Test City",
|
|
74
|
+
"validity_days": 365,
|
|
75
|
+
"roles": ["user"],
|
|
76
|
+
"permissions": ["read", "write"],
|
|
77
|
+
"ca_cert_path": CERTS_DIR / "ca_cert.pem",
|
|
78
|
+
"ca_key_path": KEYS_DIR / "ca_key.pem",
|
|
79
|
+
"output_cert": CERTS_DIR / "user_cert.pem",
|
|
80
|
+
"output_key": KEYS_DIR / "user_key.pem",
|
|
81
|
+
"required_for": ["mtls", "client_auth"]
|
|
82
|
+
},
|
|
83
|
+
|
|
84
|
+
# Proxy Certificate for proxy registration
|
|
85
|
+
"proxy_cert": {
|
|
86
|
+
"type": "server",
|
|
87
|
+
"common_name": "proxy-server",
|
|
88
|
+
"organization": "Test Organization",
|
|
89
|
+
"country": "US",
|
|
90
|
+
"state": "Test State",
|
|
91
|
+
"city": "Test City",
|
|
92
|
+
"validity_days": 365,
|
|
93
|
+
"san": ["localhost", "127.0.0.1"],
|
|
94
|
+
"ca_cert_path": CERTS_DIR / "ca_cert.pem",
|
|
95
|
+
"ca_key_path": KEYS_DIR / "ca_key.pem",
|
|
96
|
+
"output_cert": CERTS_DIR / "proxy_cert.pem",
|
|
97
|
+
"output_key": KEYS_DIR / "proxy_key.pem",
|
|
98
|
+
"required_for": ["proxy_registration"]
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
# Certificate aliases for different configurations
|
|
103
|
+
CERTIFICATE_ALIASES = {
|
|
104
|
+
# HTTPS configurations
|
|
105
|
+
"https_server_cert": "server_cert",
|
|
106
|
+
"https_server_key": "server_cert",
|
|
107
|
+
|
|
108
|
+
# mTLS configurations
|
|
109
|
+
"mtls_server_cert": "server_cert",
|
|
110
|
+
"mtls_server_key": "server_cert",
|
|
111
|
+
"mtls_ca_cert": "ca_cert",
|
|
112
|
+
|
|
113
|
+
# Proxy registration
|
|
114
|
+
"proxy_server_cert": "proxy_cert",
|
|
115
|
+
"proxy_server_key": "proxy_cert",
|
|
116
|
+
|
|
117
|
+
# Legacy names for compatibility
|
|
118
|
+
"localhost_server_cert": "server_cert",
|
|
119
|
+
"mcp_proxy_adapter_server_cert": "server_cert",
|
|
120
|
+
"mcp_proxy_adapter_ca_cert": "ca_cert"
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
# Configuration file mappings
|
|
124
|
+
CONFIG_CERTIFICATE_MAPPINGS = {
|
|
125
|
+
"https_simple.json": {
|
|
126
|
+
"ssl.cert_file": "certs/server_cert.pem",
|
|
127
|
+
"ssl.key_file": "keys/server_key.pem",
|
|
128
|
+
"ssl.ca_cert": "certs/ca_cert.pem"
|
|
129
|
+
},
|
|
130
|
+
"https_auth.json": {
|
|
131
|
+
"ssl.cert_file": "certs/server_cert.pem",
|
|
132
|
+
"ssl.key_file": "keys/server_key.pem",
|
|
133
|
+
"ssl.ca_cert": "certs/ca_cert.pem"
|
|
134
|
+
},
|
|
135
|
+
"https_token.json": {
|
|
136
|
+
"ssl.cert_file": "certs/server_cert.pem",
|
|
137
|
+
"ssl.key_file": "keys/server_key.pem",
|
|
138
|
+
"ssl.ca_cert": "certs/ca_cert.pem"
|
|
139
|
+
},
|
|
140
|
+
"mtls_simple.json": {
|
|
141
|
+
"ssl.cert_file": "certs/server_cert.pem",
|
|
142
|
+
"ssl.key_file": "keys/server_key.pem",
|
|
143
|
+
"ssl.ca_cert": "certs/ca_cert.pem",
|
|
144
|
+
"ssl.client_cert_file": "certs/admin_cert.pem",
|
|
145
|
+
"ssl.client_key_file": "keys/admin_key.pem"
|
|
146
|
+
},
|
|
147
|
+
"mtls_no_roles.json": {
|
|
148
|
+
"ssl.cert_file": "certs/server_cert.pem",
|
|
149
|
+
"ssl.key_file": "keys/server_key.pem",
|
|
150
|
+
"ssl.ca_cert": "certs/ca_cert.pem"
|
|
151
|
+
},
|
|
152
|
+
"mtls_with_roles.json": {
|
|
153
|
+
"ssl.cert_file": "certs/server_cert.pem",
|
|
154
|
+
"ssl.key_file": "keys/server_key.pem",
|
|
155
|
+
"ssl.ca_cert": "certs/ca_cert.pem",
|
|
156
|
+
"ssl.client_cert_file": "certs/admin_cert.pem",
|
|
157
|
+
"ssl.client_key_file": "keys/admin_key.pem"
|
|
158
|
+
},
|
|
159
|
+
"mtls_with_proxy.json": {
|
|
160
|
+
"ssl.cert_file": "certs/server_cert.pem",
|
|
161
|
+
"ssl.key_file": "keys/server_key.pem",
|
|
162
|
+
"ssl.ca_cert": "certs/ca_cert.pem",
|
|
163
|
+
"ssl.client_cert_file": "certs/admin_cert.pem",
|
|
164
|
+
"ssl.client_key_file": "keys/admin_key.pem",
|
|
165
|
+
"proxy_registration.ssl.ca_cert": "certs/ca_cert.pem"
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
def get_required_certificates_for_config(config_name: str) -> List[str]:
|
|
170
|
+
"""Get list of required certificates for a specific configuration."""
|
|
171
|
+
if config_name not in CONFIG_CERTIFICATE_MAPPINGS:
|
|
172
|
+
return []
|
|
173
|
+
|
|
174
|
+
required = []
|
|
175
|
+
mappings = CONFIG_CERTIFICATE_MAPPINGS[config_name]
|
|
176
|
+
|
|
177
|
+
for cert_path in mappings.values():
|
|
178
|
+
if "server_cert.pem" in cert_path:
|
|
179
|
+
required.append("server_cert")
|
|
180
|
+
elif "ca_cert.pem" in cert_path:
|
|
181
|
+
required.append("ca_cert")
|
|
182
|
+
elif "admin_cert.pem" in cert_path:
|
|
183
|
+
required.append("admin_cert")
|
|
184
|
+
elif "proxy_cert.pem" in cert_path:
|
|
185
|
+
required.append("proxy_cert")
|
|
186
|
+
|
|
187
|
+
return list(set(required))
|
|
188
|
+
|
|
189
|
+
def get_all_required_certificates() -> List[str]:
|
|
190
|
+
"""Get list of all required certificates."""
|
|
191
|
+
all_certs = set()
|
|
192
|
+
for config_name in CONFIG_CERTIFICATE_MAPPINGS.keys():
|
|
193
|
+
all_certs.update(get_required_certificates_for_config(config_name))
|
|
194
|
+
return list(all_certs)
|
|
195
|
+
|
|
196
|
+
if __name__ == "__main__":
|
|
197
|
+
print("š Required Certificates Configuration")
|
|
198
|
+
print("=" * 50)
|
|
199
|
+
|
|
200
|
+
all_required = get_all_required_certificates()
|
|
201
|
+
print(f"Total certificates needed: {len(all_required)}")
|
|
202
|
+
print(f"Certificates: {', '.join(all_required)}")
|
|
203
|
+
|
|
204
|
+
print(f"\nš Certificate files to create:")
|
|
205
|
+
for cert_name in all_required:
|
|
206
|
+
cert_info = REQUIRED_CERTIFICATES[cert_name]
|
|
207
|
+
print(f" {cert_info['output_cert']}")
|
|
208
|
+
print(f" {cert_info['output_key']}")
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Example Runner Script
|
|
4
|
+
This script provides a simple way to run the examples.
|
|
5
|
+
Author: Vasiliy Zdanovskiy
|
|
6
|
+
email: vasilyvz@gmail.com
|
|
7
|
+
"""
|
|
8
|
+
import sys
|
|
9
|
+
import subprocess
|
|
10
|
+
import argparse
|
|
11
|
+
from pathlib import Path
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def run_basic_example(config_name: str, port: int = None):
|
|
15
|
+
"""Run basic framework example."""
|
|
16
|
+
config_path = (
|
|
17
|
+
Path(__file__).parent / "basic_framework" / "configs" / f"{config_name}.json"
|
|
18
|
+
)
|
|
19
|
+
main_script = Path(__file__).parent / "basic_framework" / "main.py"
|
|
20
|
+
if not config_path.exists():
|
|
21
|
+
print(f"ā Configuration file not found: {config_path}")
|
|
22
|
+
return False
|
|
23
|
+
cmd = [sys.executable, str(main_script), "--config", str(config_path)]
|
|
24
|
+
if port:
|
|
25
|
+
cmd.extend(["--port", str(port)])
|
|
26
|
+
print(f"š Running basic framework example with {config_name} configuration...")
|
|
27
|
+
return subprocess.run(cmd).returncode == 0
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def run_full_example(config_name: str, port: int = None):
|
|
31
|
+
"""Run full application example."""
|
|
32
|
+
config_path = (
|
|
33
|
+
Path(__file__).parent / "full_application" / "configs" / f"{config_name}.json"
|
|
34
|
+
)
|
|
35
|
+
main_script = Path(__file__).parent / "full_application" / "main.py"
|
|
36
|
+
if not config_path.exists():
|
|
37
|
+
print(f"ā Configuration file not found: {config_path}")
|
|
38
|
+
return False
|
|
39
|
+
cmd = [sys.executable, str(main_script), "--config", str(config_path)]
|
|
40
|
+
if port:
|
|
41
|
+
cmd.extend(["--port", str(port)])
|
|
42
|
+
print(f"š Running full application example with {config_name} configuration...")
|
|
43
|
+
return subprocess.run(cmd).returncode == 0
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def main():
|
|
47
|
+
"""Main function."""
|
|
48
|
+
parser = argparse.ArgumentParser(description="Run MCP Proxy Adapter Examples")
|
|
49
|
+
parser.add_argument("example", choices=["basic", "full"], help="Example type")
|
|
50
|
+
parser.add_argument(
|
|
51
|
+
"config", help="Configuration name (e.g., http_simple, https_auth)"
|
|
52
|
+
)
|
|
53
|
+
parser.add_argument("--port", type=int, help="Override port")
|
|
54
|
+
args = parser.parse_args()
|
|
55
|
+
# Available configurations
|
|
56
|
+
configs = [
|
|
57
|
+
"http_simple",
|
|
58
|
+
"https_simple",
|
|
59
|
+
"http_auth",
|
|
60
|
+
"https_auth",
|
|
61
|
+
"mtls_no_roles",
|
|
62
|
+
"mtls_with_roles",
|
|
63
|
+
]
|
|
64
|
+
if args.config not in configs:
|
|
65
|
+
print(f"ā Unknown configuration: {args.config}")
|
|
66
|
+
print(f"Available configurations: {', '.join(configs)}")
|
|
67
|
+
return 1
|
|
68
|
+
# Run the appropriate example
|
|
69
|
+
if args.example == "basic":
|
|
70
|
+
success = run_basic_example(args.config, args.port)
|
|
71
|
+
else:
|
|
72
|
+
success = run_full_example(args.config, args.port)
|
|
73
|
+
return 0 if success else 1
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
if __name__ == "__main__":
|
|
77
|
+
sys.exit(main())
|