mcp-proxy-adapter 2.1.2__py3-none-any.whl → 2.1.4__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.
- {examples → mcp_proxy_adapter/examples}/openapi_server.py +35 -7
- {mcp_proxy_adapter-2.1.2.dist-info → mcp_proxy_adapter-2.1.4.dist-info}/METADATA +98 -2
- mcp_proxy_adapter-2.1.4.dist-info/RECORD +28 -0
- mcp_proxy_adapter-2.1.4.dist-info/top_level.txt +1 -0
- docs/README.md +0 -172
- docs/README_ru.md +0 -172
- docs/architecture.md +0 -251
- docs/architecture_ru.md +0 -343
- docs/command_development.md +0 -250
- docs/command_development_ru.md +0 -593
- docs/deployment.md +0 -251
- docs/deployment_ru.md +0 -1298
- docs/examples.md +0 -254
- docs/examples_ru.md +0 -401
- docs/mcp_proxy_adapter.md +0 -251
- docs/mcp_proxy_adapter_ru.md +0 -405
- docs/quickstart.md +0 -251
- docs/quickstart_ru.md +0 -397
- docs/testing.md +0 -255
- docs/testing_ru.md +0 -469
- docs/validation_ru.md +0 -287
- examples/mcp_proxy_config.json +0 -175
- mcp_proxy_adapter-2.1.2.dist-info/RECORD +0 -61
- mcp_proxy_adapter-2.1.2.dist-info/top_level.txt +0 -5
- scripts/code_analyzer/code_analyzer.py +0 -328
- scripts/code_analyzer/register_commands.py +0 -446
- scripts/publish.py +0 -85
- tests/conftest.py +0 -12
- tests/test_adapter.py +0 -529
- tests/test_adapter_coverage.py +0 -274
- tests/test_basic_dispatcher.py +0 -169
- tests/test_command_registry.py +0 -328
- tests/test_examples.py +0 -32
- tests/test_mcp_proxy_adapter.py +0 -568
- tests/test_mcp_proxy_adapter_basic.py +0 -262
- tests/test_part1.py +0 -348
- tests/test_part2.py +0 -524
- tests/test_schema.py +0 -358
- tests/test_simple_adapter.py +0 -251
- {examples → mcp_proxy_adapter/examples}/analyze_config.py +0 -0
- {examples → mcp_proxy_adapter/examples}/basic_integration.py +0 -0
- {examples → mcp_proxy_adapter/examples}/docstring_and_schema_example.py +0 -0
- {examples → mcp_proxy_adapter/examples}/extension_example.py +0 -0
- {examples → mcp_proxy_adapter/examples}/help_best_practices.py +0 -0
- {examples → mcp_proxy_adapter/examples}/help_usage.py +0 -0
- {examples → mcp_proxy_adapter/examples}/mcp_proxy_client.py +0 -0
- {examples → mcp_proxy_adapter/examples}/project_structure_example.py +0 -0
- {examples → mcp_proxy_adapter/examples}/testing_example.py +0 -0
- {mcp_proxy_adapter-2.1.2.dist-info → mcp_proxy_adapter-2.1.4.dist-info}/WHEEL +0 -0
- {mcp_proxy_adapter-2.1.2.dist-info → mcp_proxy_adapter-2.1.4.dist-info}/licenses/LICENSE +0 -0
docs/validation_ru.md
DELETED
@@ -1,287 +0,0 @@
|
|
1
|
-
# Валидация команд и обработка ошибок
|
2
|
-
|
3
|
-
В этом документе описаны процессы валидации команд в Command Registry и способы обработки ошибок.
|
4
|
-
|
5
|
-
## Содержание
|
6
|
-
|
7
|
-
- [Процесс валидации](#процесс-валидации)
|
8
|
-
- [Типы валидаторов](#типы-валидаторов)
|
9
|
-
- [Режимы работы](#режимы-работы)
|
10
|
-
- [Типы ошибок](#типы-ошибок)
|
11
|
-
- [Обработка ошибок](#обработка-ошибок)
|
12
|
-
- [Автоматическое исправление](#автоматическое-исправление)
|
13
|
-
|
14
|
-
## Процесс валидации
|
15
|
-
|
16
|
-
Валидация команд выполняется перед их регистрацией в диспетчере. Процесс включает следующие шаги:
|
17
|
-
|
18
|
-
1. **Анализ исходного кода**: извлечение метаданных из докстрингов и аннотаций типов
|
19
|
-
2. **Проверка соответствия**: сравнение метаданных с формальными параметрами функции
|
20
|
-
3. **Принятие решения**: регистрация команды или вывод ошибок в зависимости от режима работы
|
21
|
-
|
22
|
-
```python
|
23
|
-
# Основной процесс валидации в методе register_command
|
24
|
-
def register_command(self, command_name: str, handler: Callable) -> bool:
|
25
|
-
# Анализ обработчика
|
26
|
-
metadata = self.analyze_handler(command_name, handler)
|
27
|
-
|
28
|
-
# Валидация метаданных
|
29
|
-
is_valid, errors = self.validate_handler(command_name, handler, metadata)
|
30
|
-
|
31
|
-
# Вывод ошибок, если они есть
|
32
|
-
if not is_valid:
|
33
|
-
for error in errors:
|
34
|
-
logger.error(f"{command_name}: {error}")
|
35
|
-
|
36
|
-
# В строгом режиме прерываем регистрацию
|
37
|
-
if self.strict and not self.auto_fix:
|
38
|
-
return False
|
39
|
-
|
40
|
-
# Регистрация команды
|
41
|
-
self.dispatcher.register_handler(
|
42
|
-
command=command_name,
|
43
|
-
handler=handler,
|
44
|
-
description=metadata["description"],
|
45
|
-
summary=metadata["summary"],
|
46
|
-
params=metadata["parameters"]
|
47
|
-
)
|
48
|
-
|
49
|
-
return True
|
50
|
-
```
|
51
|
-
|
52
|
-
## Типы валидаторов
|
53
|
-
|
54
|
-
Command Registry включает несколько типов валидаторов для разных аспектов проверки:
|
55
|
-
|
56
|
-
### 1. DocstringValidator
|
57
|
-
|
58
|
-
Проверяет соответствие докстрингов формальным параметрам функции:
|
59
|
-
|
60
|
-
- Наличие описания функции
|
61
|
-
- Описание всех параметров в секции Args
|
62
|
-
- Наличие секции Returns
|
63
|
-
- Соответствие имен параметров в докстринге и сигнатуре функции
|
64
|
-
|
65
|
-
```python
|
66
|
-
class DocstringValidator:
|
67
|
-
def validate(self, handler: Callable, command_name: str, metadata: Dict[str, Any]) -> Tuple[bool, List[str]]:
|
68
|
-
errors = []
|
69
|
-
|
70
|
-
# Получаем формальные параметры функции
|
71
|
-
sig = inspect.signature(handler)
|
72
|
-
formal_params = list(sig.parameters.keys())
|
73
|
-
|
74
|
-
# Парсим докстринг
|
75
|
-
docstring = handler.__doc__ or ""
|
76
|
-
parsed_doc = docstring_parser.parse(docstring)
|
77
|
-
|
78
|
-
# Проверяем наличие описания функции
|
79
|
-
if not parsed_doc.short_description and not parsed_doc.long_description:
|
80
|
-
errors.append(f"Отсутствует описание функции")
|
81
|
-
|
82
|
-
# Получаем параметры из докстринга
|
83
|
-
doc_params = {param.arg_name: param for param in parsed_doc.params}
|
84
|
-
|
85
|
-
# Проверяем, что все формальные параметры описаны в докстринге
|
86
|
-
for param in formal_params:
|
87
|
-
if param not in doc_params and param != 'params':
|
88
|
-
errors.append(f"Параметр '{param}' не описан в докстринге функции")
|
89
|
-
|
90
|
-
# Проверяем наличие returns в докстринге
|
91
|
-
if not parsed_doc.returns:
|
92
|
-
errors.append(f"Отсутствует описание возвращаемого значения в докстринге функции")
|
93
|
-
|
94
|
-
return len(errors) == 0, errors
|
95
|
-
```
|
96
|
-
|
97
|
-
### 2. MetadataValidator
|
98
|
-
|
99
|
-
Проверяет соответствие метаданных команды её сигнатуре:
|
100
|
-
|
101
|
-
- Наличие всех обязательных параметров в метаданных
|
102
|
-
- Соответствие типов параметров в метаданных и аннотациях
|
103
|
-
- Отсутствие лишних параметров в метаданных
|
104
|
-
|
105
|
-
```python
|
106
|
-
class MetadataValidator:
|
107
|
-
def validate(self, handler: Callable, command_name: str, metadata: Dict[str, Any]) -> Tuple[bool, List[str]]:
|
108
|
-
errors = []
|
109
|
-
|
110
|
-
# Получаем формальные параметры функции
|
111
|
-
sig = inspect.signature(handler)
|
112
|
-
|
113
|
-
# Проверяем соответствие метаданных и формальных параметров
|
114
|
-
if "parameters" in metadata:
|
115
|
-
for param_name, param_info in metadata["parameters"].items():
|
116
|
-
# Проверяем наличие параметра в сигнатуре функции
|
117
|
-
if param_name not in sig.parameters:
|
118
|
-
errors.append(f"Параметр '{param_name}' указан в метаданных, но отсутствует в сигнатуре функции")
|
119
|
-
|
120
|
-
# Проверяем, что все обязательные параметры указаны в метаданных
|
121
|
-
for param_name, param in sig.parameters.items():
|
122
|
-
if param.default == inspect.Parameter.empty and param_name != 'self':
|
123
|
-
if param_name not in metadata["parameters"]:
|
124
|
-
errors.append(f"Обязательный параметр '{param_name}' не указан в метаданных")
|
125
|
-
|
126
|
-
return len(errors) == 0, errors
|
127
|
-
```
|
128
|
-
|
129
|
-
## Режимы работы
|
130
|
-
|
131
|
-
Command Registry поддерживает несколько режимов валидации, которые определяют поведение при обнаружении ошибок:
|
132
|
-
|
133
|
-
### 1. Строгий режим (strict=True)
|
134
|
-
|
135
|
-
В строгом режиме система отказывается регистрировать команды с ошибками в документации:
|
136
|
-
|
137
|
-
- При обнаружении любой ошибки в документации команда не регистрируется
|
138
|
-
- Выводятся подробные сообщения об ошибках для каждой команды
|
139
|
-
- Рекомендуется использовать в CI/CD и продакшене для обеспечения качества кода
|
140
|
-
|
141
|
-
```python
|
142
|
-
# Пример использования строгого режима
|
143
|
-
registry = CommandRegistry(strict=True, auto_fix=False)
|
144
|
-
registry.register_all_commands() # Команды с ошибками не будут зарегистрированы
|
145
|
-
```
|
146
|
-
|
147
|
-
### 2. Нестрогий режим (strict=False)
|
148
|
-
|
149
|
-
В нестрогом режиме система регистрирует все команды, даже с ошибками:
|
150
|
-
|
151
|
-
- При обнаружении ошибок выводятся предупреждения, но команда регистрируется
|
152
|
-
- Может привести к неточностям в документации API
|
153
|
-
- Полезен для быстрого прототипирования и отладки
|
154
|
-
|
155
|
-
```python
|
156
|
-
# Пример использования нестрогого режима
|
157
|
-
registry = CommandRegistry(strict=False, auto_fix=False)
|
158
|
-
registry.register_all_commands() # Все команды будут зарегистрированы
|
159
|
-
```
|
160
|
-
|
161
|
-
### 3. Режим автоисправления (auto_fix=True)
|
162
|
-
|
163
|
-
В режиме автоисправления система пытается автоматически исправить ошибки:
|
164
|
-
|
165
|
-
- Недостающие метаданные извлекаются из аннотаций типов
|
166
|
-
- Улучшается документация на основе имеющейся информации
|
167
|
-
- Полезен при разработке, когда документация еще не полностью оформлена
|
168
|
-
|
169
|
-
```python
|
170
|
-
# Пример использования режима автоисправления
|
171
|
-
registry = CommandRegistry(strict=True, auto_fix=True)
|
172
|
-
registry.register_all_commands() # Система попытается исправить ошибки
|
173
|
-
```
|
174
|
-
|
175
|
-
## Типы ошибок
|
176
|
-
|
177
|
-
Валидаторы могут обнаруживать различные типы ошибок:
|
178
|
-
|
179
|
-
### 1. Ошибки докстрингов
|
180
|
-
|
181
|
-
- **Отсутствие описания функции**: докстринг пуст или содержит только код
|
182
|
-
- **Отсутствие описания параметра**: параметр функции не описан в докстринге
|
183
|
-
- **Отсутствие описания возвращаемого значения**: нет секции Returns
|
184
|
-
- **Лишние параметры в докстринге**: в докстринге описаны параметры, которых нет в функции
|
185
|
-
|
186
|
-
### 2. Ошибки метаданных
|
187
|
-
|
188
|
-
- **Несоответствие типов**: тип в метаданных не соответствует аннотации типа
|
189
|
-
- **Отсутствие обязательного параметра**: обязательный параметр не описан в метаданных
|
190
|
-
- **Лишние параметры в метаданных**: в метаданных указаны параметры, которых нет в функции
|
191
|
-
- **Некорректное описание**: отсутствует или неполное описание команды или параметра
|
192
|
-
|
193
|
-
### 3. Ошибки аннотаций типов
|
194
|
-
|
195
|
-
- **Отсутствие аннотации типа**: параметр не имеет аннотации типа
|
196
|
-
- **Отсутствие аннотации возвращаемого значения**: функция не имеет аннотации возвращаемого значения
|
197
|
-
- **Несоответствие типов в аннотациях и метаданных**: тип в аннотации не соответствует типу в метаданных
|
198
|
-
|
199
|
-
## Обработка ошибок
|
200
|
-
|
201
|
-
При обнаружении ошибок Command Registry предоставляет подробную информацию для их исправления:
|
202
|
-
|
203
|
-
```
|
204
|
-
🚫 Ошибки в команде 'search_by_vector':
|
205
|
-
- Параметр 'top_k' не описан в докстринге функции
|
206
|
-
- Отсутствует описание возвращаемого значения в докстринге функции
|
207
|
-
- Обязательный параметр 'vector' не указан в метаданных команды
|
208
|
-
```
|
209
|
-
|
210
|
-
В зависимости от режима работы, система может:
|
211
|
-
|
212
|
-
1. **Отказаться регистрировать команду** (strict=True, auto_fix=False)
|
213
|
-
2. **Зарегистрировать команду с предупреждениями** (strict=False)
|
214
|
-
3. **Попытаться исправить ошибки автоматически** (auto_fix=True)
|
215
|
-
|
216
|
-
### Рекомендуемый подход к обработке ошибок
|
217
|
-
|
218
|
-
1. **В разработке**:
|
219
|
-
- Использовать auto_fix=True для автоматического исправления ошибок
|
220
|
-
- Регулярно запускать валидацию в строгом режиме для выявления проблем
|
221
|
-
|
222
|
-
2. **В CI/CD**:
|
223
|
-
- Использовать strict=True для блокирования PR с ошибками в документации
|
224
|
-
- Добавить проверку валидации команд в процесс тестирования
|
225
|
-
|
226
|
-
3. **В продакшене**:
|
227
|
-
- Всегда использовать strict=True для гарантии качества документации
|
228
|
-
- Никогда не использовать auto_fix=True в продакшен-среде
|
229
|
-
|
230
|
-
## Автоматическое исправление
|
231
|
-
|
232
|
-
Когда включен режим auto_fix=True, система пытается исправить ошибки автоматически:
|
233
|
-
|
234
|
-
### 1. Дополнение метаданных
|
235
|
-
|
236
|
-
Если метаданные неполные, система дополняет их на основе:
|
237
|
-
|
238
|
-
- Аннотаций типов для определения типов параметров
|
239
|
-
- Сигнатуры функции для определения обязательных параметров
|
240
|
-
- Значений по умолчанию для определения default значений
|
241
|
-
|
242
|
-
```python
|
243
|
-
# Дополнение метаданных на основе аннотаций типов
|
244
|
-
type_hints = get_type_hints(handler)
|
245
|
-
for param_name, param_type in type_hints.items():
|
246
|
-
if param_name == 'return':
|
247
|
-
continue
|
248
|
-
|
249
|
-
if param_name not in metadata["parameters"]:
|
250
|
-
metadata["parameters"][param_name] = {
|
251
|
-
"type": map_type_to_openapi(param_type),
|
252
|
-
"description": f"Параметр {param_name}",
|
253
|
-
"required": param_name in required_params
|
254
|
-
}
|
255
|
-
```
|
256
|
-
|
257
|
-
### 2. Извлечение описаний из докстрингов
|
258
|
-
|
259
|
-
Если докстринги есть, но метаданные неполные, система извлекает описания из докстрингов:
|
260
|
-
|
261
|
-
```python
|
262
|
-
# Извлечение описаний из докстрингов
|
263
|
-
parsed_doc = docstring_parser.parse(handler.__doc__ or "")
|
264
|
-
for param in parsed_doc.params:
|
265
|
-
param_name = param.arg_name
|
266
|
-
if param_name in metadata["parameters"]:
|
267
|
-
metadata["parameters"][param_name]["description"] = param.description
|
268
|
-
```
|
269
|
-
|
270
|
-
### 3. Генерация базовых описаний
|
271
|
-
|
272
|
-
Если описания отсутствуют, система генерирует базовые описания:
|
273
|
-
|
274
|
-
```python
|
275
|
-
# Генерация базовых описаний
|
276
|
-
if not metadata.get("description"):
|
277
|
-
metadata["description"] = f"Команда {command_name}"
|
278
|
-
|
279
|
-
if not metadata.get("summary"):
|
280
|
-
metadata["summary"] = command_name.replace("_", " ").title()
|
281
|
-
```
|
282
|
-
|
283
|
-
## Заключение
|
284
|
-
|
285
|
-
Система валидации Command Registry помогает обеспечить высокое качество документации API за счет строгой проверки соответствия докстрингов, метаданных и сигнатур функций.
|
286
|
-
|
287
|
-
Рекомендуется использовать строгий режим валидации (strict=True) для гарантии качества документации, особенно в процессе CI/CD и в продакшен-среде. Режим автоисправления (auto_fix=True) полезен на ранних этапах разработки, когда документация еще не полностью оформлена.
|
examples/mcp_proxy_config.json
DELETED
@@ -1,175 +0,0 @@
|
|
1
|
-
{
|
2
|
-
"version": "1.0",
|
3
|
-
"tools": [
|
4
|
-
{
|
5
|
-
"name": "mcp_get_items",
|
6
|
-
"description": "Get list of all items",
|
7
|
-
"parameters": {
|
8
|
-
"type": "object",
|
9
|
-
"properties": {},
|
10
|
-
"required": []
|
11
|
-
}
|
12
|
-
},
|
13
|
-
{
|
14
|
-
"name": "mcp_get_item",
|
15
|
-
"description": "Get item by ID",
|
16
|
-
"parameters": {
|
17
|
-
"type": "object",
|
18
|
-
"properties": {
|
19
|
-
"item_id": {
|
20
|
-
"type": "integer",
|
21
|
-
"description": "Item ID to search for"
|
22
|
-
}
|
23
|
-
},
|
24
|
-
"required": [
|
25
|
-
"item_id"
|
26
|
-
]
|
27
|
-
}
|
28
|
-
},
|
29
|
-
{
|
30
|
-
"name": "mcp_create_item",
|
31
|
-
"description": "Create new item",
|
32
|
-
"parameters": {
|
33
|
-
"type": "object",
|
34
|
-
"properties": {
|
35
|
-
"item": {
|
36
|
-
"type": "object",
|
37
|
-
"description": "Item data"
|
38
|
-
}
|
39
|
-
},
|
40
|
-
"required": [
|
41
|
-
"item"
|
42
|
-
]
|
43
|
-
}
|
44
|
-
},
|
45
|
-
{
|
46
|
-
"name": "mcp_update_item",
|
47
|
-
"description": "Update item by ID",
|
48
|
-
"parameters": {
|
49
|
-
"type": "object",
|
50
|
-
"properties": {
|
51
|
-
"item_id": {
|
52
|
-
"type": "integer",
|
53
|
-
"description": "Item ID to update"
|
54
|
-
},
|
55
|
-
"updated_data": {
|
56
|
-
"type": "object",
|
57
|
-
"description": "Updated data"
|
58
|
-
}
|
59
|
-
},
|
60
|
-
"required": [
|
61
|
-
"item_id",
|
62
|
-
"updated_data"
|
63
|
-
]
|
64
|
-
}
|
65
|
-
},
|
66
|
-
{
|
67
|
-
"name": "mcp_delete_item",
|
68
|
-
"description": "Delete item by ID",
|
69
|
-
"parameters": {
|
70
|
-
"type": "object",
|
71
|
-
"properties": {
|
72
|
-
"item_id": {
|
73
|
-
"type": "integer",
|
74
|
-
"description": "Item ID to delete"
|
75
|
-
}
|
76
|
-
},
|
77
|
-
"required": [
|
78
|
-
"item_id"
|
79
|
-
]
|
80
|
-
}
|
81
|
-
},
|
82
|
-
{
|
83
|
-
"name": "mcp_search_items",
|
84
|
-
"description": "Search items by keyword",
|
85
|
-
"parameters": {
|
86
|
-
"type": "object",
|
87
|
-
"properties": {
|
88
|
-
"keyword": {
|
89
|
-
"type": "string",
|
90
|
-
"description": "Search keyword"
|
91
|
-
}
|
92
|
-
},
|
93
|
-
"required": [
|
94
|
-
"keyword"
|
95
|
-
]
|
96
|
-
}
|
97
|
-
},
|
98
|
-
{
|
99
|
-
"name": "mcp_execute",
|
100
|
-
"description": "Universal command for executing queries",
|
101
|
-
"parameters": {
|
102
|
-
"type": "object",
|
103
|
-
"properties": {
|
104
|
-
"query": {
|
105
|
-
"type": "string",
|
106
|
-
"description": "Query to execute"
|
107
|
-
},
|
108
|
-
"subcommand": {
|
109
|
-
"type": "string",
|
110
|
-
"description": "Subcommand to execute"
|
111
|
-
}
|
112
|
-
},
|
113
|
-
"required": []
|
114
|
-
}
|
115
|
-
}
|
116
|
-
],
|
117
|
-
"routes": [
|
118
|
-
{
|
119
|
-
"tool_name": "mcp_get_items",
|
120
|
-
"endpoint": "/cmd",
|
121
|
-
"method": "post",
|
122
|
-
"json_rpc": {
|
123
|
-
"method": "get_items"
|
124
|
-
}
|
125
|
-
},
|
126
|
-
{
|
127
|
-
"tool_name": "mcp_get_item",
|
128
|
-
"endpoint": "/cmd",
|
129
|
-
"method": "post",
|
130
|
-
"json_rpc": {
|
131
|
-
"method": "get_item"
|
132
|
-
}
|
133
|
-
},
|
134
|
-
{
|
135
|
-
"tool_name": "mcp_create_item",
|
136
|
-
"endpoint": "/cmd",
|
137
|
-
"method": "post",
|
138
|
-
"json_rpc": {
|
139
|
-
"method": "create_item"
|
140
|
-
}
|
141
|
-
},
|
142
|
-
{
|
143
|
-
"tool_name": "mcp_update_item",
|
144
|
-
"endpoint": "/cmd",
|
145
|
-
"method": "post",
|
146
|
-
"json_rpc": {
|
147
|
-
"method": "update_item"
|
148
|
-
}
|
149
|
-
},
|
150
|
-
{
|
151
|
-
"tool_name": "mcp_delete_item",
|
152
|
-
"endpoint": "/cmd",
|
153
|
-
"method": "post",
|
154
|
-
"json_rpc": {
|
155
|
-
"method": "delete_item"
|
156
|
-
}
|
157
|
-
},
|
158
|
-
{
|
159
|
-
"tool_name": "mcp_search_items",
|
160
|
-
"endpoint": "/cmd",
|
161
|
-
"method": "post",
|
162
|
-
"json_rpc": {
|
163
|
-
"method": "search_items"
|
164
|
-
}
|
165
|
-
},
|
166
|
-
{
|
167
|
-
"tool_name": "mcp_execute",
|
168
|
-
"endpoint": "/cmd",
|
169
|
-
"method": "post",
|
170
|
-
"json_rpc": {
|
171
|
-
"method": "execute"
|
172
|
-
}
|
173
|
-
}
|
174
|
-
]
|
175
|
-
}
|
@@ -1,61 +0,0 @@
|
|
1
|
-
docs/README.md,sha256=XpZqqKcf7GZ_uqtaadmIZc4dE9oyKv7biKj41kDtQo4,4633
|
2
|
-
docs/README_ru.md,sha256=Ln8oDVOurhBVurQaEFDweVvq_bZZbdFSSTvWTrpBgMs,6326
|
3
|
-
docs/architecture.md,sha256=wF5-RMQI-QssY4jA2lSKjjq6iHunda-n2PqI5ELAj84,10430
|
4
|
-
docs/architecture_ru.md,sha256=Ato3CoAmhNBukMO6uje12e5-OlpDYVrwGIcN1CKqTsw,15529
|
5
|
-
docs/command_development.md,sha256=-CKfEtLO-4tB2WKZNbIT1Ao4juiKFBcKS7As4_1ja74,6645
|
6
|
-
docs/command_development_ru.md,sha256=kzvYpnEfsXfZxZY1wswwDChzBtMtEY9l74M7XkWxtHk,19968
|
7
|
-
docs/deployment.md,sha256=eOOCq8V6Gz_SDo9hReXKXXNtaS8WmrxR-KXjJjUE1pw,4988
|
8
|
-
docs/deployment_ru.md,sha256=0eNxKqiqc-sIht4brdZVEcxZkbrUP4y95PhfpD_0Qyg,40107
|
9
|
-
docs/examples.md,sha256=85kfd73rgqJ2DUD3PrRfjViCXgv5bM_9Uqizm_ET7NE,6348
|
10
|
-
docs/examples_ru.md,sha256=mxQqwKXMX6OcY6tyfuRgmYqAQXYnrzTGOJS_u5ECUcs,11866
|
11
|
-
docs/mcp_proxy_adapter.md,sha256=Y-dcFKwYbYJe5_zDrvlDPuSz-S1czL7Gh848EzclS7k,8210
|
12
|
-
docs/mcp_proxy_adapter_ru.md,sha256=aJ1KAyoyzcRPSn7YGralpUGO-zmUQMtDKoQ2zrOUVTc,17489
|
13
|
-
docs/quickstart.md,sha256=YH0KspJcbe59ynpRf9kne-QsLGcUo4kKtNiEZ48nrus,5419
|
14
|
-
docs/quickstart_ru.md,sha256=biipkQ4_XGVzqxLeGptzfWxyr6J9TN1ggdhCf2pDWKA,11884
|
15
|
-
docs/testing.md,sha256=Z1hdqairo14QMoPxeBX1_YAbbS3Uedy4uaxfvu8aG5k,7572
|
16
|
-
docs/testing_ru.md,sha256=z2-zGIXuFx8GpLYwydP9Oe3N8l_zVzheLBYvxgI-f6k,18219
|
17
|
-
docs/validation_ru.md,sha256=iYtM3ZoFGe3_EaCG0738LkGJ5FPayrEr2z_KPhNcs0Q,15886
|
18
|
-
examples/analyze_config.py,sha256=vog7TNHDw5ZoYhQLbAvZvEoufmQwH54KJzQBJrSq5w4,4283
|
19
|
-
examples/basic_integration.py,sha256=w_oA777YiQt36gzI113KPQ6k45caXbMCqW9hD8sy8zo,4657
|
20
|
-
examples/docstring_and_schema_example.py,sha256=c96L4KF_7yWzffmvd4hyeQuXSdYyYkv7Uvuy0QxgMcQ,1929
|
21
|
-
examples/extension_example.py,sha256=vnatnFdNTapMpPcQ79Ugitk92ZiUfpLTs7Dvsodf1og,2277
|
22
|
-
examples/help_best_practices.py,sha256=wUtZRnAktnpfAc9vAvqSxUquHEr5ewaPDPyc6BoCqdQ,2637
|
23
|
-
examples/help_usage.py,sha256=UOd3HJeYlQpQkAyceGNm66jXX_h-T05pjIGD-b7-Pfg,2568
|
24
|
-
examples/mcp_proxy_client.py,sha256=z4IzFlGigVTQSb8TpcrQ_a0migsmC58LnNwc8wZmTfw,3811
|
25
|
-
examples/mcp_proxy_config.json,sha256=39aeV7NNEZstX9RAOdsr5tUZnvCuo7bR38Xc1sGGCJI,3655
|
26
|
-
examples/openapi_server.py,sha256=hueoG9KcimOc4W27euWksMYjjG8Jz-li9hEKi3ZCDBk,12515
|
27
|
-
examples/project_structure_example.py,sha256=sswTo6FZb1F5juHa0FYG3cgvrh3wfgGfJu2bBy5tCm4,1460
|
28
|
-
examples/testing_example.py,sha256=AB13c4C1bjs1145O-yriwyreeVXtMOlQLzs2BCGmprk,1719
|
29
|
-
mcp_proxy_adapter/__init__.py,sha256=_6D-TfANWp9zc550M5LUeGPvioFqG1bAl3tZj-gNmJU,463
|
30
|
-
mcp_proxy_adapter/adapter.py,sha256=76dkVeDuqLsJ5AhuftzLlwy2M6yr_PfNbmNfo9dXVhc,28844
|
31
|
-
mcp_proxy_adapter/models.py,sha256=acqVQBYAojHXeJ1MJyvpMyT6-J6aMxWuZMszn_-RsOU,2338
|
32
|
-
mcp_proxy_adapter/registry.py,sha256=jgC4TKaPbMbAsoxvGp2ToaOE4drD-VfZug7WJbm4IW4,15853
|
33
|
-
mcp_proxy_adapter/schema.py,sha256=HZM0TTQTSi8ha1TEeVevdCyGZOUPoT1soB7Nex0hV50,10947
|
34
|
-
mcp_proxy_adapter/analyzers/__init__.py,sha256=2rcYZDP-bXq078MQpxP32lAwYYyRhOwAQGBcefBfBzY,368
|
35
|
-
mcp_proxy_adapter/analyzers/docstring_analyzer.py,sha256=T3FLJEo_uChShfiEKRl8GpVoHvh5HiudZkxnj4KixfA,7541
|
36
|
-
mcp_proxy_adapter/analyzers/type_analyzer.py,sha256=6Wac7osKwF03waFSwQ8ZM0Wqn_zAP2D-I4WMEpR0hQM,5230
|
37
|
-
mcp_proxy_adapter/dispatchers/__init__.py,sha256=FWgimgInGphIjCEnvA3-ZExiapUzYAVis2H9C5IWivU,365
|
38
|
-
mcp_proxy_adapter/dispatchers/base_dispatcher.py,sha256=S5_Xri058jAmOWeit1tedB_GMZQ9RLcNcYabA83ZF6k,2288
|
39
|
-
mcp_proxy_adapter/dispatchers/json_rpc_dispatcher.py,sha256=ffu1M32E1AdC7IB44mlbV2L56eJQMsp-7fYi_r4rmHc,6331
|
40
|
-
mcp_proxy_adapter/validators/docstring_validator.py,sha256=Onpq2iNJ1qF4ejkJJIlBkLROuSNIVALHVmXIgkCpaFI,2934
|
41
|
-
mcp_proxy_adapter/validators/metadata_validator.py,sha256=uCrn38-VYYn89l6f5CC_GoTAHAweaOW2Z6Esro1rtGw,3155
|
42
|
-
mcp_proxy_adapter-2.1.2.dist-info/licenses/LICENSE,sha256=OkApFEwdgMCt_mbvUI-eIwKMSTe38K3XnU2DT5ub-wI,1072
|
43
|
-
scripts/publish.py,sha256=MMKksSAzWoZOlxxHOm9-o6juEJYj5AMS4OG5pDIeChw,2627
|
44
|
-
scripts/code_analyzer/code_analyzer.py,sha256=FmWctoxttImvIPJoyNMLyUt7pEg3mQihqt6T9vMBKVQ,12766
|
45
|
-
scripts/code_analyzer/register_commands.py,sha256=GpQxdFsA0BWHONZpDjl18zkoqlbV6pmkabLMwIR_1JE,20545
|
46
|
-
tests/conftest.py,sha256=gkusSolrEp6-AHLjMKDUVxEcmfboa2P5SbeyiMugP-E,495
|
47
|
-
tests/test_adapter.py,sha256=ohLX1wGFmHnv5DXJx2segjT2EEg9-3ZU9FKwS74D7KI,18247
|
48
|
-
tests/test_adapter_coverage.py,sha256=k5oCvT9EQy_8JYam4Os88Npnn-Hgr0pm_ChHyRwk4Vc,8813
|
49
|
-
tests/test_basic_dispatcher.py,sha256=wB30AM3UPI_EklAMrGIwQHDTqbfY80I5spi6arpdxCc,5472
|
50
|
-
tests/test_command_registry.py,sha256=Ze4qwi2fV-EOuJ0su2l-jclLRCB9ZdZNUY54GFtde9E,12000
|
51
|
-
tests/test_examples.py,sha256=dYiRgV3Z74MiOJq4I1soPE4xmJNSM8L-IqxdV4vXCWI,1615
|
52
|
-
tests/test_mcp_proxy_adapter.py,sha256=WDYkLpz9Kd4OW0XbfhSanmhca7m7DIGZNC1L6CAoNpA,24890
|
53
|
-
tests/test_mcp_proxy_adapter_basic.py,sha256=gKIcqYzZVEdJcp3PKKJPKNxtJ05l80Wj4ig1Vd2dagM,10624
|
54
|
-
tests/test_part1.py,sha256=gb7lQ-lKjqYMMLGMt_7aSuScXSqy80tP8vBq2TBSiTs,14191
|
55
|
-
tests/test_part2.py,sha256=842aTEHCwqS6UBs3sE0DRbXRdeiZ8n0w4rJTAWschnY,18220
|
56
|
-
tests/test_schema.py,sha256=-X_323kncA0l3o1GKIKYf9OjhIj1hOJBPCH71682pk8,13704
|
57
|
-
tests/test_simple_adapter.py,sha256=IFLbVphiRMl1w5LoT1AihYOt0b66GNnt8uDafwokVCI,8374
|
58
|
-
mcp_proxy_adapter-2.1.2.dist-info/METADATA,sha256=RWCuMTdFD78eQjOZ_r33iBT8ChwqBJcKu_0T4MDQr6E,8150
|
59
|
-
mcp_proxy_adapter-2.1.2.dist-info/WHEEL,sha256=wXxTzcEDnjrTwFYjLPcsW_7_XihufBwmpiBeiXNBGEA,91
|
60
|
-
mcp_proxy_adapter-2.1.2.dist-info/top_level.txt,sha256=FkpPEr9rFZcEWxGfy6kRIUkCiLMxHpTD3--73ThTnPo,46
|
61
|
-
mcp_proxy_adapter-2.1.2.dist-info/RECORD,,
|