mcp-proxy-adapter 3.0.1__tar.gz → 3.0.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {mcp_proxy_adapter-3.0.1/mcp_proxy_adapter.egg-info → mcp_proxy_adapter-3.0.2}/PKG-INFO +1 -1
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/EN/OPENAPI_SCHEMA.md +49 -1
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/RU/OPENAPI_SCHEMA.md +49 -1
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/examples/complete_example/server.py +33 -59
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/custom_openapi.py +47 -10
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/tests/functional/test_api.py +19 -1
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/version.py +1 -1
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2/mcp_proxy_adapter.egg-info}/PKG-INFO +1 -1
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/pyproject.toml +1 -1
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/setup.py +1 -1
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/LICENSE +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/MANIFEST.in +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/README.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/EN/API_SCHEMA.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/EN/AUTOMATED_PUBLISHING.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/EN/BASIC_ARCHITECTURE.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/EN/COMMAND_CHECKLIST.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/EN/COMMAND_RESULTS.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/EN/COMMAND_TEMPLATE.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/EN/CONFIGURATION_PRINCIPLES.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/EN/DOCUMENTATION_MAP.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/EN/DOCUMENTATION_STANDARDS.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/EN/ERROR_HANDLING.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/EN/EXAMPLES_COMMAND_CLASSES.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/EN/GLOSSARY.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/EN/LOGGING_SYSTEM.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/EN/NAMING_STANDARDS.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/EN/PROJECT_EXTENSION_GUIDE.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/EN/PROJECT_IDEOLOGY.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/EN/PROJECT_RULES.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/EN/PROJECT_STRUCTURE.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/EN/PUBLISHING_TO_PYPI.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/EN/README.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/EN/api/cmd_endpoint.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/EN/api/errors.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/EN/api/intro.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/EN/api/requests.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/EN/api/responses.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/EN/commands/get_date_command.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/EN/commands/help_command.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/EN/commands/index.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/EN/commands/new_uuid4_command.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/EN/development/COMMAND_METADATA_ENHANCEMENT.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/EN/development/METADATA_COMMANDS.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/EN/development/OPENAPI_CUSTOMIZATION.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/EN/development/REMOVE_COMMAND_GUIDE.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/EN/development/TOOL_INTEGRATION.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/EN/development/architecture.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/EN/examples/README.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/EN/examples/anti_patterns.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/EN/examples/basic_example.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/EN/examples/complete_example.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/EN/examples/minimal_example.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/EN/testing/README.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/EN/user/basic_usage.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/EN/user/configuration.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/EN/user/deployment.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/EN/user/examples.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/EN/user/installation.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/RU/API_SCHEMA.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/RU/AUTOMATED_PUBLISHING.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/RU/BASIC_ARCHITECTURE.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/RU/COMMAND_CHECKLIST.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/RU/COMMAND_RESULTS.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/RU/COMMAND_TEMPLATE.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/RU/CONFIGURATION_PRINCIPLES.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/RU/DOCUMENTATION_MAP.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/RU/DOCUMENTATION_STANDARDS.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/RU/ERROR_HANDLING.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/RU/EXAMPLES_COMMAND_CLASSES.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/RU/GLOSSARY.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/RU/LOGGING_SYSTEM.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/RU/NAMING_STANDARDS.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/RU/PROJECT_EXTENSION_GUIDE.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/RU/PROJECT_IDEOLOGY.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/RU/PROJECT_RULES.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/RU/PROJECT_STRUCTURE.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/RU/PUBLISHING_TO_PYPI.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/RU/README.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/RU/api/cmd_endpoint.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/RU/api/errors.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/RU/api/intro.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/RU/api/requests.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/RU/api/responses.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/RU/commands/get_date_command.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/RU/commands/help_command.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/RU/commands/index.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/RU/commands/new_uuid4_command.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/RU/development/COMMAND_METADATA_ENHANCEMENT.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/RU/development/METADATA_COMMANDS.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/RU/development/OPENAPI_CUSTOMIZATION.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/RU/development/PLAN_REALIZACII_METADATA.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/RU/development/REMOVE_COMMAND_GUIDE.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/RU/development/TOOL_INTEGRATION.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/RU/development/architecture.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/RU/examples/README.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/RU/examples/anti_patterns.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/RU/examples/basic_example.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/RU/examples/complete_example.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/RU/examples/minimal_example.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/RU/testing/README.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/RU/user/basic_usage.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/RU/user/configuration.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/RU/user/deployment.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/RU/user/examples.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/RU/user/installation.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/examples/__init__.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/examples/anti_patterns/README.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/examples/anti_patterns/__init__.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/examples/anti_patterns/bad_design/README.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/examples/anti_patterns/bad_design/global_state.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/examples/anti_patterns/bad_design/monolithic_command.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/examples/basic_example/README.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/examples/basic_example/__init__.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/examples/basic_example/commands/__init__.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/examples/basic_example/commands/echo_command.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/examples/basic_example/commands/math_command.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/examples/basic_example/commands/time_command.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/examples/basic_example/config.json +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/examples/basic_example/docs/EN/README.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/examples/basic_example/docs/RU/README.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/examples/basic_example/server.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/examples/basic_example/tests/conftest.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/examples/commands/echo_command.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/examples/commands/echo_result.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/examples/commands/get_date_command.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/examples/commands/new_uuid4_command.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/examples/complete_example/Dockerfile +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/examples/complete_example/README.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/examples/complete_example/__init__.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/examples/complete_example/commands/__init__.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/examples/complete_example/commands/system_command.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/examples/complete_example/config.json +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/examples/complete_example/configs/config.dev.yaml +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/examples/complete_example/configs/config.docker.yaml +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/examples/complete_example/docker-compose.yml +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/examples/complete_example/requirements.txt +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/examples/minimal_example/README.md +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/examples/minimal_example/__init__.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/examples/minimal_example/config.json +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/examples/minimal_example/main.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/examples/minimal_example/simple_server.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/examples/minimal_example/tests/conftest.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/examples/minimal_example/tests/test_hello_command.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/examples/minimal_example/tests/test_integration.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/examples/server.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/examples/simple_server.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/examples/test_server.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/examples/tool_description_example.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/__init__.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/api/__init__.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/api/app.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/api/handlers.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/api/middleware/__init__.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/api/middleware/auth.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/api/middleware/base.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/api/middleware/error_handling.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/api/middleware/logging.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/api/middleware/performance.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/api/middleware/rate_limit.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/api/schemas.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/api/tool_integration.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/api/tools.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/commands/__init__.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/commands/base.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/commands/command_registry.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/commands/config_command.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/commands/health_command.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/commands/help_command.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/commands/result.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/config.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/core/__init__.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/core/errors.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/core/logging.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/core/utils.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/openapi.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/py.typed +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/schemas/base_schema.json +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/schemas/openapi_schema.json +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/tests/__init__.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/tests/api/__init__.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/tests/api/test_cmd_endpoint.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/tests/api/test_middleware.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/tests/commands/__init__.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/tests/commands/test_config_command.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/tests/commands/test_echo_command.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/tests/commands/test_help_command.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/tests/conftest.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/tests/functional/__init__.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/tests/integration/__init__.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/tests/integration/test_cmd_integration.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/tests/integration/test_integration.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/tests/performance/__init__.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/tests/performance/test_performance.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/tests/stubs/__init__.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/tests/stubs/echo_command.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/tests/test_api_endpoints.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/tests/test_api_handlers.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/tests/test_base_command.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/tests/test_batch_requests.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/tests/test_command_registry.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/tests/test_config.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/tests/test_utils.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/tests/unit/__init__.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/tests/unit/test_base_command.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/tests/unit/test_config.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter.egg-info/SOURCES.txt +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter.egg-info/dependency_links.txt +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter.egg-info/requires.txt +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter.egg-info/top_level.txt +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/requirements.txt +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/setup.cfg +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/tests/api/test_tool_description.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/tests/commands/test_command_metadata.py +0 -0
- {mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/tests/commands/test_help_command.py +0 -0
@@ -484,4 +484,52 @@ classDiagram
|
|
484
484
|
4. **Compatibility**
|
485
485
|
- Full support for JSON-RPC 2.0
|
486
486
|
- Compliance with OpenAPI 3.0 specification
|
487
|
-
- Backward compatibility with existing clients
|
487
|
+
- Backward compatibility with existing clients
|
488
|
+
|
489
|
+
## Customizing OpenAPI Schema Fields
|
490
|
+
|
491
|
+
You can override the `title`, `description`, and `version` fields of the OpenAPI schema without editing the base schema file. This is done by passing the corresponding parameters to the FastAPI application and using the `custom_openapi` function.
|
492
|
+
|
493
|
+
### Example
|
494
|
+
|
495
|
+
```python
|
496
|
+
from fastapi import FastAPI
|
497
|
+
from mcp_proxy_adapter.custom_openapi import custom_openapi
|
498
|
+
|
499
|
+
app = FastAPI(
|
500
|
+
title="Custom Project Title",
|
501
|
+
description="Custom project description for OpenAPI schema.",
|
502
|
+
version="2.1.0"
|
503
|
+
)
|
504
|
+
|
505
|
+
# Use custom OpenAPI schema
|
506
|
+
default_openapi = app.openapi
|
507
|
+
app.openapi = lambda: custom_openapi(app)
|
508
|
+
|
509
|
+
# Now /openapi.json will reflect the custom title, description, and version
|
510
|
+
```
|
511
|
+
|
512
|
+
**Advantages:**
|
513
|
+
- No need to manually edit the base OpenAPI schema file.
|
514
|
+
- Flexible for use in different projects.
|
515
|
+
- Standard FastAPI fields are used for customization.
|
516
|
+
|
517
|
+
### Test Example
|
518
|
+
|
519
|
+
A test is provided to ensure that custom `title`, `description`, and `version` are correctly set in the OpenAPI schema:
|
520
|
+
|
521
|
+
```python
|
522
|
+
def test_custom_openapi_schema_fields():
|
523
|
+
from fastapi import FastAPI
|
524
|
+
from mcp_proxy_adapter.custom_openapi import custom_openapi
|
525
|
+
|
526
|
+
app = FastAPI(
|
527
|
+
title="Custom Title",
|
528
|
+
description="Custom Description",
|
529
|
+
version="9.9.9"
|
530
|
+
)
|
531
|
+
schema = custom_openapi(app)
|
532
|
+
assert schema["info"]["title"] == "Custom Title"
|
533
|
+
assert schema["info"]["description"] == "Custom Description"
|
534
|
+
assert schema["info"]["version"] == "9.9.9"
|
535
|
+
```
|
@@ -484,4 +484,52 @@ classDiagram
|
|
484
484
|
4. **Совместимость**
|
485
485
|
- Полная поддержка JSON-RPC 2.0
|
486
486
|
- Соответствие спецификации OpenAPI 3.0
|
487
|
-
- Обратная совместимость с существующими клиентами
|
487
|
+
- Обратная совместимость с существующими клиентами
|
488
|
+
|
489
|
+
## Кастомизация полей OpenAPI-схемы
|
490
|
+
|
491
|
+
Вы можете переопределять поля `title`, `description` и `version` в OpenAPI-схеме без ручного редактирования базового файла схемы. Для этого достаточно передать соответствующие параметры в FastAPI-приложение и использовать функцию `custom_openapi`.
|
492
|
+
|
493
|
+
### Пример
|
494
|
+
|
495
|
+
```python
|
496
|
+
from fastapi import FastAPI
|
497
|
+
from mcp_proxy_adapter.custom_openapi import custom_openapi
|
498
|
+
|
499
|
+
app = FastAPI(
|
500
|
+
title="Заголовок проекта",
|
501
|
+
description="Описание проекта для OpenAPI-схемы.",
|
502
|
+
version="2.1.0"
|
503
|
+
)
|
504
|
+
|
505
|
+
# Используем кастомную OpenAPI-схему
|
506
|
+
default_openapi = app.openapi
|
507
|
+
app.openapi = lambda: custom_openapi(app)
|
508
|
+
|
509
|
+
# Теперь /openapi.json будет содержать кастомные title, description и version
|
510
|
+
```
|
511
|
+
|
512
|
+
**Преимущества:**
|
513
|
+
- Нет необходимости вручную редактировать базовый файл OpenAPI-схемы.
|
514
|
+
- Гибко для использования в разных проектах.
|
515
|
+
- Используются стандартные поля FastAPI для кастомизации.
|
516
|
+
|
517
|
+
### Пример теста
|
518
|
+
|
519
|
+
Добавлен тест, который проверяет, что кастомные `title`, `description` и `version` корректно устанавливаются в OpenAPI-схеме:
|
520
|
+
|
521
|
+
```python
|
522
|
+
def test_custom_openapi_schema_fields():
|
523
|
+
from fastapi import FastAPI
|
524
|
+
from mcp_proxy_adapter.custom_openapi import custom_openapi
|
525
|
+
|
526
|
+
app = FastAPI(
|
527
|
+
title="Custom Title",
|
528
|
+
description="Custom Description",
|
529
|
+
version="9.9.9"
|
530
|
+
)
|
531
|
+
schema = custom_openapi(app)
|
532
|
+
assert schema["info"]["title"] == "Custom Title"
|
533
|
+
assert schema["info"]["description"] == "Custom Description"
|
534
|
+
assert schema["info"]["version"] == "9.9.9"
|
535
|
+
```
|
@@ -8,14 +8,12 @@ environment-specific configuration, and multiple commands.
|
|
8
8
|
import os
|
9
9
|
import sys
|
10
10
|
import argparse
|
11
|
-
from typing import Dict, Any
|
12
11
|
from pathlib import Path
|
13
|
-
|
14
|
-
|
15
|
-
from mcp_proxy_adapter import MicroService
|
12
|
+
import uvicorn
|
13
|
+
from mcp_proxy_adapter.api.app import create_app
|
16
14
|
from mcp_proxy_adapter.commands.command_registry import registry
|
17
|
-
from mcp_proxy_adapter.core.logging import logger
|
18
15
|
from mcp_proxy_adapter.config import config
|
16
|
+
from mcp_proxy_adapter.core.logging import logger, setup_logging
|
19
17
|
|
20
18
|
# Add commands directory to path for local imports
|
21
19
|
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
@@ -28,32 +26,22 @@ def parse_args():
|
|
28
26
|
Returns:
|
29
27
|
Parsed arguments
|
30
28
|
"""
|
31
|
-
parser = argparse.ArgumentParser(description="MCP
|
29
|
+
parser = argparse.ArgumentParser(description="MCP Complete Example")
|
32
30
|
parser.add_argument(
|
33
|
-
"--config",
|
31
|
+
"--config",
|
34
32
|
default="configs/config.dev.yaml",
|
35
33
|
help="Path to configuration file"
|
36
34
|
)
|
37
35
|
return parser.parse_args()
|
38
36
|
|
39
37
|
|
40
|
-
def ensure_directories(
|
38
|
+
def ensure_directories():
|
41
39
|
"""
|
42
40
|
Create necessary directories based on configuration.
|
43
|
-
|
44
|
-
Args:
|
45
|
-
config_path: Path to configuration file
|
46
41
|
"""
|
47
|
-
# Extract base directory
|
48
42
|
base_dir = os.path.dirname(os.path.abspath(__file__))
|
49
|
-
|
50
|
-
# Create logs directory
|
51
43
|
os.makedirs(os.path.join(base_dir, "logs"), exist_ok=True)
|
52
|
-
|
53
|
-
# Create cache directory
|
54
44
|
os.makedirs(os.path.join(base_dir, "cache"), exist_ok=True)
|
55
|
-
|
56
|
-
# Create data directory
|
57
45
|
os.makedirs(os.path.join(base_dir, "data"), exist_ok=True)
|
58
46
|
|
59
47
|
|
@@ -65,74 +53,60 @@ def setup_application(config_file=None):
|
|
65
53
|
config_file: Path to configuration file (optional)
|
66
54
|
|
67
55
|
Returns:
|
68
|
-
Configured
|
56
|
+
Configured FastAPI application
|
69
57
|
"""
|
70
|
-
# Parse command line arguments if config_file not provided
|
71
58
|
if config_file is None:
|
72
59
|
args = parse_args()
|
73
60
|
config_file = args.config
|
74
|
-
|
75
|
-
# Get absolute path to config file
|
76
61
|
current_dir = Path(__file__).parent.absolute()
|
77
62
|
config_path = current_dir / config_file
|
78
|
-
|
79
|
-
# Fall back to config.json if specified file doesn't exist
|
80
63
|
if not config_path.exists():
|
81
64
|
config_path = current_dir / "config.json"
|
82
|
-
|
83
|
-
# Create necessary directories
|
84
|
-
ensure_directories(str(config_path))
|
85
|
-
|
86
|
-
# Load configuration if exists
|
65
|
+
ensure_directories()
|
87
66
|
if config_path.exists():
|
88
67
|
config.load_from_file(str(config_path))
|
89
68
|
logger.info(f"Loaded configuration from {config_path}")
|
90
69
|
else:
|
91
70
|
logger.warning(f"Configuration file {config_path} not found, using defaults")
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
config_path=str(config_path) if config_path.exists() else None
|
99
|
-
)
|
100
|
-
|
101
|
-
# Safely register commands from package
|
71
|
+
app = create_app()
|
72
|
+
app.title = "Complete MCP Microservice Example"
|
73
|
+
app.description = "Full-featured microservice with Docker support"
|
74
|
+
app.version = "1.0.0"
|
75
|
+
# Discover and register commands from the commands directory
|
76
|
+
package_path = "commands"
|
102
77
|
try:
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
# Get currently registered commands
|
107
|
-
commands = registry.get_all_commands()
|
108
|
-
for cmd_name in list(commands.keys()):
|
78
|
+
registered_commands = registry.get_all_commands()
|
79
|
+
for cmd_name in list(registered_commands.keys()):
|
109
80
|
try:
|
110
81
|
registry.unregister(cmd_name)
|
111
82
|
except Exception as e:
|
112
83
|
logger.debug(f"Error unregistering command {cmd_name}: {e}")
|
113
|
-
|
114
|
-
|
115
|
-
service.discover_commands(package_path)
|
116
|
-
logger.info(f"Discovered and registered commands from package: {package_path}")
|
84
|
+
registry.discover_commands(package_path)
|
85
|
+
logger.info(f"Discovered commands from package: {package_path}")
|
117
86
|
except Exception as e:
|
118
87
|
logger.error(f"Error discovering commands: {e}")
|
119
|
-
|
120
|
-
return service
|
88
|
+
return app
|
121
89
|
|
122
90
|
|
123
91
|
def main():
|
124
92
|
"""Run microservice with command discovery."""
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
93
|
+
log_level = config.get("logging.level", "INFO")
|
94
|
+
setup_logging(log_level)
|
95
|
+
app = setup_application()
|
96
|
+
host = config.get("server.host", "0.0.0.0")
|
97
|
+
port = config.get("server.port", 8000)
|
129
98
|
if "TEST_SERVER_PORT" in os.environ:
|
130
99
|
port = int(os.environ["TEST_SERVER_PORT"])
|
131
|
-
service.port = port
|
132
100
|
logger.info(f"Using test port from environment: {port}")
|
133
|
-
|
134
|
-
|
135
|
-
|
101
|
+
logger.info(f"Starting server on {host}:{port}")
|
102
|
+
debug = config.get("server.debug", False)
|
103
|
+
uvicorn.run(
|
104
|
+
app,
|
105
|
+
host=host,
|
106
|
+
port=port,
|
107
|
+
reload=debug,
|
108
|
+
log_level=log_level.lower()
|
109
|
+
)
|
136
110
|
|
137
111
|
|
138
112
|
if __name__ == "__main__":
|
@@ -18,8 +18,16 @@ class CustomOpenAPIGenerator:
|
|
18
18
|
"""
|
19
19
|
Custom OpenAPI schema generator for compatibility with MCP-Proxy.
|
20
20
|
|
21
|
+
EN:
|
21
22
|
This generator creates an OpenAPI schema that matches the format expected by MCP-Proxy,
|
22
23
|
enabling dynamic command loading and proper tool representation in AI models.
|
24
|
+
Allows overriding title, description, and version for schema customization.
|
25
|
+
|
26
|
+
RU:
|
27
|
+
Кастомный генератор схемы OpenAPI для совместимости с MCP-Proxy.
|
28
|
+
Позволяет создавать схему OpenAPI в формате, ожидаемом MCP-Proxy,
|
29
|
+
с возможностью динамической подгрузки команд и корректного отображения инструментов для AI-моделей.
|
30
|
+
Поддерживает переопределение title, description и version для кастомизации схемы.
|
23
31
|
"""
|
24
32
|
|
25
33
|
def __init__(self):
|
@@ -88,38 +96,67 @@ class CustomOpenAPIGenerator:
|
|
88
96
|
|
89
97
|
return cmd_schema
|
90
98
|
|
91
|
-
def generate(self) -> Dict[str, Any]:
|
99
|
+
def generate(self, title: Optional[str] = None, description: Optional[str] = None, version: Optional[str] = None) -> Dict[str, Any]:
|
92
100
|
"""
|
101
|
+
EN:
|
93
102
|
Generate the complete OpenAPI schema compatible with MCP-Proxy.
|
103
|
+
Optionally override title, description, and version.
|
104
|
+
|
105
|
+
RU:
|
106
|
+
Генерирует полную схему OpenAPI, совместимую с MCP-Proxy.
|
107
|
+
Позволяет опционально переопределить title, description и version.
|
108
|
+
|
109
|
+
Args:
|
110
|
+
title: Custom title for the schema / Кастомный заголовок схемы
|
111
|
+
description: Custom description for the schema / Кастомное описание схемы
|
112
|
+
version: Custom version for the schema / Кастомная версия схемы
|
94
113
|
|
95
114
|
Returns:
|
96
|
-
Dict containing the complete OpenAPI schema
|
115
|
+
Dict containing the complete OpenAPI schema / Словарь с полной схемой OpenAPI
|
97
116
|
"""
|
98
117
|
# Deep copy the base schema to avoid modifying it
|
99
118
|
schema = deepcopy(self.base_schema)
|
100
|
-
|
119
|
+
|
120
|
+
# Optionally override info fields
|
121
|
+
if title:
|
122
|
+
schema["info"]["title"] = title
|
123
|
+
if description:
|
124
|
+
schema["info"]["description"] = description
|
125
|
+
if version:
|
126
|
+
schema["info"]["version"] = version
|
127
|
+
|
101
128
|
# Add commands to schema
|
102
129
|
self._add_commands_to_schema(schema)
|
103
|
-
|
130
|
+
|
104
131
|
logger.info(f"Generated OpenAPI schema with {len(registry.get_all_commands())} commands")
|
105
|
-
|
132
|
+
|
106
133
|
return schema
|
107
134
|
|
108
135
|
|
109
136
|
def custom_openapi(app: FastAPI) -> Dict[str, Any]:
|
110
137
|
"""
|
138
|
+
EN:
|
111
139
|
Create a custom OpenAPI schema for the FastAPI application.
|
140
|
+
Passes app's title, description, and version to the generator.
|
141
|
+
|
142
|
+
RU:
|
143
|
+
Создаёт кастомную OpenAPI-схему для FastAPI-приложения.
|
144
|
+
Передаёт параметры title, description и version из приложения в генератор схемы.
|
112
145
|
|
113
146
|
Args:
|
114
|
-
app: The FastAPI application
|
147
|
+
app: The FastAPI application / FastAPI-приложение
|
115
148
|
|
116
149
|
Returns:
|
117
|
-
Dict containing the custom OpenAPI schema
|
150
|
+
Dict containing the custom OpenAPI schema / Словарь с кастомной OpenAPI-схемой
|
118
151
|
"""
|
119
152
|
generator = CustomOpenAPIGenerator()
|
120
|
-
openapi_schema = generator.generate(
|
121
|
-
|
153
|
+
openapi_schema = generator.generate(
|
154
|
+
title=getattr(app, 'title', None),
|
155
|
+
description=getattr(app, 'description', None),
|
156
|
+
version=getattr(app, 'version', None)
|
157
|
+
)
|
158
|
+
|
122
159
|
# Cache the schema
|
123
160
|
app.openapi_schema = openapi_schema
|
124
|
-
|
161
|
+
|
125
162
|
return openapi_schema
|
{mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/mcp_proxy_adapter/tests/functional/test_api.py
RENAMED
@@ -232,4 +232,22 @@ def test_batch_requests(test_client: TestClient, json_rpc_request: Dict[str, Any
|
|
232
232
|
assert data[0]["id"] == "1"
|
233
233
|
|
234
234
|
assert data[1]["result"]["params"] == {"request_id": "2"}
|
235
|
-
assert data[1]["id"] == "2"
|
235
|
+
assert data[1]["id"] == "2"
|
236
|
+
|
237
|
+
|
238
|
+
def test_custom_openapi_schema_fields():
|
239
|
+
"""
|
240
|
+
Test that custom title, description, and version are set in the OpenAPI schema.
|
241
|
+
"""
|
242
|
+
from fastapi import FastAPI
|
243
|
+
from mcp_proxy_adapter.custom_openapi import custom_openapi
|
244
|
+
|
245
|
+
app = FastAPI(
|
246
|
+
title="Custom Title",
|
247
|
+
description="Custom Description",
|
248
|
+
version="9.9.9"
|
249
|
+
)
|
250
|
+
schema = custom_openapi(app)
|
251
|
+
assert schema["info"]["title"] == "Custom Title"
|
252
|
+
assert schema["info"]["description"] == "Custom Description"
|
253
|
+
assert schema["info"]["version"] == "9.9.9"
|
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
|
|
2
2
|
|
3
3
|
setup(
|
4
4
|
name="mcp-proxy-adapter",
|
5
|
-
version="3.0.
|
5
|
+
version="3.0.2",
|
6
6
|
description="Adapter for MCP Proxy JSON-RPC communications",
|
7
7
|
long_description=open("README.md").read(),
|
8
8
|
long_description_content_type="text/markdown",
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/EN/development/METADATA_COMMANDS.md
RENAMED
File without changes
|
{mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/EN/development/OPENAPI_CUSTOMIZATION.md
RENAMED
File without changes
|
{mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/EN/development/REMOVE_COMMAND_GUIDE.md
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{mcp_proxy_adapter-3.0.1 → mcp_proxy_adapter-3.0.2}/docs/RU/development/METADATA_COMMANDS.md
RENAMED
File without changes
|