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,242 @@
|
|
|
1
|
+
mcp_proxy_adapter/__init__.py,sha256=es6Hd5HexYP6yeFXKnFdro8enuWHXfbYGnimrVeQ78U,1380
|
|
2
|
+
mcp_proxy_adapter/__main__.py,sha256=lyUSshaAV8u7fOU4Ru4lqGuiqqf8NX8DNnymeUpvwU8,233
|
|
3
|
+
mcp_proxy_adapter/config.py,sha256=Nj5Cpyt2_BHRCWF_TsdL6W5Eb7_yNe7WVsCNZSx2LT0,518
|
|
4
|
+
mcp_proxy_adapter/custom_openapi.py,sha256=WY9JTPoi5uofaopU4tm703qQ8ak2qezPmk98dUyWm2U,1482
|
|
5
|
+
mcp_proxy_adapter/main.py,sha256=mnd-_GXUqIC9zq-5c4iOOITWgaYHf9HX25q2RQzsEW4,11343
|
|
6
|
+
mcp_proxy_adapter/openapi.py,sha256=N3iJ4h6vJKz_pjoHiJxM_mFEodsbz8aN3v0NVV7YX7w,12885
|
|
7
|
+
mcp_proxy_adapter/version.py,sha256=lu6VNwMyXlSFzd0UM3Sm1gtfXX41kLQ0uc-MkBeLHGQ,75
|
|
8
|
+
mcp_proxy_adapter/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
9
|
+
mcp_proxy_adapter/api/app.py,sha256=zvqMxMVx0YJ32Q6zFKhpyDdaF8BKVGokBxpwbqBTWmU,1921
|
|
10
|
+
mcp_proxy_adapter/api/handlers.py,sha256=jNzWrks7throenjQ6salj4C8tBxIvx-QBhK9IkfixxM,6370
|
|
11
|
+
mcp_proxy_adapter/api/schemas.py,sha256=oh-uj2B7qRPnZJvMG5n4Z4GgfIIFQSxBT4R5UdqqVFs,9511
|
|
12
|
+
mcp_proxy_adapter/api/tool_integration.py,sha256=aMG2PPBjz04w2_3clmYaEdJR9uy6x0Fi1doBIK8P1IU,5075
|
|
13
|
+
mcp_proxy_adapter/api/tools.py,sha256=lPrG1lXzS7B2UFl5Jvu5i1mr4fQqpFZdpACBeYEiycU,6410
|
|
14
|
+
mcp_proxy_adapter/api/core/__init__.py,sha256=OTGY-JQ-tV2Grnd6gs9FVxIqX4QvLKj5JJt3zxHX5UU,400
|
|
15
|
+
mcp_proxy_adapter/api/core/app_factory.py,sha256=Ll0fuZXZ4DtrhsyxuH5GMIusZHHxgJP88wNutnIMjfM,17511
|
|
16
|
+
mcp_proxy_adapter/api/core/lifespan_manager.py,sha256=mTBtWC_Z277H5fdX3asGIag3ecc8oGtO9F6bVEeD1wg,1682
|
|
17
|
+
mcp_proxy_adapter/api/core/registration_context.py,sha256=__d__K1mj-5NvSkmKST3dONXhlMrB711E2SppFcpIbQ,13985
|
|
18
|
+
mcp_proxy_adapter/api/core/registration_manager.py,sha256=Za_L83D8EhTtU7ILzyCV9fhV-uE04z8kBHIxabusJSw,11525
|
|
19
|
+
mcp_proxy_adapter/api/core/registration_tasks.py,sha256=lgq3CvCZir0GYWzku_G8CW5Y8_w2_6Xva5Q00LFKpHY,2539
|
|
20
|
+
mcp_proxy_adapter/api/core/ssl_context_factory.py,sha256=9gMwvhKWA_-9gDpGr1h7OghkAAwRKYpSIz2vk3Dy0pY,3165
|
|
21
|
+
mcp_proxy_adapter/api/middleware/__init__.py,sha256=yFB4U84cQZXBDw9R2WfziGjrBDafV_jMAT1WLWlicJo,601
|
|
22
|
+
mcp_proxy_adapter/api/middleware/base.py,sha256=OtGcCKSSXFFA9hNxsiaiaZ72qQpw_P2VyTxEJtVJXps,1264
|
|
23
|
+
mcp_proxy_adapter/api/middleware/command_permission_middleware.py,sha256=T-QZ-jYKZAgYGjsvTAHVf0nGtEYYv42EFal3iwREwiA,1984
|
|
24
|
+
mcp_proxy_adapter/api/middleware/error_handling.py,sha256=BumS2oM3NPMQi6-Do0mNWRu2GNJ0Cc6pW9mP8osxAyc,2010
|
|
25
|
+
mcp_proxy_adapter/api/middleware/factory.py,sha256=A27VPC_BYg-ssbfivONvRs_68w8pcACTOVTEi-yhhzU,4709
|
|
26
|
+
mcp_proxy_adapter/api/middleware/logging.py,sha256=dL_gRkl29lUXoQ5OKnc9yRluhZ_Blei4Rjom9e_hUXA,685
|
|
27
|
+
mcp_proxy_adapter/api/middleware/performance.py,sha256=FGuHWaPSwrmMBLvsLt_JBnkTJexxvO7yupV68ssuPo4,1441
|
|
28
|
+
mcp_proxy_adapter/api/middleware/protocol_middleware.py,sha256=FHyeU2lirHF6F83M6-fOFaz1uqWy35gtrR8eOXwYAyE,5464
|
|
29
|
+
mcp_proxy_adapter/api/middleware/transport_middleware.py,sha256=_WaKNif-cvV-_W15JECDHK9JRzz2rAo8AIYIYmBnroc,2790
|
|
30
|
+
mcp_proxy_adapter/api/middleware/unified_security.py,sha256=tUSzPfAmClujj0xGdRymRikyDT-ZaH2sUG69PcmmV-A,8311
|
|
31
|
+
mcp_proxy_adapter/api/middleware/user_info_middleware.py,sha256=9e1Pdaft-GTWECpXbW2IxpxlKYyLPUjJd1iOnLIzjRU,5991
|
|
32
|
+
mcp_proxy_adapter/api/openapi/__init__.py,sha256=6uLzjXaCpviEESIwNtfWpBc6EGQOTcMo2XWJbj4zk7g,555
|
|
33
|
+
mcp_proxy_adapter/api/openapi/command_integration.py,sha256=cMWrJRB_OxO30OR_B_VevoTHDTwXIIm4mPlGLrqLQ-U,3278
|
|
34
|
+
mcp_proxy_adapter/api/openapi/openapi_generator.py,sha256=bEVgRryZU0gouzYDKM9zPofM1RGdR-Rt5S6Y0qottfY,1559
|
|
35
|
+
mcp_proxy_adapter/api/openapi/openapi_registry.py,sha256=RRMDVLYSGQCB88qA0YpoJ_y-zuLcgckP4_RLFJ_PbfA,1338
|
|
36
|
+
mcp_proxy_adapter/api/openapi/schema_loader.py,sha256=tQtMQOSIV17kfnwzMD5mh5LWZF8XhIqseaHcevRZQB0,4462
|
|
37
|
+
mcp_proxy_adapter/cli/__init__.py,sha256=VbZZ5NWmDIf5Vhj-BDe6yElg4ximxokNmBXKN8G-R2U,213
|
|
38
|
+
mcp_proxy_adapter/cli/main.py,sha256=kgHCJkV6Q1YkBjcl7jbPuNbqaX1WiUNAMvBl7Ha2QmM,2220
|
|
39
|
+
mcp_proxy_adapter/cli/parser.py,sha256=jLgtWEoLQk29NrxJRs1uPC2zsnjNZJPv3IWr84vT87E,12299
|
|
40
|
+
mcp_proxy_adapter/cli/validators.py,sha256=Bl_oYSbL6FLA4HU5cZYkOdSky0Gfb0Tk4sg83PRkgAU,6554
|
|
41
|
+
mcp_proxy_adapter/cli/commands/__init__.py,sha256=8CkC1rFB4KgxB4g3amFUpQIiJK_8rel8ANUI_n_Jgvk,373
|
|
42
|
+
mcp_proxy_adapter/cli/commands/client.py,sha256=d-fd6mohw9b5NDS4DzwwFBM2Zwk0Tumzmf-3PVIX2B0,3210
|
|
43
|
+
mcp_proxy_adapter/cli/commands/config_generate.py,sha256=h2W5FTTadGRqHbf90Kn5ySxA2Ji2Jn5SmJrMOwvZqyc,4605
|
|
44
|
+
mcp_proxy_adapter/cli/commands/config_validate.py,sha256=fbttu3UmRtWUC4kDkZn34r0RnCkks4m2-J77s00ufkA,2909
|
|
45
|
+
mcp_proxy_adapter/cli/commands/generate.py,sha256=-qVk_7ynE6FHZvjUpTZJAhLm1sRm3uq6X8JHX7yNdd0,10018
|
|
46
|
+
mcp_proxy_adapter/cli/commands/server.py,sha256=WwmAtLTIAzyCaToDbjVY3OatHUSwqnRK5YdXnE3PKss,6663
|
|
47
|
+
mcp_proxy_adapter/cli/commands/sets.py,sha256=N4MDyjDo26mv6a-5zjLoGEd6IbJkj6JmcUJjoOUXiL4,4558
|
|
48
|
+
mcp_proxy_adapter/cli/commands/testconfig.py,sha256=ZUY-3bm_sZbCg-gnzxWmHsGwqIu88aqKKba_4mLsF1s,6725
|
|
49
|
+
mcp_proxy_adapter/cli/examples/__init__.py,sha256=UcVT4i9GwjU8ud3bzq9_yv1-vTJTuVyxRUvlSrxj8hw,145
|
|
50
|
+
mcp_proxy_adapter/cli/examples/http_basic.py,sha256=9qIsXuxez1OoGF8G8AKOhMuYOPbi-cgH5NzSuAD7ixA,2393
|
|
51
|
+
mcp_proxy_adapter/cli/examples/https_token.py,sha256=3hfXEAhcSFc5OgkbApoqTy9vm-VXpVgZrTdqUiYtKLo,3362
|
|
52
|
+
mcp_proxy_adapter/cli/examples/mtls_roles.py,sha256=4UlRHrbZxH71I6zAoxckzW8fG2zqOHRBwQzneu61ZDI,3785
|
|
53
|
+
mcp_proxy_adapter/client/proxy.py,sha256=BUaMHj3S8NlhhxH9DexzooGKWcIA9r4uSzhPOfcwNFk,3572
|
|
54
|
+
mcp_proxy_adapter/client/jsonrpc_client/__init__.py,sha256=jmVGar3W1RXvo08GA8vG3a4rYfiqf5gZMW1R-R-qgZg,196
|
|
55
|
+
mcp_proxy_adapter/client/jsonrpc_client/client.py,sha256=RLWX6rt2-_uf_rCSZsBXfzZS7OUSqHiFVBUuk4D8Ozw,1143
|
|
56
|
+
mcp_proxy_adapter/client/jsonrpc_client/command_api.py,sha256=GzD0Rie5JM_bFElcDkT6bRy5Ep9hEccolT69ti_IUg4,1540
|
|
57
|
+
mcp_proxy_adapter/client/jsonrpc_client/proxy_api.py,sha256=_i5R343lkNzDSpiSWp0qpC09gzsIpyG1SltSKC4Iaso,7940
|
|
58
|
+
mcp_proxy_adapter/client/jsonrpc_client/queue_api.py,sha256=x2uhoWhumQ2mvBZOyWrYsTcu4uMs5vhbfaXuRbTaKfo,2097
|
|
59
|
+
mcp_proxy_adapter/client/jsonrpc_client/transport.py,sha256=hrU9s_bxd9KXrNJ-VLekrFiT3FLX68puOAQGwOAEUn8,3383
|
|
60
|
+
mcp_proxy_adapter/commands/__init__.py,sha256=QjNaCoYmFaT5aioLCD0tGyQBDoimUjqrH5sJyGHE3KM,2224
|
|
61
|
+
mcp_proxy_adapter/commands/auth_validation_command.py,sha256=p867zooBn1si8_R2BBd7QpXkuHOTnfOZYiARQW2CsrY,1826
|
|
62
|
+
mcp_proxy_adapter/commands/base.py,sha256=jW_w6jjqbEtqKHfi5-bhd98HDF1UuyRXHFMuzOssoUM,14366
|
|
63
|
+
mcp_proxy_adapter/commands/builtin_commands.py,sha256=gU3ee2agE-urp0QbLfGrOEOa-aaSBe-hEUb4ia6CVJI,1197
|
|
64
|
+
mcp_proxy_adapter/commands/catalog_manager.py,sha256=xnGKUKe-K58qlj-XLncdmdilvwVrcC_Zug7_gr5kap0,2333
|
|
65
|
+
mcp_proxy_adapter/commands/cert_monitor_command.py,sha256=8WwbrVeupsD_L9bLL4k2XdTtWx8NvMEwU_eq-PNklCA,20836
|
|
66
|
+
mcp_proxy_adapter/commands/certificate_management_command.py,sha256=Vd9ZrdkIlwptp9AGq6aPhMAxhSc989ncMcibTRWkOOc,21875
|
|
67
|
+
mcp_proxy_adapter/commands/command_registry.py,sha256=iuVvSMzXzxMkrA_VFnvU8dUDhWeNLPdw-1n3qtyib_8,9647
|
|
68
|
+
mcp_proxy_adapter/commands/config_command.py,sha256=-Vxvnhy4YFgmbsrqcOfsA9IRc5GvF_ZVlFqFM6tZAZg,2899
|
|
69
|
+
mcp_proxy_adapter/commands/dependency_container.py,sha256=iuwzEOVYHZVLfRWWYb2BEE8tM6-VyFJQRuadxqPamDA,958
|
|
70
|
+
mcp_proxy_adapter/commands/dependency_manager.py,sha256=2iHfbSi4n09zpxRx4bBlPROa2mckTYZfcuEVa09J6Dw,4459
|
|
71
|
+
mcp_proxy_adapter/commands/echo_command.py,sha256=Kj51pJzWAhkcnpD1MWJZHc2a6b1arWUhSy390eEtgNs,1233
|
|
72
|
+
mcp_proxy_adapter/commands/health_command.py,sha256=h6mGW2RcsYAgPCCH-Lp0VLoi0RxyisqqoygTXjzeDeA,4356
|
|
73
|
+
mcp_proxy_adapter/commands/help_command.py,sha256=1T6gqEboInptFX7S6iD31rYkorlTAPVj_VHDl2PLqdw,7659
|
|
74
|
+
mcp_proxy_adapter/commands/hooks.py,sha256=qeVUA0hDYH3jB4T-G38ZO8V22S7GS2na_ydM9YUOwfk,5300
|
|
75
|
+
mcp_proxy_adapter/commands/key_management_command.py,sha256=ILfIdybizl7Df5IY-XOH9T0yzk91KGVgIuO5YlrUkkw,17648
|
|
76
|
+
mcp_proxy_adapter/commands/load_command.py,sha256=YLdXHGcdPqucNVEKy9o0JqxKckqMzCw3gfyqorAysak,3937
|
|
77
|
+
mcp_proxy_adapter/commands/plugins_command.py,sha256=_tJB9uff4edtXZkW6vAsQ6OBYgjpL1RnY9dB3TpTbYU,8224
|
|
78
|
+
mcp_proxy_adapter/commands/protocol_management_command.py,sha256=zs0721uSHkqL7Muwd1c97sN53pCAr2AOX67T7tCF-1Y,7638
|
|
79
|
+
mcp_proxy_adapter/commands/proxy_registration_command.py,sha256=mL_LIXKyBEbvpEWoLpXtuK6-Od98IjNTZe155OQtavY,11740
|
|
80
|
+
mcp_proxy_adapter/commands/queue_commands.py,sha256=v6vEYjI7WWtSBvrD-WF85ARQ2QQTB2y7CbMmAORJ3d0,25158
|
|
81
|
+
mcp_proxy_adapter/commands/registration_status_command.py,sha256=b2g2BP_pWn2n34IcOPVp22IA4MuyWUpsNVjsBiuMfHw,2218
|
|
82
|
+
mcp_proxy_adapter/commands/reload_command.py,sha256=AGGmjeybwzmVnGh5k1w1inpyf8MB4T_6ZVspy0NNFKI,4739
|
|
83
|
+
mcp_proxy_adapter/commands/result.py,sha256=De9RXrua6xIuJjh2jHoNgVgt1P7CloyYD-JeQzudHPI,4256
|
|
84
|
+
mcp_proxy_adapter/commands/role_test_command.py,sha256=vHYFaiuJpzSgzyOlLhFGLYD_8H8GwIfbN29-bkAPbyQ,2670
|
|
85
|
+
mcp_proxy_adapter/commands/roles_management_command.py,sha256=GJ09wtEh8yqRtQxrZJyMf0VjJuAelE4eiKYyTlw3_eM,15639
|
|
86
|
+
mcp_proxy_adapter/commands/security_command.py,sha256=j55PIE2olWRuqs7FT4Iatyv4rCjjbyRdg4goYW_5Dq4,16939
|
|
87
|
+
mcp_proxy_adapter/commands/settings_command.py,sha256=iSmJDygSVD3DZu6gwmc8kUS22NZaApjTB3OQ5dLGGSw,3391
|
|
88
|
+
mcp_proxy_adapter/commands/ssl_setup_command.py,sha256=JBuoFliUQ-tyHY6Nmb7KiCJy1OaPeIXm6XpsM2KPFXI,10702
|
|
89
|
+
mcp_proxy_adapter/commands/token_management_command.py,sha256=jg9WU5qMS31cVpQOARWhH9Dm-YVVIg1-lJwKwQotmww,16873
|
|
90
|
+
mcp_proxy_adapter/commands/transport_management_command.py,sha256=9h4NeLM81R3B_Mn_u390guVEsDH17BwSAua6zUsoW9I,4006
|
|
91
|
+
mcp_proxy_adapter/commands/unload_command.py,sha256=0G4qOodzCWb-_lsjl3tUAcl554THvn44p4t3P7ETfMM,2761
|
|
92
|
+
mcp_proxy_adapter/commands/catalog/__init__.py,sha256=_HG1KnN53p8-dvkpJSWao4C6cHQdqyKIogmuL10OpvM,469
|
|
93
|
+
mcp_proxy_adapter/commands/catalog/catalog_loader.py,sha256=W_vQmjfkxHs8jC5sApd3ecaVB-ETIe-_J-EKHN1Q7pM,737
|
|
94
|
+
mcp_proxy_adapter/commands/catalog/catalog_manager.py,sha256=2A7N9FBHx1xMxqsqF38NZbQC9ac_vQhxJ5zM6JEWi98,4001
|
|
95
|
+
mcp_proxy_adapter/commands/catalog/catalog_syncer.py,sha256=ITfvS1B9GQNEy14KSTxFtQAE9-OV7BiqKQXPLXl1nbo,4776
|
|
96
|
+
mcp_proxy_adapter/commands/catalog/command_catalog.py,sha256=S05UXkXqzsJNV1XxhZ4aGSHuwhc4LgjpOQqUCU3Rf-w,1132
|
|
97
|
+
mcp_proxy_adapter/commands/catalog/dependency_manager.py,sha256=RlXbm8SRs_aBq8ii94p0NHCjRbmXH4igf9ljs8Lhco8,786
|
|
98
|
+
mcp_proxy_adapter/commands/registry/__init__.py,sha256=utO35zaZo5mP1Gwkd8evOdqnLl7J3nJG0Mom_WSuyi0,382
|
|
99
|
+
mcp_proxy_adapter/commands/registry/command_info.py,sha256=A5b5O0WRoB3OCglxs0JNa9-aakpc7eGFilo4gfan1q0,3370
|
|
100
|
+
mcp_proxy_adapter/commands/registry/command_loader.py,sha256=OBRkKCtDHRxQGFgZKduE6zcf_eo1TGjqipPBAamgMAM,6878
|
|
101
|
+
mcp_proxy_adapter/commands/registry/command_manager.py,sha256=dMQWKNwACiknHdECya2DIE8beZaeJDV4dpHid--Sk6Q,3979
|
|
102
|
+
mcp_proxy_adapter/commands/registry/command_registry.py,sha256=XURwiKUoUNbzp32p1awtS7nedqO3RW8scy7qqzdBk3o,6410
|
|
103
|
+
mcp_proxy_adapter/core/__init__.py,sha256=aKs8nj8jamwV8xwZgtwxmzPKUgCZincqGZHuMj7qki0,196
|
|
104
|
+
mcp_proxy_adapter/core/app_factory.py,sha256=kfFdles4eXei7uVXkbOY8FZLCDbSNsX-zdCVpINlD9k,22353
|
|
105
|
+
mcp_proxy_adapter/core/app_runner.py,sha256=pbdPT3X6z_fXNbpjW2DZRkB_mvUfweM7w_cPqlCN_Zo,11773
|
|
106
|
+
mcp_proxy_adapter/core/auth_validator.py,sha256=BuvGEHLvNU8Rv5wmdB8qd-TPlCDJF0cSwnWMHe9h18w,16565
|
|
107
|
+
mcp_proxy_adapter/core/certificate_utils.py,sha256=Jeftf420a_tsBjOqUwZrK5azqrqkK10YFD0ll-lgWHo,7499
|
|
108
|
+
mcp_proxy_adapter/core/client.py,sha256=7DdZFAnu7UyyZeiaESjg2feyT-UwGS0bFxE9oS5A1aU,21214
|
|
109
|
+
mcp_proxy_adapter/core/client_manager.py,sha256=9kk_h9QsJ3pwiK_VZNpbM8qSJGNeLsAqNA4lbreWJyk,8533
|
|
110
|
+
mcp_proxy_adapter/core/client_security.py,sha256=gYr2V3UvPKDV6Xs06kzsBIAciW_gAvbF9fbs7MVeC2A,13575
|
|
111
|
+
mcp_proxy_adapter/core/config_converter.py,sha256=R4V_giWs4CNaGJDEZ8snzRZYYXAtnYWLWdJVZTfVgwg,9791
|
|
112
|
+
mcp_proxy_adapter/core/config_validator.py,sha256=7_law-AFjQkh5Ad1sChxUSzrp7Uc6azbQQ035GfExE8,7822
|
|
113
|
+
mcp_proxy_adapter/core/crl_utils.py,sha256=JagcJBkGY-YEmkhRWBDDkfi75wIyBOlf6s7YvXgTiHI,11992
|
|
114
|
+
mcp_proxy_adapter/core/errors.py,sha256=ekWfQGAvOkUva5iH6_tTTen8SBNmlHoQp-xJf-oAQQ8,7319
|
|
115
|
+
mcp_proxy_adapter/core/job_manager.py,sha256=D6cB7r8rxePDSAHD87TZqd2Mcfc9W7n6EFXU-fBhnbs,1196
|
|
116
|
+
mcp_proxy_adapter/core/logging.py,sha256=d5DUzpeZVnXw2puZydTiZXy2xNRA2bqDa14FLo1rt4E,8288
|
|
117
|
+
mcp_proxy_adapter/core/mtls_asgi.py,sha256=9s53xhQqZQpYLt_FW-52jW2hkfgtwHwSqWxzytVBoAA,4552
|
|
118
|
+
mcp_proxy_adapter/core/mtls_asgi_app.py,sha256=8FHzgIBWp_nUtIXxGRFNGjTeTzM26JsyOuzI-opKU9U,6349
|
|
119
|
+
mcp_proxy_adapter/core/mtls_proxy.py,sha256=nLbI2eeeFW070Vxt5Ym-7PYFOeM04zHv47epdy4OTEQ,7369
|
|
120
|
+
mcp_proxy_adapter/core/mtls_server.py,sha256=JTz-wU8RNsDpLfUDk37-ZJcHFxyo0NzW0sM31Ffm-Yk,4580
|
|
121
|
+
mcp_proxy_adapter/core/protocol_manager.py,sha256=f8pMKNRtSIKW9ebuLW4t27mw2gMaMhFUrsqrRr3dp8Q,8451
|
|
122
|
+
mcp_proxy_adapter/core/proxy_client.py,sha256=VKzUEMu6cO5BFWTManoSyN9PJF8eyzCgYabXGEbRMPQ,6065
|
|
123
|
+
mcp_proxy_adapter/core/proxy_registration.py,sha256=fmt5pGh4JmIW5uoeNMO870Cqs8jvDWf-ALWWCg2_aD4,2078
|
|
124
|
+
mcp_proxy_adapter/core/role_utils.py,sha256=J9iofFTFuzTcz8tXCx_e5TSToWF4nw1XMn6aVzICM-k,2536
|
|
125
|
+
mcp_proxy_adapter/core/security_adapter.py,sha256=i5dOnuWBpmQ8Kz1YxoD4g8vX7VEYMgTuM5oAoxgZl-8,11964
|
|
126
|
+
mcp_proxy_adapter/core/security_factory.py,sha256=cEsxxRTydm3SlK7zrBhSHuhxgs2WghtpYaEsrmoncFg,2833
|
|
127
|
+
mcp_proxy_adapter/core/security_integration.py,sha256=KsKjJnR0826-rV6uU9R7uGt6u43t6cyKApf3WCyVlz0,12855
|
|
128
|
+
mcp_proxy_adapter/core/server_adapter.py,sha256=Qzsps-2vufprAx2D2pgZtCmTc7KqKMr-ZkWS8Bh_RLY,8639
|
|
129
|
+
mcp_proxy_adapter/core/server_engine.py,sha256=XX8LDaEkd14v0Y_60EgX475ycX_lSj-W-3OQrhFSuK0,6712
|
|
130
|
+
mcp_proxy_adapter/core/settings.py,sha256=oPwm9r1TY4AvuW-hvxDnJ-_jJ9PI1Ggrltp3ldjvkIY,5415
|
|
131
|
+
mcp_proxy_adapter/core/signal_handler.py,sha256=bvZjBl2IzDvI8zLetq_ADBpsZ22oZvB4S9j3yATrMZM,2979
|
|
132
|
+
mcp_proxy_adapter/core/ssl_utils.py,sha256=m7BxBOsqlwhkYWy7RUtNiGB5Vm2gMa7-WomZTNJekq8,5453
|
|
133
|
+
mcp_proxy_adapter/core/transport_manager.py,sha256=iddFPgr84ZJMtm-ABEKQYX-utscROQoUysyr-Hy63_8,4001
|
|
134
|
+
mcp_proxy_adapter/core/unified_config_adapter.py,sha256=F4ej-TihENrtmSpvpJxJ2jaAmfmMSD6bj7Tt8C1tqIE,18277
|
|
135
|
+
mcp_proxy_adapter/core/utils.py,sha256=gSer7nRbSh0jB58MPIrDdoEJYSx04gCArm6e0OZ5wng,2402
|
|
136
|
+
mcp_proxy_adapter/core/certificate/__init__.py,sha256=D6fSBwXNrvMyzNCd2bIO4fOpKjhHfEIC2gKbS3qdvGQ,526
|
|
137
|
+
mcp_proxy_adapter/core/certificate/certificate_creator.py,sha256=2gMH5PL6uMrgyAHahP-VAPY_R5ycgtzwdU0_YqKBU7g,13520
|
|
138
|
+
mcp_proxy_adapter/core/certificate/certificate_extractor.py,sha256=dCznUImd8tOftM7ztuUP_b9f9Y0EXrdXw069mzNggf4,6823
|
|
139
|
+
mcp_proxy_adapter/core/certificate/certificate_utils.py,sha256=Jeftf420a_tsBjOqUwZrK5azqrqkK10YFD0ll-lgWHo,7499
|
|
140
|
+
mcp_proxy_adapter/core/certificate/certificate_validator.py,sha256=AoSQnfO0BL77UFS-RTLGkGbpDdiH79P2-vdw_Q6GvyY,17658
|
|
141
|
+
mcp_proxy_adapter/core/certificate/ssl_context_manager.py,sha256=gQ7iuiayCLwRV0mHuQoYPx-W7dNIz8y8akxe3ZDWt9o,2055
|
|
142
|
+
mcp_proxy_adapter/core/config/__init__.py,sha256=q25T3OyvYgYFEplZwqcOZUl5mpPkId0eh7Tr5rdypEM,364
|
|
143
|
+
mcp_proxy_adapter/core/config/config.py,sha256=AbaSWDl3CD-bGAI59lot48MYtrXx_gKk-ueAKDNVOcU,7356
|
|
144
|
+
mcp_proxy_adapter/core/config/config_factory.py,sha256=qm2QxqiOArpt4x_PPkR1O5A6T_LdD1RHTVnTMFNFxBI,409
|
|
145
|
+
mcp_proxy_adapter/core/config/config_loader.py,sha256=PmoDRNsLtuzqiJoL9e8p-4CpDF1jAaobXZaGs8LwuEw,1670
|
|
146
|
+
mcp_proxy_adapter/core/config/feature_manager.py,sha256=ET-ylB7sBpUG0rH5NNKn5gDjb0sAF02qItLz3GWCvC4,568
|
|
147
|
+
mcp_proxy_adapter/core/config/simple_config.py,sha256=CMJ-08irjfJxwuiSk4Z4ix7gJIRMnMqKsd-1pGM8WnQ,7574
|
|
148
|
+
mcp_proxy_adapter/core/config/simple_config_generator.py,sha256=p09o5enj7CLhb6zbH4Z0z9nOsAOJAeodaDDf3P-Vos0,5708
|
|
149
|
+
mcp_proxy_adapter/core/config/simple_config_validator.py,sha256=rBenEzLKrVx_ZZ2ZCP2ae-H4h-gdSfslBZHqPVCMAlI,21101
|
|
150
|
+
mcp_proxy_adapter/core/proxy/__init__.py,sha256=VR6n4GVB7SYqWzJUmYaxOpv5mpRr6j1Ud4jhMihyo-U,468
|
|
151
|
+
mcp_proxy_adapter/core/proxy/auth_manager.py,sha256=AP5soZt21R0jUdk6t1Kwv_VnTNuT1c-0tf9PAaUooPo,712
|
|
152
|
+
mcp_proxy_adapter/core/proxy/proxy_registration_manager.py,sha256=tpS2bkYw0Hg5i-PzwnECBvPXu8SiA43gSYtxPSF9jyc,4894
|
|
153
|
+
mcp_proxy_adapter/core/proxy/registration_client.py,sha256=1uczubH9C5rTZ4ipTnx_IsEBQdazbIdWcgRC1Ca6jqc,6785
|
|
154
|
+
mcp_proxy_adapter/core/proxy/ssl_manager.py,sha256=K2lzSxCpwlaa1kSgLqZ0YNDJEqfdAGcQ1slePqbhaSM,4138
|
|
155
|
+
mcp_proxy_adapter/core/validation/__init__.py,sha256=28gyTuiODN12gIrtTj91N6qJMySSVusFzJuWyysfNpM,529
|
|
156
|
+
mcp_proxy_adapter/core/validation/config_validator.py,sha256=gEsbXN71Aj-sSuDB82xrKKDnF3KX7qp5RRsAILfpzWs,8150
|
|
157
|
+
mcp_proxy_adapter/core/validation/file_validator.py,sha256=VsnwLblcrFTwhqxpiND20WCs-fMWaiqyP6HCGx54jRE,5035
|
|
158
|
+
mcp_proxy_adapter/core/validation/protocol_validator.py,sha256=nNgNcylywzFKJAQ0dtD7mj6PltTGfsiNP0wg1cghn3Y,8032
|
|
159
|
+
mcp_proxy_adapter/core/validation/security_validator.py,sha256=DEN0R8Y4J4xTb_esbj18i_LHMtJozaD1AQ93aIXGJ3U,4609
|
|
160
|
+
mcp_proxy_adapter/core/validation/validation_result.py,sha256=VKxhJ2Nv-QoVJzB4wsgfAUnhJ1Qj50ZTJ7guAELF-fM,598
|
|
161
|
+
mcp_proxy_adapter/examples/__init__.py,sha256=k1F-EotAFbJ3JvK_rNgiH4bUztmxIWtYn0AfbAZ1ZGs,450
|
|
162
|
+
mcp_proxy_adapter/examples/bugfix_certificate_config.py,sha256=-75AWN0ZnRZAzpzSJeZ_cPbfpsZFCUDRWuM0lbMhkVo,9493
|
|
163
|
+
mcp_proxy_adapter/examples/cert_manager_bugfix.py,sha256=pwifGipvxQX2WR0sTYZWs0k8g_C228Kd5KJuR0wYB_s,7285
|
|
164
|
+
mcp_proxy_adapter/examples/check_config.py,sha256=5IIfhgjVnTwTX03rNvEn_7WtQLpBLQLbuCYfwtMMW7o,13969
|
|
165
|
+
mcp_proxy_adapter/examples/client_usage_example.py,sha256=EUwgZELRD1NBXkCoa1N06O7TsQ5KyrtqUYp8AbInLUI,4948
|
|
166
|
+
mcp_proxy_adapter/examples/config_builder.py,sha256=9MMgLYdCCamFrrf_7KYuQ5blVTo1YDnFA1k0z7UNNZg,7358
|
|
167
|
+
mcp_proxy_adapter/examples/config_cli.py,sha256=SUEY--Y2x5QuayzKimSybSQ_eponxb71KLkchs-EGuA,11014
|
|
168
|
+
mcp_proxy_adapter/examples/create_test_configs.py,sha256=2KP-iKL-AVSpv7xzJn_iBGK8AuK6Gpw_WaxI0U_RApw,6350
|
|
169
|
+
mcp_proxy_adapter/examples/debug_request_state.py,sha256=iijjmopANN36AsP5acE8PyFISqQzUWlOKMmvGsHf2Tg,4452
|
|
170
|
+
mcp_proxy_adapter/examples/debug_role_chain.py,sha256=GLVXC2fJUwP8UJnXHchd1t-H53cjWLJI3RqTPrKmaak,8750
|
|
171
|
+
mcp_proxy_adapter/examples/demo_client.py,sha256=en2Rtb70B1sQmhL-vdQ4PDpKNNl_mfll2YCFT_jFCAg,10191
|
|
172
|
+
mcp_proxy_adapter/examples/generate_config.py,sha256=1gVKF3tOCRE6zwGXE585N6_3VDATVUd40gmppYHIvdI,19149
|
|
173
|
+
mcp_proxy_adapter/examples/proxy_registration_example.py,sha256=Dz7ZQTmdgCgGxMqhKaJj-EJWmHb4BLav9nDTZHPSKmY,12995
|
|
174
|
+
mcp_proxy_adapter/examples/queue_demo_simple.py,sha256=IINOErwdQpBjG3keZ414THvEfJl2JnPLJRSDa4yWVss,21786
|
|
175
|
+
mcp_proxy_adapter/examples/queue_integration_example.py,sha256=NNG28YFJ-vtjyRGGTbh-NIy78iEVjgf5ujJDyuSrt5A,18827
|
|
176
|
+
mcp_proxy_adapter/examples/queue_server_demo.py,sha256=fX_cyabVP5lL96Xi6Dw6DFwPYXAOgWpDH6oQI4VvPaE,2211
|
|
177
|
+
mcp_proxy_adapter/examples/queue_server_example.py,sha256=6p-uOnBZzZSt8DtmbzQQQI68ls2-c4SsNTyyW5S-ULE,2461
|
|
178
|
+
mcp_proxy_adapter/examples/queue_server_simple.py,sha256=Jz4Tm4lttAt2980B8LekoMesNBjJNJGOY5viYVuiw7c,5308
|
|
179
|
+
mcp_proxy_adapter/examples/required_certificates.py,sha256=hHhXC2snqA4TWBduQAtr1cjUuCcy98LGMH2I6o8W8n0,7073
|
|
180
|
+
mcp_proxy_adapter/examples/run_example.py,sha256=yp-a6HIrSk3ddQmbn0KkuKwErId0aNfj028TE6U-zmY,2626
|
|
181
|
+
mcp_proxy_adapter/examples/run_full_test_suite.py,sha256=PrT-YkkRKWr8QRSdaGn6EF1OSViZ1-opDYSMJD_Mwco,24653
|
|
182
|
+
mcp_proxy_adapter/examples/run_proxy_server.py,sha256=_k-Byh6xd_UsLo0ium42BpDA6y5H5oOUcyCJZW-sWJM,5274
|
|
183
|
+
mcp_proxy_adapter/examples/run_security_tests_fixed.py,sha256=BtNLYZrHChQxj3vMhw2czpn88QFE36HVpD5rZxpaWZ0,17228
|
|
184
|
+
mcp_proxy_adapter/examples/security_test_client.py,sha256=NxvFd-ksfhK7T6LnYh9C4PQZ84XSEmvYSaDWvHtYQ2Q,2209
|
|
185
|
+
mcp_proxy_adapter/examples/setup_test_environment.py,sha256=c8VISRhl48PpQcfhaVwC9J1XKH34nUWk7ihDULlmtDw,6823
|
|
186
|
+
mcp_proxy_adapter/examples/simple_protocol_test.py,sha256=BzFUZvK9Fih3aG4IFLQTZPyPe_s6YjpZfB6uZmQ76rw,3969
|
|
187
|
+
mcp_proxy_adapter/examples/test_chk_hostname_automated.py,sha256=nN0FEevzP6UP3q40zq4lw_GiT050FYomu7rWFPOMF2U,7002
|
|
188
|
+
mcp_proxy_adapter/examples/test_config.py,sha256=6lTpjb7UbiiqqHRt7LMnIXpuY3u-lKeUu2yQyhk2eLw,7938
|
|
189
|
+
mcp_proxy_adapter/examples/test_config_builder.py,sha256=iuQhdFOgH9snqkZRISOT4LG8YD68HhTXiEAmmCeLmq0,2393
|
|
190
|
+
mcp_proxy_adapter/examples/test_examples.py,sha256=0xKWsvuzBiY0OLTvfHQjG3VgcVKXKqAlgLWY696sjCM,12295
|
|
191
|
+
mcp_proxy_adapter/examples/test_framework_complete.py,sha256=rsjGDlviEQafiGMsy4IAYIO_T6z1eOH11y2w9dvMpN4,10015
|
|
192
|
+
mcp_proxy_adapter/examples/test_mcp_server.py,sha256=zFRUzdvdG6tzHp81HqoiiZvoXYDYsEfoaPNfdCS3FMY,6566
|
|
193
|
+
mcp_proxy_adapter/examples/test_protocol_examples.py,sha256=IDvWGfKf5zsQMZEBfB1Klugq0Jpq-0d8sPD-OK9Qudc,12123
|
|
194
|
+
mcp_proxy_adapter/examples/universal_client.py,sha256=YBpReQgms76ZA4iXmnmR_5fI65-nREtwdxt7xv0chlw,27302
|
|
195
|
+
mcp_proxy_adapter/examples/update_config_certificates.py,sha256=mj4_b0T2BJnJlQXWLyRp3wwvnQOI2GVGfkBv-knLJDY,4598
|
|
196
|
+
mcp_proxy_adapter/examples/validate_generator_compatibility.py,sha256=4Atdgbmop1GrE9c2JBmnSvHAFmTK6CTL3MdhJkh1lpM,13624
|
|
197
|
+
mcp_proxy_adapter/examples/validate_generator_compatibility_simple.py,sha256=K_n2y_r7cSSKUjUsEBDWcSKQqafGdftTMEWuKl1M8N4,1601
|
|
198
|
+
mcp_proxy_adapter/examples/basic_framework/__init__.py,sha256=4aYD--R6hy9n9CUxj7Osb9HcdVUMJ6_cfpu4ujkbCwI,345
|
|
199
|
+
mcp_proxy_adapter/examples/basic_framework/main.py,sha256=2bpT-zrekpzzbhOx6wOOYXYE1mejWXkT617zpSN7m70,1790
|
|
200
|
+
mcp_proxy_adapter/examples/basic_framework/commands/__init__.py,sha256=_VQNLUEdsxUG-4yt9BZI_vtOxHAdGG0OUSsP6Wj-Vz4,76
|
|
201
|
+
mcp_proxy_adapter/examples/basic_framework/hooks/__init__.py,sha256=IE_EIXMnkdXuakZn7wLD9kBFyfDF5lYi56ejgiBeb-A,70
|
|
202
|
+
mcp_proxy_adapter/examples/commands/__init__.py,sha256=zvY_OpH_B1bVc_khrNIl6O8vqCw1FH6gGMAsJAkGWGY,170
|
|
203
|
+
mcp_proxy_adapter/examples/full_application/__init__.py,sha256=ft7eu1COzFNHDnwX5neLQQc0muSV_iJQzqQrNUlrpyg,399
|
|
204
|
+
mcp_proxy_adapter/examples/full_application/main.py,sha256=VEWGIBKJ65ROdchDo647rlkn4tIsXrL0m5j8FV4esMk,12588
|
|
205
|
+
mcp_proxy_adapter/examples/full_application/proxy_endpoints.py,sha256=OCph5TuqRu1ZmoYWttg0STFSF7rqcXPWdSqEZIoWrdw,4877
|
|
206
|
+
mcp_proxy_adapter/examples/full_application/run_mtls.py,sha256=neYnzO9lfCEEruv-R__dHey18DXav5RG6hNKwu54G6Y,9455
|
|
207
|
+
mcp_proxy_adapter/examples/full_application/run_simple.py,sha256=Rnmsi68EfiFEWrXx5DfUnxSks9uhmJR-ERlo-BOm9tQ,5163
|
|
208
|
+
mcp_proxy_adapter/examples/full_application/test_minimal_server.py,sha256=b5lApTLB-zW5ZZoMb5KpEGKnrMtxh_k6nOI0D91rJls,1139
|
|
209
|
+
mcp_proxy_adapter/examples/full_application/test_server.py,sha256=FbzZV_QyE2lZMuqtvaLcMdJOq1co7zgb7BCNZno7vNc,5272
|
|
210
|
+
mcp_proxy_adapter/examples/full_application/test_simple_server.py,sha256=3reGMunQLHIIkgbRwFffU3IH_b4yu96JpZORCrmc_Wk,1798
|
|
211
|
+
mcp_proxy_adapter/examples/full_application/commands/__init__.py,sha256=GBGfvfY8Iu3uGjEpnBiIPtt_qqBLT8Ui3jRBCUt8t5k,225
|
|
212
|
+
mcp_proxy_adapter/examples/full_application/commands/custom_echo_command.py,sha256=if9NwXICFGpXeWUllJt6QWwzgrbDOv28YS6ieX21RDI,1295
|
|
213
|
+
mcp_proxy_adapter/examples/full_application/commands/dynamic_calculator_command.py,sha256=StrXJCyy6pKGATFVbHYdLTAAeseWTNYYkORLWf21g-I,1580
|
|
214
|
+
mcp_proxy_adapter/examples/full_application/commands/echo_command.py,sha256=xFXe60uviqGMKiC4CQBF1h4RB8KII6Yhb1tW0v2yoaQ,926
|
|
215
|
+
mcp_proxy_adapter/examples/full_application/commands/help_command.py,sha256=vsyKrnGRxuCA1xcG90YZmqgMf8V8FNbqWDV6VbyzEmQ,2021
|
|
216
|
+
mcp_proxy_adapter/examples/full_application/commands/list_command.py,sha256=QegtByNI-dvsi2Ax11is14uhFZH15i52QoAzI4AFNDI,1779
|
|
217
|
+
mcp_proxy_adapter/examples/full_application/hooks/__init__.py,sha256=16njlvy8T9cR6dttEVr_ljquq_XmkfPGhU9Qmf3nkQs,97
|
|
218
|
+
mcp_proxy_adapter/examples/full_application/hooks/application_hooks.py,sha256=T3_iOA-j0x0buFm1BP0PMvb-XMT6mR-xtSd7XrOAXug,439
|
|
219
|
+
mcp_proxy_adapter/examples/full_application/hooks/builtin_command_hooks.py,sha256=Cavu9oxEV6qDepBuEmS-KqSEmsBuWAKDwu2KjUgEhUg,436
|
|
220
|
+
mcp_proxy_adapter/examples/security_test/__init__.py,sha256=G8b5VNy_QrqwA2MGXc5FlkWuEJYtPPD0x7TCKEfuZDc,381
|
|
221
|
+
mcp_proxy_adapter/examples/security_test/auth_manager.py,sha256=gXUr8HTbXfV34Fr3zOUBdu6ylW4S5zig596QZ-Xob3g,226
|
|
222
|
+
mcp_proxy_adapter/examples/security_test/ssl_context_manager.py,sha256=0678mhkrEAayQWLYpp_0BEH8s2gErr5F5xyGU7m8nwU,616
|
|
223
|
+
mcp_proxy_adapter/examples/security_test/test_client.py,sha256=vNPoiXSZyym-tEXhLCyZdAhG-JjXU1yFLOmmJITJJMc,5922
|
|
224
|
+
mcp_proxy_adapter/examples/security_test/test_result.py,sha256=j2qiQPLMvBwHqDO800wtOugoAe4yduqC2pXyVVwoHvM,462
|
|
225
|
+
mcp_proxy_adapter/examples/setup/__init__.py,sha256=IvCG3i0Nx0akK3VCnVo0v8rNtw6btufgylKTcBnEgpk,800
|
|
226
|
+
mcp_proxy_adapter/examples/setup/certificate_manager.py,sha256=f6JwhAD_zdLmeDN5-yqHjTJD1EWD67zgb-ScyKUvfFc,7228
|
|
227
|
+
mcp_proxy_adapter/examples/setup/config_generator.py,sha256=AZoObnCB_VfQSszvKgrl5qXM7pIIPiBVijQlXumBN2k,162
|
|
228
|
+
mcp_proxy_adapter/examples/setup/config_validator.py,sha256=0-IXbn5dVc3B6UKKWG2IVchdwK-Wo265D8lED9EPIJM,4378
|
|
229
|
+
mcp_proxy_adapter/examples/setup/environment_setup.py,sha256=YY56_tnZvjyKsI2Pzad_8_2Z1K2DwJJorlaH2rM_ilg,1959
|
|
230
|
+
mcp_proxy_adapter/examples/setup/test_files_generator.py,sha256=jLNJgwqCWpUqgcD7O-VKvdATeVungvZBHX1ZUu66i5k,157
|
|
231
|
+
mcp_proxy_adapter/examples/setup/test_runner.py,sha256=878PnAR1Sv_DjInaYtpzG0jMaDE1F5po-S8qcI7JHWI,2502
|
|
232
|
+
mcp_proxy_adapter/integrations/__init__.py,sha256=3ryiZpAMJUkwdwm-N5PT6lmEfb8e_2cHbxuIk1lIfVw,518
|
|
233
|
+
mcp_proxy_adapter/integrations/queuemgr_integration.py,sha256=i_sepXi0ekhGssxEsg-HaWgvBH-whJfZty4Rwm56cDo,14848
|
|
234
|
+
mcp_proxy_adapter/schemas/base_schema.json,sha256=v9G9cGMd4dRhCZsOQ_FMqOi5VFyVbI6Cf3fyIvOT9dc,2881
|
|
235
|
+
mcp_proxy_adapter/schemas/openapi_schema.json,sha256=C3yLkwmDsvnLW9B5gnKKdBGl4zxkeU-rEmjTrNVsQU0,8405
|
|
236
|
+
mcp_proxy_adapter/schemas/roles.json,sha256=pgf_ZyqKyXbfGUxvobpiLiSJz9zzxrMuoVWEkEpz3N8,764
|
|
237
|
+
mcp_proxy_adapter/schemas/roles_schema.json,sha256=deHgI7L6GwfBXacOlNtDgDJelDThppClC3Ti4Eh8rJY,5659
|
|
238
|
+
mcp_proxy_adapter-6.9.50.dist-info/METADATA,sha256=fevuLPlliLDLvl6iGntbqdwkyELBRPGm25Y04TQoJN4,37698
|
|
239
|
+
mcp_proxy_adapter-6.9.50.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
240
|
+
mcp_proxy_adapter-6.9.50.dist-info/entry_points.txt,sha256=fPnWH6Fjv4hALgpVCmTqbBemFCoSHrsy7xqUw21DU6g,703
|
|
241
|
+
mcp_proxy_adapter-6.9.50.dist-info/top_level.txt,sha256=JZT7vPLBYrtroX-ij68JBhJYbjDdghcV-DFySRy-Nnw,18
|
|
242
|
+
mcp_proxy_adapter-6.9.50.dist-info/RECORD,,
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
[console_scripts]
|
|
2
|
+
adapter-cfg-gen = mcp_proxy_adapter.cli.commands.config_generate:main
|
|
3
|
+
adapter-cfg-val = mcp_proxy_adapter.cli.commands.config_validate:main
|
|
4
|
+
mcp-proxy-adapter = mcp_proxy_adapter.cli.main:main
|
|
5
|
+
|
|
6
|
+
[gui_scripts]
|
|
7
|
+
mcp-proxy-adapter-gui = mcp_proxy_adapter.examples.gui:main
|
|
8
|
+
|
|
9
|
+
[mcp_proxy_adapter.examples]
|
|
10
|
+
create_test_configs = mcp_proxy_adapter.examples.create_test_configs:main
|
|
11
|
+
generate_certificates = mcp_proxy_adapter.examples.generate_all_certificates:main
|
|
12
|
+
run_full_test_suite = mcp_proxy_adapter.examples.run_full_test_suite:main
|
|
13
|
+
run_security_tests = mcp_proxy_adapter.examples.run_security_tests_fixed:main
|
|
14
|
+
setup_test_environment = mcp_proxy_adapter.examples.setup_test_environment:main
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
mcp_proxy_adapter
|
adapters/__init__.py
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Адаптеры Command Registry
|
|
3
|
-
========================
|
|
4
|
-
|
|
5
|
-
Адаптеры обеспечивают интеграцию Command Registry с различными протоколами и системами.
|
|
6
|
-
Они преобразуют команды из реестра в формат, понятный другим системам.
|
|
7
|
-
|
|
8
|
-
Доступные адаптеры:
|
|
9
|
-
- RESTAdapter: Создает REST API эндпоинты
|
|
10
|
-
- MCPProxyAdapter: Интегрирует с MCPProxy для работы с инструментами моделей ИИ
|
|
11
|
-
"""
|
|
12
|
-
|
|
13
|
-
from command_registry.adapters.rest_adapter import RESTAdapter
|
|
14
|
-
from ..adapter import MCPProxyAdapter # Импортируем из основного модуля adapter.py
|
|
15
|
-
|
|
16
|
-
__all__ = ['RESTAdapter', 'MCPProxyAdapter']
|
analyzers/__init__.py
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Analyzers for extracting metadata from functions and docstrings.
|
|
3
|
-
|
|
4
|
-
This module contains classes for analyzing type annotations and docstrings
|
|
5
|
-
of Python functions to automatically extract metadata for commands.
|
|
6
|
-
"""
|
|
7
|
-
|
|
8
|
-
from .type_analyzer import TypeAnalyzer
|
|
9
|
-
from .docstring_analyzer import DocstringAnalyzer
|
|
10
|
-
|
|
11
|
-
__all__ = [
|
|
12
|
-
'TypeAnalyzer',
|
|
13
|
-
'DocstringAnalyzer',
|
|
14
|
-
]
|
analyzers/docstring_analyzer.py
DELETED
|
@@ -1,199 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Docstring analyzer for extracting information from function documentation.
|
|
3
|
-
"""
|
|
4
|
-
import inspect
|
|
5
|
-
from typing import Dict, Any, Optional, Callable, List, Tuple
|
|
6
|
-
import docstring_parser
|
|
7
|
-
|
|
8
|
-
class DocstringAnalyzer:
|
|
9
|
-
"""
|
|
10
|
-
Docstring analyzer for extracting metadata from function documentation.
|
|
11
|
-
|
|
12
|
-
This class is responsible for analyzing command handler function docstrings
|
|
13
|
-
and extracting function descriptions, parameters, and return values.
|
|
14
|
-
"""
|
|
15
|
-
|
|
16
|
-
def analyze(self, handler: Callable) -> Dict[str, Any]:
|
|
17
|
-
"""
|
|
18
|
-
Analyzes function docstring and returns metadata.
|
|
19
|
-
|
|
20
|
-
Args:
|
|
21
|
-
handler: Handler function to analyze
|
|
22
|
-
|
|
23
|
-
Returns:
|
|
24
|
-
Dict[str, Any]: Metadata extracted from docstring
|
|
25
|
-
"""
|
|
26
|
-
result = {
|
|
27
|
-
"description": "",
|
|
28
|
-
"summary": "",
|
|
29
|
-
"parameters": {},
|
|
30
|
-
"returns": {
|
|
31
|
-
"description": ""
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
# Get function signature
|
|
36
|
-
sig = inspect.signature(handler)
|
|
37
|
-
|
|
38
|
-
# Get docstring
|
|
39
|
-
docstring = handler.__doc__ or ""
|
|
40
|
-
|
|
41
|
-
# Parse docstring
|
|
42
|
-
try:
|
|
43
|
-
parsed_doc = docstring_parser.parse(docstring)
|
|
44
|
-
|
|
45
|
-
# Extract general function description
|
|
46
|
-
if parsed_doc.short_description:
|
|
47
|
-
result["summary"] = parsed_doc.short_description
|
|
48
|
-
result["description"] = parsed_doc.short_description
|
|
49
|
-
|
|
50
|
-
if parsed_doc.long_description:
|
|
51
|
-
# If both short and long descriptions exist, combine them
|
|
52
|
-
if result["description"]:
|
|
53
|
-
result["description"] = f"{result['description']}\n\n{parsed_doc.long_description}"
|
|
54
|
-
else:
|
|
55
|
-
result["description"] = parsed_doc.long_description
|
|
56
|
-
|
|
57
|
-
# Extract parameter information
|
|
58
|
-
for param in parsed_doc.params:
|
|
59
|
-
param_name = param.arg_name
|
|
60
|
-
param_desc = param.description or f"Parameter {param_name}"
|
|
61
|
-
param_type = None
|
|
62
|
-
|
|
63
|
-
# If parameter type is specified in docstring, use it
|
|
64
|
-
if param.type_name:
|
|
65
|
-
param_type = self._parse_type_from_docstring(param.type_name)
|
|
66
|
-
|
|
67
|
-
# Add parameter to metadata
|
|
68
|
-
if param_name not in result["parameters"]:
|
|
69
|
-
result["parameters"][param_name] = {}
|
|
70
|
-
|
|
71
|
-
result["parameters"][param_name]["description"] = param_desc
|
|
72
|
-
|
|
73
|
-
if param_type:
|
|
74
|
-
result["parameters"][param_name]["type"] = param_type
|
|
75
|
-
|
|
76
|
-
# Extract return value information
|
|
77
|
-
if parsed_doc.returns:
|
|
78
|
-
result["returns"]["description"] = parsed_doc.returns.description or "Return value"
|
|
79
|
-
|
|
80
|
-
if parsed_doc.returns.type_name:
|
|
81
|
-
result["returns"]["type"] = self._parse_type_from_docstring(parsed_doc.returns.type_name)
|
|
82
|
-
|
|
83
|
-
except Exception as e:
|
|
84
|
-
# In case of parsing error, use docstring as is
|
|
85
|
-
if docstring:
|
|
86
|
-
result["description"] = docstring.strip()
|
|
87
|
-
|
|
88
|
-
# Fill parameter information from signature if not found in docstring
|
|
89
|
-
for param_name, param in sig.parameters.items():
|
|
90
|
-
# Skip self for methods
|
|
91
|
-
if param_name == 'self':
|
|
92
|
-
continue
|
|
93
|
-
|
|
94
|
-
# If parameter not yet added to metadata, add it
|
|
95
|
-
if param_name not in result["parameters"]:
|
|
96
|
-
result["parameters"][param_name] = {
|
|
97
|
-
"description": f"Parameter {param_name}"
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
# Determine if parameter is required
|
|
101
|
-
required = param.default == inspect.Parameter.empty
|
|
102
|
-
result["parameters"][param_name]["required"] = required
|
|
103
|
-
|
|
104
|
-
# Add default value if exists
|
|
105
|
-
if param.default != inspect.Parameter.empty:
|
|
106
|
-
# Some default values cannot be serialized to JSON
|
|
107
|
-
# So we check if the value can be serialized
|
|
108
|
-
if param.default is None or isinstance(param.default, (str, int, float, bool, list, dict)):
|
|
109
|
-
result["parameters"][param_name]["default"] = param.default
|
|
110
|
-
|
|
111
|
-
return result
|
|
112
|
-
|
|
113
|
-
def validate(self, handler: Callable) -> Tuple[bool, List[str]]:
|
|
114
|
-
"""
|
|
115
|
-
Validates that function docstring matches its formal parameters.
|
|
116
|
-
|
|
117
|
-
Args:
|
|
118
|
-
handler: Command handler function
|
|
119
|
-
|
|
120
|
-
Returns:
|
|
121
|
-
Tuple[bool, List[str]]: Validity flag and list of errors
|
|
122
|
-
"""
|
|
123
|
-
errors = []
|
|
124
|
-
|
|
125
|
-
# Get function formal parameters
|
|
126
|
-
sig = inspect.signature(handler)
|
|
127
|
-
formal_params = list(sig.parameters.keys())
|
|
128
|
-
|
|
129
|
-
# Skip self parameter for methods
|
|
130
|
-
if formal_params and formal_params[0] == 'self':
|
|
131
|
-
formal_params = formal_params[1:]
|
|
132
|
-
|
|
133
|
-
# Parse docstring
|
|
134
|
-
docstring = handler.__doc__ or ""
|
|
135
|
-
parsed_doc = docstring_parser.parse(docstring)
|
|
136
|
-
|
|
137
|
-
# Check for function description
|
|
138
|
-
if not parsed_doc.short_description and not parsed_doc.long_description:
|
|
139
|
-
errors.append(f"Missing function description")
|
|
140
|
-
|
|
141
|
-
# Get parameters from docstring
|
|
142
|
-
doc_params = {param.arg_name: param for param in parsed_doc.params}
|
|
143
|
-
|
|
144
|
-
# Check that all formal parameters are described in docstring
|
|
145
|
-
for param in formal_params:
|
|
146
|
-
if param not in doc_params and param != 'params': # 'params' is special case, can be dictionary of all parameters
|
|
147
|
-
errors.append(f"Parameter '{param}' not described in function docstring")
|
|
148
|
-
|
|
149
|
-
# Check for returns in docstring
|
|
150
|
-
if not parsed_doc.returns and not any(t.type_name == 'Returns' for t in parsed_doc.meta):
|
|
151
|
-
errors.append(f"Missing return value description in function docstring")
|
|
152
|
-
|
|
153
|
-
return len(errors) == 0, errors
|
|
154
|
-
|
|
155
|
-
def _parse_type_from_docstring(self, type_str: str) -> str:
|
|
156
|
-
"""
|
|
157
|
-
Parses type from string representation in docstring.
|
|
158
|
-
|
|
159
|
-
Args:
|
|
160
|
-
type_str: String representation of type
|
|
161
|
-
|
|
162
|
-
Returns:
|
|
163
|
-
str: Type in OpenAPI format
|
|
164
|
-
"""
|
|
165
|
-
# Simple mapping of string types to OpenAPI types
|
|
166
|
-
type_map = {
|
|
167
|
-
"str": "string",
|
|
168
|
-
"string": "string",
|
|
169
|
-
"int": "integer",
|
|
170
|
-
"integer": "integer",
|
|
171
|
-
"float": "number",
|
|
172
|
-
"number": "number",
|
|
173
|
-
"bool": "boolean",
|
|
174
|
-
"boolean": "boolean",
|
|
175
|
-
"list": "array",
|
|
176
|
-
"array": "array",
|
|
177
|
-
"dict": "object",
|
|
178
|
-
"object": "object",
|
|
179
|
-
"none": "null",
|
|
180
|
-
"null": "null",
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
# Convert to lowercase and remove spaces
|
|
184
|
-
cleaned_type = type_str.lower().strip()
|
|
185
|
-
|
|
186
|
-
# Check for simple types
|
|
187
|
-
if cleaned_type in type_map:
|
|
188
|
-
return type_map[cleaned_type]
|
|
189
|
-
|
|
190
|
-
# Check for List[X]
|
|
191
|
-
if cleaned_type.startswith("list[") or cleaned_type.startswith("array["):
|
|
192
|
-
return "array"
|
|
193
|
-
|
|
194
|
-
# Check for Dict[X, Y]
|
|
195
|
-
if cleaned_type.startswith("dict[") or cleaned_type.startswith("object["):
|
|
196
|
-
return "object"
|
|
197
|
-
|
|
198
|
-
# Default to object
|
|
199
|
-
return "object"
|