mcp-proxy-adapter 3.1.5__py3-none-any.whl → 4.0.0__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.
Files changed (122) hide show
  1. mcp_proxy_adapter/api/app.py +86 -27
  2. mcp_proxy_adapter/api/handlers.py +1 -1
  3. mcp_proxy_adapter/api/middleware/error_handling.py +11 -10
  4. mcp_proxy_adapter/api/tool_integration.py +5 -2
  5. mcp_proxy_adapter/api/tools.py +3 -3
  6. mcp_proxy_adapter/commands/base.py +19 -1
  7. mcp_proxy_adapter/commands/command_registry.py +258 -6
  8. mcp_proxy_adapter/commands/help_command.py +54 -65
  9. mcp_proxy_adapter/commands/hooks.py +260 -0
  10. mcp_proxy_adapter/commands/reload_command.py +211 -0
  11. mcp_proxy_adapter/commands/reload_settings_command.py +125 -0
  12. mcp_proxy_adapter/commands/settings_command.py +189 -0
  13. mcp_proxy_adapter/config.py +16 -1
  14. mcp_proxy_adapter/core/__init__.py +44 -0
  15. mcp_proxy_adapter/core/logging.py +87 -34
  16. mcp_proxy_adapter/core/settings.py +376 -0
  17. mcp_proxy_adapter/core/utils.py +2 -2
  18. mcp_proxy_adapter/custom_openapi.py +81 -2
  19. mcp_proxy_adapter/examples/README.md +124 -0
  20. mcp_proxy_adapter/examples/__init__.py +7 -0
  21. mcp_proxy_adapter/examples/basic_server/README.md +60 -0
  22. mcp_proxy_adapter/examples/basic_server/__init__.py +7 -0
  23. mcp_proxy_adapter/examples/basic_server/basic_custom_settings.json +39 -0
  24. mcp_proxy_adapter/examples/basic_server/config.json +35 -0
  25. mcp_proxy_adapter/examples/basic_server/custom_settings_example.py +238 -0
  26. mcp_proxy_adapter/examples/basic_server/server.py +98 -0
  27. mcp_proxy_adapter/examples/custom_commands/README.md +127 -0
  28. mcp_proxy_adapter/examples/custom_commands/__init__.py +27 -0
  29. mcp_proxy_adapter/examples/custom_commands/advanced_hooks.py +250 -0
  30. mcp_proxy_adapter/examples/custom_commands/auto_commands/__init__.py +6 -0
  31. mcp_proxy_adapter/examples/custom_commands/auto_commands/auto_echo_command.py +103 -0
  32. mcp_proxy_adapter/examples/custom_commands/auto_commands/auto_info_command.py +111 -0
  33. mcp_proxy_adapter/examples/custom_commands/config.json +62 -0
  34. mcp_proxy_adapter/examples/custom_commands/custom_health_command.py +169 -0
  35. mcp_proxy_adapter/examples/custom_commands/custom_help_command.py +215 -0
  36. mcp_proxy_adapter/examples/custom_commands/custom_openapi_generator.py +76 -0
  37. mcp_proxy_adapter/examples/custom_commands/custom_settings.json +96 -0
  38. mcp_proxy_adapter/examples/custom_commands/custom_settings_manager.py +241 -0
  39. mcp_proxy_adapter/examples/custom_commands/data_transform_command.py +135 -0
  40. mcp_proxy_adapter/examples/custom_commands/echo_command.py +122 -0
  41. mcp_proxy_adapter/examples/custom_commands/hooks.py +230 -0
  42. mcp_proxy_adapter/examples/custom_commands/intercept_command.py +123 -0
  43. mcp_proxy_adapter/examples/custom_commands/manual_echo_command.py +103 -0
  44. mcp_proxy_adapter/examples/custom_commands/server.py +223 -0
  45. mcp_proxy_adapter/examples/custom_commands/test_hooks.py +176 -0
  46. mcp_proxy_adapter/examples/deployment/README.md +49 -0
  47. mcp_proxy_adapter/examples/deployment/__init__.py +7 -0
  48. mcp_proxy_adapter/examples/deployment/config.development.json +8 -0
  49. {examples/basic_example → mcp_proxy_adapter/examples/deployment}/config.json +11 -7
  50. mcp_proxy_adapter/examples/deployment/config.production.json +12 -0
  51. mcp_proxy_adapter/examples/deployment/config.staging.json +11 -0
  52. mcp_proxy_adapter/examples/deployment/docker-compose.yml +31 -0
  53. mcp_proxy_adapter/examples/deployment/run.sh +43 -0
  54. mcp_proxy_adapter/examples/deployment/run_docker.sh +84 -0
  55. mcp_proxy_adapter/openapi.py +3 -2
  56. mcp_proxy_adapter/tests/api/test_custom_openapi.py +617 -0
  57. mcp_proxy_adapter/tests/api/test_handlers.py +522 -0
  58. mcp_proxy_adapter/tests/api/test_schemas.py +546 -0
  59. mcp_proxy_adapter/tests/api/test_tool_integration.py +531 -0
  60. mcp_proxy_adapter/tests/commands/test_help_command.py +8 -5
  61. mcp_proxy_adapter/tests/integration/test_cmd_integration.py +4 -5
  62. mcp_proxy_adapter/tests/test_command_registry.py +37 -1
  63. mcp_proxy_adapter/tests/unit/test_base_command.py +391 -85
  64. mcp_proxy_adapter/version.py +1 -1
  65. {mcp_proxy_adapter-3.1.5.dist-info → mcp_proxy_adapter-4.0.0.dist-info}/METADATA +1 -1
  66. mcp_proxy_adapter-4.0.0.dist-info/RECORD +110 -0
  67. {mcp_proxy_adapter-3.1.5.dist-info → mcp_proxy_adapter-4.0.0.dist-info}/WHEEL +1 -1
  68. {mcp_proxy_adapter-3.1.5.dist-info → mcp_proxy_adapter-4.0.0.dist-info}/top_level.txt +0 -1
  69. examples/__init__.py +0 -19
  70. examples/anti_patterns/README.md +0 -51
  71. examples/anti_patterns/__init__.py +0 -9
  72. examples/anti_patterns/bad_design/README.md +0 -72
  73. examples/anti_patterns/bad_design/global_state.py +0 -170
  74. examples/anti_patterns/bad_design/monolithic_command.py +0 -272
  75. examples/basic_example/README.md +0 -245
  76. examples/basic_example/__init__.py +0 -8
  77. examples/basic_example/commands/__init__.py +0 -5
  78. examples/basic_example/commands/echo_command.py +0 -95
  79. examples/basic_example/commands/math_command.py +0 -151
  80. examples/basic_example/commands/time_command.py +0 -152
  81. examples/basic_example/docs/EN/README.md +0 -177
  82. examples/basic_example/docs/RU/README.md +0 -177
  83. examples/basic_example/server.py +0 -151
  84. examples/basic_example/tests/conftest.py +0 -243
  85. examples/check_vstl_schema.py +0 -106
  86. examples/commands/echo_command.py +0 -52
  87. examples/commands/echo_command_di.py +0 -152
  88. examples/commands/echo_result.py +0 -65
  89. examples/commands/get_date_command.py +0 -98
  90. examples/commands/new_uuid4_command.py +0 -91
  91. examples/complete_example/Dockerfile +0 -24
  92. examples/complete_example/README.md +0 -92
  93. examples/complete_example/__init__.py +0 -8
  94. examples/complete_example/commands/__init__.py +0 -5
  95. examples/complete_example/commands/system_command.py +0 -328
  96. examples/complete_example/config.json +0 -41
  97. examples/complete_example/configs/config.dev.yaml +0 -40
  98. examples/complete_example/configs/config.docker.yaml +0 -40
  99. examples/complete_example/docker-compose.yml +0 -35
  100. examples/complete_example/requirements.txt +0 -20
  101. examples/complete_example/server.py +0 -113
  102. examples/di_example/.pytest_cache/README.md +0 -8
  103. examples/di_example/server.py +0 -249
  104. examples/fix_vstl_help.py +0 -123
  105. examples/minimal_example/README.md +0 -65
  106. examples/minimal_example/__init__.py +0 -8
  107. examples/minimal_example/config.json +0 -14
  108. examples/minimal_example/main.py +0 -136
  109. examples/minimal_example/simple_server.py +0 -163
  110. examples/minimal_example/tests/conftest.py +0 -171
  111. examples/minimal_example/tests/test_hello_command.py +0 -111
  112. examples/minimal_example/tests/test_integration.py +0 -181
  113. examples/patch_vstl_service.py +0 -105
  114. examples/patch_vstl_service_mcp.py +0 -108
  115. examples/server.py +0 -69
  116. examples/simple_server.py +0 -128
  117. examples/test_package_3.1.4.py +0 -177
  118. examples/test_server.py +0 -134
  119. examples/tool_description_example.py +0 -82
  120. mcp_proxy_adapter/py.typed +0 -0
  121. mcp_proxy_adapter-3.1.5.dist-info/RECORD +0 -118
  122. {mcp_proxy_adapter-3.1.5.dist-info → mcp_proxy_adapter-4.0.0.dist-info}/licenses/LICENSE +0 -0
@@ -1,177 +0,0 @@
1
- #!/usr/bin/env python3
2
- """
3
- Скрипт для проверки работы улучшенной обработки null в версии 3.1.4.
4
-
5
- Этот скрипт:
6
- 1. Проверяет, что версия пакета 3.1.4
7
- 2. Тестирует улучшенный метод validate_params
8
- 3. Проверяет, что команда help правильно обрабатывает null значения
9
- """
10
-
11
- import inspect
12
- import sys
13
- from typing import Dict, Any, Optional
14
-
15
- try:
16
- # Импортируем необходимые модули из пакета
17
- from mcp_proxy_adapter import __version__
18
- from mcp_proxy_adapter.commands.base import Command
19
- from mcp_proxy_adapter.commands.help_command import HelpCommand, HelpResult
20
- except ImportError:
21
- print("ОШИБКА: Не удалось импортировать mcp_proxy_adapter. Убедитесь, что пакет установлен.")
22
- sys.exit(1)
23
-
24
-
25
- def check_version():
26
- """
27
- Проверяет версию установленного пакета mcp_proxy_adapter.
28
- """
29
- expected_version = "3.1.4"
30
-
31
- print(f"\n=== Проверка версии ===")
32
- print(f"Установленная версия: {__version__}")
33
- print(f"Ожидаемая версия: {expected_version}")
34
-
35
- if __version__ != expected_version:
36
- print(f"ОШИБКА: Версия пакета ({__version__}) не соответствует ожидаемой ({expected_version}).")
37
- return False
38
-
39
- print("OK: Версия соответствует ожидаемой.")
40
- return True
41
-
42
-
43
- def test_validate_params():
44
- """
45
- Тестирует метод validate_params класса Command для обработки различных вариантов null.
46
- """
47
- print(f"\n=== Тестирование validate_params ===")
48
-
49
- # Получаем исходный код метода validate_params
50
- validate_params_source = inspect.getsource(Command.validate_params)
51
- print(f"Исходный код метода validate_params:")
52
- print(validate_params_source)
53
-
54
- # Проверяем, содержит ли код улучшения для обработки null
55
- required_improvements = [
56
- "value.lower() in",
57
- "null",
58
- "none",
59
- "validated_params[key] = None"
60
- ]
61
-
62
- for improvement in required_improvements:
63
- if improvement not in validate_params_source:
64
- print(f"ОШИБКА: Не найдено улучшение: {improvement}")
65
- return False
66
-
67
- # Тестируем различные значения null
68
- test_cases = [
69
- {"unknown_param": None},
70
- {"unknown_param": "null"},
71
- {"unknown_param": "NULL"},
72
- {"unknown_param": "Null"},
73
- {"unknown_param": "none"},
74
- {"unknown_param": "NONE"},
75
- {"cmdname": None},
76
- {"cmdname": "null"},
77
- {"cmdname": "none"},
78
- {"cmdname": ""}
79
- ]
80
-
81
- print("\nРезультаты тестирования:")
82
- for case in test_cases:
83
- result = Command.validate_params(case)
84
- print(f"Входные данные: {case}")
85
- print(f"Результат: {result}")
86
-
87
- # Проверяем специальный случай с параметром cmdname
88
- if "cmdname" in case and (case["cmdname"] is None or case["cmdname"].lower() in ["null", "none", ""]):
89
- if "cmdname" not in result or result["cmdname"] is not None:
90
- print(f"ОШИБКА: Неверная обработка cmdname. Ожидалось: {{'cmdname': None}}, Получено: {result}")
91
- return False
92
-
93
- # Проверяем, что unknown_param был удален
94
- if "unknown_param" in case and "unknown_param" in result:
95
- print(f"ОШИБКА: Параметр unknown_param не был удален: {result}")
96
- return False
97
-
98
- print("OK: Все тесты validate_params пройдены успешно.")
99
- return True
100
-
101
-
102
- def test_help_command():
103
- """
104
- Тестирует работу команды help с различными вариантами null.
105
- """
106
- print(f"\n=== Тестирование команды help ===")
107
-
108
- # Получаем исходный код метода execute команды help
109
- help_execute_source = inspect.getsource(HelpCommand.execute)
110
- print(f"Исходный код метода execute в HelpCommand:")
111
- print(help_execute_source)
112
-
113
- # Проверяем, содержит ли код поддержку **kwargs
114
- if "**kwargs" not in help_execute_source:
115
- print("ОШИБКА: Метод execute в HelpCommand не поддерживает **kwargs.")
116
- return False
117
-
118
- # Создаем экземпляр команды
119
- help_cmd = HelpCommand()
120
-
121
- # Тестируем с разными вариантами null в параметрах
122
- test_cases = [
123
- {"cmdname": None, "unknown_param": None},
124
- {"cmdname": "null", "unknown_param": "null"},
125
- {"cmdname": "none", "unknown_param": "none"},
126
- {"cmdname": "", "unknown_param": ""},
127
- {"unknown_param": "whatever"}
128
- ]
129
-
130
- print("\nРезультаты тестирования:")
131
- for i, case in enumerate(test_cases):
132
- print(f"\nТест {i+1}: {case}")
133
- try:
134
- # Используем execute напрямую, так как run преобразует параметры
135
- result = help_cmd.execute(**case)
136
- print(f"Тест пройден успешно, команда вернула результат типа: {type(result)}")
137
- except Exception as e:
138
- print(f"ОШИБКА: Тест не пройден: {e}")
139
- return False
140
-
141
- print("OK: Все тесты команды help пройдены успешно.")
142
- return True
143
-
144
-
145
- def main():
146
- """
147
- Основная функция для запуска тестов.
148
- """
149
- print("=== Проверка MCP Proxy Adapter 3.1.4 ===")
150
-
151
- # Проверяем версию пакета
152
- version_ok = check_version()
153
-
154
- # Если версия не соответствует ожидаемой, прекращаем выполнение
155
- if not version_ok:
156
- print("ОШИБКА: Версия пакета не соответствует требуемой.")
157
- return False
158
-
159
- # Тестируем validate_params
160
- validate_params_ok = test_validate_params()
161
-
162
- # Тестируем команду help
163
- help_command_ok = test_help_command()
164
-
165
- # Выводим общий результат
166
- print("\n=== Итоговый результат ===")
167
- if version_ok and validate_params_ok and help_command_ok:
168
- print("УСПЕХ: Все тесты пройдены успешно!")
169
- return True
170
- else:
171
- print("ОШИБКА: Не все тесты пройдены.")
172
- return False
173
-
174
-
175
- if __name__ == "__main__":
176
- success = main()
177
- sys.exit(0 if success else 1)
examples/test_server.py DELETED
@@ -1,134 +0,0 @@
1
- #!/usr/bin/env python3
2
- """
3
- Тестовый скрипт для запуска сервера JSON-RPC с использованием MCP Proxy Adapter.
4
- Использует только базовую команду для тестирования установки пакета.
5
- """
6
-
7
- import os
8
- import argparse
9
- import sys
10
- import uvicorn
11
- from pathlib import Path
12
- from typing import Dict, Any, Optional
13
-
14
- # Добавляем родительскую директорию в PYTHONPATH для импорта mcp_proxy_adapter
15
- sys.path.insert(0, str(Path(__file__).parent.parent))
16
-
17
- from mcp_proxy_adapter import Command, SuccessResult, create_app, registry
18
- from mcp_proxy_adapter.core.logging import setup_logging
19
- from mcp_proxy_adapter.config import config
20
-
21
-
22
- class HelloResult(SuccessResult):
23
- """Result of hello command."""
24
-
25
- def __init__(self, message: str):
26
- """
27
- Initialize result.
28
-
29
- Args:
30
- message: Hello message
31
- """
32
- self.message = message
33
-
34
- def to_dict(self) -> Dict[str, Any]:
35
- """
36
- Convert result to dictionary.
37
-
38
- Returns:
39
- Dictionary representation
40
- """
41
- return {"message": self.message}
42
-
43
- @classmethod
44
- def get_schema(cls) -> Dict[str, Any]:
45
- """
46
- Get JSON schema for result.
47
-
48
- Returns:
49
- JSON schema
50
- """
51
- return {
52
- "type": "object",
53
- "properties": {
54
- "message": {"type": "string"}
55
- },
56
- "required": ["message"]
57
- }
58
-
59
-
60
- class HelloCommand(Command):
61
- """Command that returns hello message."""
62
-
63
- name = "hello"
64
- result_class = HelloResult
65
-
66
- async def execute(self, name: str = "World") -> HelloResult:
67
- """
68
- Execute command.
69
-
70
- Args:
71
- name: Name to greet
72
-
73
- Returns:
74
- Hello result
75
- """
76
- return HelloResult(f"Hello, {name}!")
77
-
78
- @classmethod
79
- def get_schema(cls) -> Dict[str, Any]:
80
- """
81
- Get JSON schema for command parameters.
82
-
83
- Returns:
84
- JSON schema
85
- """
86
- return {
87
- "type": "object",
88
- "properties": {
89
- "name": {"type": "string"}
90
- },
91
- "additionalProperties": False
92
- }
93
-
94
-
95
- def main():
96
- """
97
- Основная функция для запуска сервера.
98
- """
99
- parser = argparse.ArgumentParser(description="Test JSON-RPC Microservice Server")
100
- parser.add_argument("--host", default="0.0.0.0", help="Host to bind server")
101
- parser.add_argument("--port", type=int, default=8000, help="Port to bind server")
102
- parser.add_argument("--reload", action="store_true", help="Enable auto-reload")
103
- parser.add_argument("--config", help="Path to config file")
104
-
105
- args = parser.parse_args()
106
-
107
- # Инициализируем конфигурацию
108
- if args.config and os.path.exists(args.config):
109
- config.load_from_file(args.config)
110
-
111
- # Настраиваем логирование
112
- setup_logging("INFO")
113
-
114
- # Создаем приложение FastAPI
115
- app = create_app()
116
- app.title = "Test Microservice"
117
- app.description = "Test microservice for package installation verification"
118
- app.version = "1.0.0"
119
-
120
- # Регистрируем только одну команду для тестирования
121
- registry.register(HelloCommand)
122
-
123
- # Запускаем сервер
124
- uvicorn.run(
125
- app,
126
- host=args.host,
127
- port=args.port,
128
- reload=args.reload,
129
- log_level="info"
130
- )
131
-
132
-
133
- if __name__ == "__main__":
134
- main()
@@ -1,82 +0,0 @@
1
- #!/usr/bin/env python
2
- """
3
- Example of using the API tool description functionality.
4
-
5
- This script demonstrates how to use the API tool description functionality
6
- to generate rich and informative descriptions for API tools.
7
- """
8
-
9
- import json
10
- import asyncio
11
- import sys
12
- from pathlib import Path
13
-
14
- # Add the project root to the Python path
15
- sys.path.insert(0, str(Path(__file__).parent.parent))
16
-
17
- from mcp_proxy_adapter.commands.command_registry import registry
18
- from mcp_proxy_adapter.api.schemas import APIToolDescription
19
- from mcp_proxy_adapter.api.tools import get_tool_description, TSTCommandExecutor
20
- from mcp_proxy_adapter.commands.help_command import HelpCommand
21
-
22
-
23
- async def main():
24
- """Main function to demonstrate API tool description functionality."""
25
-
26
- # Register the help command so we have at least one command registered
27
- if not registry.command_exists("help"):
28
- registry.register(HelpCommand)
29
-
30
- # Generate description using the APIToolDescription class directly
31
- print("Generating tool description using APIToolDescription:")
32
- description = APIToolDescription.generate_tool_description("tst_execute_command", registry)
33
- print(json.dumps(description, indent=2, ensure_ascii=False))
34
- print("\n" + "-" * 80 + "\n")
35
-
36
- # Generate text description using the APIToolDescription class
37
- print("Generating tool description text using APIToolDescription:")
38
- description_text = APIToolDescription.generate_tool_description_text("tst_execute_command", registry)
39
- print(description_text)
40
- print("\n" + "-" * 80 + "\n")
41
-
42
- # Get tool description using the tools module
43
- print("Getting tool description using the tools module:")
44
- tool_description = get_tool_description("tst_execute_command")
45
- print(json.dumps(tool_description, indent=2, ensure_ascii=False))
46
- print("\n" + "-" * 80 + "\n")
47
-
48
- # Get tool description in markdown format using the tools module
49
- print("Getting tool description in markdown format using the tools module:")
50
- tool_description_md = get_tool_description("tst_execute_command", "markdown")
51
- print(tool_description_md)
52
- print("\n" + "-" * 80 + "\n")
53
-
54
- # Get tool schema directly from the tool class
55
- print("Getting tool schema directly from the tool class:")
56
- tool_schema = TSTCommandExecutor.get_schema()
57
- print(json.dumps(tool_schema, indent=2, ensure_ascii=False))
58
- print("\n" + "-" * 80 + "\n")
59
-
60
- # Get tool description directly from the tool class
61
- print("Getting tool description directly from the tool class:")
62
- tool_desc = TSTCommandExecutor.get_description("json")
63
- print(json.dumps(tool_desc, indent=2, ensure_ascii=False))
64
- print("\n" + "-" * 80 + "\n")
65
-
66
- # Show how this can be used to create informative command-line help
67
- print("Example command-line help based on tool description:")
68
- help_text = f"""
69
- {TSTCommandExecutor.name} - {TSTCommandExecutor.description}
70
-
71
- Available commands:
72
- """
73
-
74
- for cmd_name in tool_schema["parameters"]["properties"]["command"]["enum"]:
75
- cmd_info = description["supported_commands"].get(cmd_name, {})
76
- help_text += f" {cmd_name} - {cmd_info.get('summary', '')}\n"
77
-
78
- print(help_text)
79
-
80
-
81
- if __name__ == "__main__":
82
- asyncio.run(main())
File without changes
@@ -1,118 +0,0 @@
1
- examples/__init__.py,sha256=sLYNpeoiE-X5q7fmJb7NFMmhiIn0543mgJj16q1qmk0,593
2
- examples/check_vstl_schema.py,sha256=s-VVoY8ysuvVr64JAX6uvxuwjEB7FjbJf0ek7XYc1Nc,4320
3
- examples/fix_vstl_help.py,sha256=GvFepKbCD-a2O2LEflMGeXnsgNMUNfNezPFU6QB_7tI,5208
4
- examples/patch_vstl_service.py,sha256=Su98KpRtcflsS8l-z22ECkWzquOv8VRtfUTxTHqS-oQ,4715
5
- examples/patch_vstl_service_mcp.py,sha256=jiMKzx8hANFVtM0Yv-DJbThwM4r81z9dslF_v9tkAf4,5254
6
- examples/server.py,sha256=gnRTE_k7C0A255dLyaJWyA4YU0H6Elc7osr_JQvsQhQ,2286
7
- examples/simple_server.py,sha256=Bkczmz5Qs473xJ0_AJjBpqWT-oWctwED98A067z05zQ,3768
8
- examples/test_package_3.1.4.py,sha256=OnEC4N4QOfqrh7DPsQrUV9L9TEG240CwkdM9NY2HBXU,7180
9
- examples/test_server.py,sha256=cKWJ4tlHqZsRKyeuXbZ1dQ7TU9riJWcDan__wK7YH_Y,3729
10
- examples/tool_description_example.py,sha256=blamrx_1oHCG4NnvIiYnQxphAEDqb7-TALPALJFj51s,3280
11
- examples/anti_patterns/README.md,sha256=1-Hby6Wf3kAC0XOV_jOvuHL-kmTypWOUfE_rEU3Knu8,2045
12
- examples/anti_patterns/__init__.py,sha256=xbgoTIMM2LNt4P8h0jTaenUxXkA_l9I7JL_9d4BhoDU,261
13
- examples/anti_patterns/bad_design/README.md,sha256=SJDMXZfvNMajN0JyvPBm5GtzxyiZZdtMfHslW3-LOII,2422
14
- examples/anti_patterns/bad_design/global_state.py,sha256=UnpMCWDfl-DaZSPhWl8C9fGifXkG_sYKhjx3_HvTiSI,5161
15
- examples/anti_patterns/bad_design/monolithic_command.py,sha256=gdp1Ok4h4dKto7nfJmhjoWTtjdCfwI-MtcKpn6il7Yo,8815
16
- examples/basic_example/README.md,sha256=H2Q5D8XcINpHZoX9fS0UDBFZyd3shNa5PEd6EOckHQQ,8274
17
- examples/basic_example/__init__.py,sha256=SXYCM5mPlVpEMdahhukXSYVepNiPNddhgypwAlhJjDU,191
18
- examples/basic_example/config.json,sha256=xln79S29iS-borOL61lR3Hw4V5vg83FMs-Ke3j4YqZQ,425
19
- examples/basic_example/server.py,sha256=0qoV59ofWBwCGxQX3jefr5WSyvZsEY0X18USh7x-s2s,4900
20
- examples/basic_example/commands/__init__.py,sha256=jD5tBWpkxH1Yk9kBHS_V3bBIMxwqqY4skr7RGuRru9s,115
21
- examples/basic_example/commands/echo_command.py,sha256=EoXMHEf5ouKjvxvZAEiNH6hqyD6ktyyEDWYP-6Oa2D4,2128
22
- examples/basic_example/commands/math_command.py,sha256=apJuU5EXlR965rGmAd2h8zcPWgLUSROtPeZ7Ml0H6nw,4423
23
- examples/basic_example/commands/time_command.py,sha256=REw-8RCgq9iVUdQxnIFPmeYO_9_6-7QVLzLKLGq0Lb0,4345
24
- examples/basic_example/docs/EN/README.md,sha256=grOp0Adr3h9m-XZLCgLO6haBdUOjc4_VosirNaLl7dU,4637
25
- examples/basic_example/docs/RU/README.md,sha256=8jBObIj_3-eDmFt35ufIRw6mm41FyUXJD7olHmKS2QM,6736
26
- examples/basic_example/tests/conftest.py,sha256=6e85QRE50P9PMV1RXXVgtBQxy49hVLbevZ6dHFBrxRU,5917
27
- examples/commands/echo_command.py,sha256=7RuUZfP0YlKl9gks02NiuiYEiiNPa_8lk9CAZmzijyo,1569
28
- examples/commands/echo_command_di.py,sha256=RMumhS6uKFjbvyjlW8IG24HB8UdOEVk-8WLD3xLfCS8,4307
29
- examples/commands/echo_result.py,sha256=q5IUEeFoi4PunzOhYD0zju2ZwETdGl35yj4DVXZfX68,1635
30
- examples/commands/get_date_command.py,sha256=ePQzZCV-n3tLf4IYv6Gn75t0AXXplXtikCDmrIMD2Q4,2537
31
- examples/commands/new_uuid4_command.py,sha256=lJQiPuVHtKCnOEUQukji6dwe0VOkddJ7sZXZ7XUsY6Y,2240
32
- examples/complete_example/Dockerfile,sha256=MpwyUpA2wMeLtEVQ2ay98z-l8EX5aEFvwUSxZCCxg64,499
33
- examples/complete_example/README.md,sha256=EupIC8DhC7dVsObbXjuERpwheVzfLR2i0y3LzCRHLYs,2784
34
- examples/complete_example/__init__.py,sha256=JQDNMNOrQAvbQyEV7tV3XrVKBxZRYy3ODMCVyOxU404,216
35
- examples/complete_example/config.json,sha256=KbfZnu4SMYH6B7ENQaZ_sZXrWdkmCdMcWgy47nAHh_Q,814
36
- examples/complete_example/docker-compose.yml,sha256=kBXjXFeswZCZ4-UhI0vC0OMR_nMRRoDt3PltCi-RGb8,924
37
- examples/complete_example/requirements.txt,sha256=QHeMbXMHgkISmFoXfO09kiaXAMkg0nNBdCfwThKiHDc,403
38
- examples/complete_example/server.py,sha256=t-GTqSP0yatjs67O1OFHzf-Yg7tU0aCw6r2eUdYtjpM,3565
39
- examples/complete_example/commands/__init__.py,sha256=cZDiwz3nLaeSCwR4oK7xlGgVsXt2WyAlIEMWCxSJPAE,121
40
- examples/complete_example/commands/system_command.py,sha256=CwcBRWMODG7Ynr9Syaildu3APuuUdJ_yvQOggAAidg8,10717
41
- examples/complete_example/configs/config.dev.yaml,sha256=ASIwU8xzB-kinAsLGghv8-LCER1SUC1ed6K8BktOYPQ,1282
42
- examples/complete_example/configs/config.docker.yaml,sha256=DZWxauz5fcaiVFaphvf7zpvLI3oXjUUiXdX_bGlcBds,1389
43
- examples/di_example/server.py,sha256=SRcKa_50L6Es7nDYSyTY3zzKQjlCdkAMAEjbwRe8esQ,7144
44
- examples/di_example/.pytest_cache/README.md,sha256=c_1vzN2ALEGaay2YPWwxc7fal1WKxLWJ7ewt_kQ9ua0,302
45
- examples/minimal_example/README.md,sha256=VFKjDgpNjFowYNLD3sHHGsc1CVhCm30BWPGBqpLFKAc,2569
46
- examples/minimal_example/__init__.py,sha256=EloOqdgVLp7YA2DJOWMw0ZxFbVUCH2LqvZVq5RSfSbg,165
47
- examples/minimal_example/config.json,sha256=FSL0q_dAyGHJXp37bLesUvvNgrCiFXkQ8_P7nuUhIcQ,250
48
- examples/minimal_example/main.py,sha256=5JAoUz_Gy56kcRTxlpuj27PThU6o6R-lKiySIpwsR7s,4770
49
- examples/minimal_example/simple_server.py,sha256=IrS32z5G3Z8Ck7pcqwPmrMMA157sFtHM7brP465q54Y,5372
50
- examples/minimal_example/tests/conftest.py,sha256=8kRuZws9twR6D4WX9OoSjtK4NwSCAvENPgp9uX3Dg58,4165
51
- examples/minimal_example/tests/test_hello_command.py,sha256=C48o7Hh_gy2NlLqb2KKm2HX37df8eIop0IQfOxWPVS0,3485
52
- examples/minimal_example/tests/test_integration.py,sha256=mW9LEXX5yOCxP3uIpGMiTEMci7DE8PDDCiE8rKJn4ds,6213
53
- mcp_proxy_adapter/__init__.py,sha256=B7m1YWyv_Wb87-Q-JqVpHQgwajnfIgDyZ_iIxzdTbBY,1021
54
- mcp_proxy_adapter/config.py,sha256=MjgZAld6TiD0F5oCyEaJhYhfEXVZxc5G5ke2SLKCV9A,5748
55
- mcp_proxy_adapter/custom_openapi.py,sha256=tAE289B76nUdd2tjbiyow2Jftj0Yd-A8I2ndTD6R-5c,11706
56
- mcp_proxy_adapter/openapi.py,sha256=jyl5EPXcFhzFKEEMXxHeqF1U-SsYvtdlaKGU2QrekpU,13889
57
- mcp_proxy_adapter/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
58
- mcp_proxy_adapter/version.py,sha256=4XNuKvyAcEOBhQOCskqTf1rAV8LbxArH1vRWL0Vso04,71
59
- mcp_proxy_adapter/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
60
- mcp_proxy_adapter/api/app.py,sha256=q3yYsNEBFXYr2TOJFxfh6bbF53NkmmgfzSFOtVq7xdc,14353
61
- mcp_proxy_adapter/api/handlers.py,sha256=lc_4eakQgQVlnGjnVkOY-mIMkfyLk4iRfwdrWTyvuvM,7194
62
- mcp_proxy_adapter/api/schemas.py,sha256=xOmiSwHaapY6myEFnLu7o-LWVPM7vwmLYZXFo2c6NfE,12381
63
- mcp_proxy_adapter/api/tool_integration.py,sha256=mQNFiCkd4plY_A3fkG6auaM8D_1XiC9Jxp4Zrm1ngYE,10161
64
- mcp_proxy_adapter/api/tools.py,sha256=nSDXD4rGlFV_NlB91Y0x3N8WeWvWZ76B32-s-VAFARw,8084
65
- mcp_proxy_adapter/api/middleware/__init__.py,sha256=RpaA5hbZ7XIjKaQK0PJpZNqc9tFISe5w7ZmqNgwC6FE,1556
66
- mcp_proxy_adapter/api/middleware/auth.py,sha256=bic-ez4o4xh74ZczLXSNafrk_m2qk82GF9MHmfDpf9w,4891
67
- mcp_proxy_adapter/api/middleware/base.py,sha256=aMV9YPLHkUnJECuQWYbnlEGaj6xUJFHZR_hJb0OKvu8,2282
68
- mcp_proxy_adapter/api/middleware/error_handling.py,sha256=ShguFRn9GBBprevKO7n77ENw4PwYhvBNFu4ptLyjxYQ,6876
69
- mcp_proxy_adapter/api/middleware/logging.py,sha256=wGtw4BqKMLgn5zqYd84DnVPtO3evfx2X-TxOCyAmysM,3679
70
- mcp_proxy_adapter/api/middleware/performance.py,sha256=dHBxTF43LEGXMKHMH3A8ybKmwAWURd_zswqq_oC4xbw,2454
71
- mcp_proxy_adapter/api/middleware/rate_limit.py,sha256=DIv_-ZUVmL-jEo_A5BlfnasZf25zT84AiIJDUUnXkpM,5041
72
- mcp_proxy_adapter/commands/__init__.py,sha256=bHZZcVYkXVL9g-YZOnWkHOxSP2WzT-I4_OleYycQhbw,610
73
- mcp_proxy_adapter/commands/base.py,sha256=lKKoN_9tJYIeOFKgQRGwWZHy_EvWP8bVB1EhIouTbi0,13740
74
- mcp_proxy_adapter/commands/command_registry.py,sha256=x55k4guzOlm7fVRolJ_iSFPRx2Snq4yBaMQdzVmsK0A,10460
75
- mcp_proxy_adapter/commands/config_command.py,sha256=-Z6BGaEQTf859l56zZpHYBeZFeIVdpMYybDrd7LOPIg,3553
76
- mcp_proxy_adapter/commands/dependency_container.py,sha256=Uz9OPRAUZN7tsVrMVgXgPQcsRD2N-e2Ixg9XarPOlnY,3410
77
- mcp_proxy_adapter/commands/health_command.py,sha256=_tzxHwB_8vo53VBC6HnBv5fSfZL1pEuwlbrCcy_K78c,4087
78
- mcp_proxy_adapter/commands/help_command.py,sha256=f1DUJNCiVFyTHAi1ztcAo1TKYopmkJPNRYZsJTpTGvI,13769
79
- mcp_proxy_adapter/commands/result.py,sha256=2WjftiAuhlyzOKmPJlQHo_b08ZCzWoK7cquUHFLVE-E,5534
80
- mcp_proxy_adapter/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
81
- mcp_proxy_adapter/core/errors.py,sha256=s34OxiIR4NCJu_pYSigKXqrIvRjUUK2OWw0X4dpDjIA,5151
82
- mcp_proxy_adapter/core/logging.py,sha256=bvvT1ouSyyT1B9za506W-ASW4AoxYnyU_OeGgSgOFsQ,7102
83
- mcp_proxy_adapter/core/utils.py,sha256=WJZYNxOXLCPhTF0OH0bzMFYWW6SWwo6XaWG-S5za7u0,3249
84
- mcp_proxy_adapter/schemas/base_schema.json,sha256=v9G9cGMd4dRhCZsOQ_FMqOi5VFyVbI6Cf3fyIvOT9dc,2881
85
- mcp_proxy_adapter/schemas/openapi_schema.json,sha256=C3yLkwmDsvnLW9B5gnKKdBGl4zxkeU-rEmjTrNVsQU0,8405
86
- mcp_proxy_adapter/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
87
- mcp_proxy_adapter/tests/conftest.py,sha256=VBA2wLeYfp9XAGSq4c489PVBIqMGAJiQPrT0k3kyzXw,2999
88
- mcp_proxy_adapter/tests/test_api_endpoints.py,sha256=ePtWCf0szD1JeY9WdHAhcKnuOzoSCpUcqZ_2DVhlC-A,10280
89
- mcp_proxy_adapter/tests/test_api_handlers.py,sha256=LeHO0o6eCxan6mt_8ZkUwSbeY7qYfoYMJ-bT_sSgdxc,11011
90
- mcp_proxy_adapter/tests/test_base_command.py,sha256=nSIi_mfjux8TL--65pMBfyg91EiLjJhI2P_ASWqyW-U,3779
91
- mcp_proxy_adapter/tests/test_batch_requests.py,sha256=9-gvhPq48AcEwGlhwgn3DWNhpleLA0f4luZNYMrqlXY,4103
92
- mcp_proxy_adapter/tests/test_command_registry.py,sha256=o5HHxlQ-D2ML0ufJK-lXQv-qYWccvalOHGVvpc8QFTU,6285
93
- mcp_proxy_adapter/tests/test_config.py,sha256=i4YbFhB3WI1wWKCxkG6l-UpFv2LAbhh4hmGipmYG1d0,3928
94
- mcp_proxy_adapter/tests/test_utils.py,sha256=K8DqdWDAV-cXjjeykehHpG5phfq5ydu2HLJzaAL282Y,1653
95
- mcp_proxy_adapter/tests/api/__init__.py,sha256=QzjeBIhrRLqfUKYmxVSCbMOoni5MAXgyAx9HxxB6JRs,27
96
- mcp_proxy_adapter/tests/api/test_cmd_endpoint.py,sha256=RFg_N7Ut1l_pncUPMaqVg85XV4KTpVe03yI_VA0Z47o,3843
97
- mcp_proxy_adapter/tests/api/test_middleware.py,sha256=3Rgc09VJ7JG6_06oIgAVq6u7qJsaiuhW0KpfDjxk8Ac,12285
98
- mcp_proxy_adapter/tests/commands/__init__.py,sha256=DZxhtyr__AleyXN1s8Ef887tK5nsoHKfW4QXyzLaP0E,36
99
- mcp_proxy_adapter/tests/commands/test_config_command.py,sha256=ud0Y57xUhFiyrUKDyA0eBZ8IOKiGDpioijtwY-detC4,6522
100
- mcp_proxy_adapter/tests/commands/test_echo_command.py,sha256=c2dmqfx3ZfvDedy5vuxArFv7iHsReepMmD2Lchg4l3E,3437
101
- mcp_proxy_adapter/tests/commands/test_help_command.py,sha256=OJCZMS0BqUUNNSecipd3dOFokUATiET3gpCoVAxPXPA,4116
102
- mcp_proxy_adapter/tests/functional/__init__.py,sha256=muVNR6LD5o7DsDaLrbLTFsavUNcnyM608-mr-dqzgDU,59
103
- mcp_proxy_adapter/tests/functional/test_api.py,sha256=OaGB-WAWVyX4b0b-mCdXBNhwwYABYeBPO3IDnA3I00c,7114
104
- mcp_proxy_adapter/tests/integration/__init__.py,sha256=JZpeNG1PBRZ3k5zfq6NH3GyzDc1Yx1ZUgwi6eLBxs1o,60
105
- mcp_proxy_adapter/tests/integration/test_cmd_integration.py,sha256=OqBxh52WPijKaRrIHA54QDJQLBz_nwlCywF9k5jxa_Y,3430
106
- mcp_proxy_adapter/tests/integration/test_integration.py,sha256=Rf8GTxdZOvZzrtgqWN2fp-36qUU5rpHdV9zhN1JxNw8,6619
107
- mcp_proxy_adapter/tests/performance/__init__.py,sha256=2kHf6g4LmYnFuV4EALXzo7Qk9vHGA9DXZFt7nORRFjM,60
108
- mcp_proxy_adapter/tests/performance/test_performance.py,sha256=Djrnu-SsXRrc_Prj1Aw8OoPzPUwHJds-Itk3aX6o01w,5730
109
- mcp_proxy_adapter/tests/stubs/__init__.py,sha256=qJ_gqvLdt68rAfLOeJpjVcLWyWdhEg6RkKheyV2yjJs,178
110
- mcp_proxy_adapter/tests/stubs/echo_command.py,sha256=Y7SA4IB5Lo_ncn78SDm9iRZvJSKy2pXi2nBQjIUPrvg,2620
111
- mcp_proxy_adapter/tests/unit/__init__.py,sha256=RS-5UoSCcLKtr2jrAaZw_NG9MquA6BZmxq-P6cTw9ok,53
112
- mcp_proxy_adapter/tests/unit/test_base_command.py,sha256=ldDXQYk2eijbTgZioSBAhHzSAa_SuBKYqCutCEzUYTE,3924
113
- mcp_proxy_adapter/tests/unit/test_config.py,sha256=SZ62LXFOv_fsV0fmSIBdHWvapEyexKrioFRQo0I4pkg,5900
114
- mcp_proxy_adapter-3.1.5.dist-info/licenses/LICENSE,sha256=OkApFEwdgMCt_mbvUI-eIwKMSTe38K3XnU2DT5ub-wI,1072
115
- mcp_proxy_adapter-3.1.5.dist-info/METADATA,sha256=9qjNRrAc0HgwtNMl3q-I0ZzyBiOsapDMIJZN3SJTcOo,7537
116
- mcp_proxy_adapter-3.1.5.dist-info/WHEEL,sha256=DnLRTWE75wApRYVsjgc6wsVswC54sMSJhAEd4xhDpBk,91
117
- mcp_proxy_adapter-3.1.5.dist-info/top_level.txt,sha256=kxq3OC7vBtsFdy9dDVse4cOl-SV_QlvcTeSkuw_jw3I,27
118
- mcp_proxy_adapter-3.1.5.dist-info/RECORD,,