mcp-proxy-adapter 2.1.16__py3-none-any.whl → 2.1.17__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.
@@ -236,7 +236,7 @@ class MCPProxyAdapter:
236
236
  # Execute the command
237
237
  logger.debug(f"Executing command {request.method} with parameters {request.params}")
238
238
  try:
239
- result = self.registry.dispatcher.execute(
239
+ result = await self.registry.dispatcher.execute(
240
240
  request.method,
241
241
  **request.params
242
242
  )
@@ -537,7 +537,7 @@ class MCPProxyAdapter:
537
537
 
538
538
  # Execute the command
539
539
  try:
540
- result = self.registry.dispatcher.execute(command, **params)
540
+ result = await self.registry.dispatcher.execute(command, **params)
541
541
 
542
542
  # Return result in MCP Proxy format
543
543
  return {"result": result}
@@ -141,7 +141,22 @@ class JsonRpcDispatcher(BaseDispatcher):
141
141
  async def _return_sync():
142
142
  return result
143
143
  return await _return_sync()
144
- except Exception as e:
144
+ except TypeError as e:
145
+ # Попробовать вызвать handler(params=kwargs), если ошибка связана с лишними именованными аргументами
146
+ if (len(params) == 1 and 'params' in params):
147
+ try:
148
+ if inspect.iscoroutinefunction(handler):
149
+ result = handler(params=kwargs)
150
+ else:
151
+ result = loop.run_in_executor(None, lambda: handler(params=kwargs))
152
+ if inspect.isawaitable(result):
153
+ return await result
154
+ else:
155
+ async def _return_sync():
156
+ return result
157
+ return await _return_sync()
158
+ except Exception:
159
+ pass
145
160
  raise e
146
161
 
147
162
  async def execute(self, command: str, **kwargs) -> Any:
@@ -204,7 +219,20 @@ class JsonRpcDispatcher(BaseDispatcher):
204
219
  """
205
220
  if not params:
206
221
  params = {}
207
-
222
+ # Если передан неправильный параметр 'command', возвращаем понятную ошибку
223
+ if "command" in params and params["command"]:
224
+ return {
225
+ "error": "Parameter 'command' is not supported. Use 'cmdname' instead.",
226
+ "hint": "Send params: {\"cmdname\": \"your_command\"}",
227
+ "example": {"jsonrpc": "2.0", "method": "help", "params": {"cmdname": "your_command"}, "id": 1}
228
+ }
229
+ # Если handler вызывается синхронно и возвращает coroutine, возвращаем явную ошибку
230
+ if inspect.iscoroutinefunction(self._help_command):
231
+ return {
232
+ "error": "Help handler must be awaited. Call as await dispatcher.execute('help', ...) in async context.",
233
+ "hint": "Use async endpoint or await the result in your code.",
234
+ "example": "result = await dispatcher.execute('help', cmdname='your_command')"
235
+ }
208
236
  # If specific command is specified, return information only about it
209
237
  if "cmdname" in params and params["cmdname"]:
210
238
  command = params["cmdname"]
@@ -213,7 +241,6 @@ class JsonRpcDispatcher(BaseDispatcher):
213
241
  "error": f"Command '{command}' not found",
214
242
  "available_commands": list(self._metadata.keys())
215
243
  }
216
-
217
244
  return {
218
245
  "command": command,
219
246
  "info": self._metadata[command]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcp-proxy-adapter
3
- Version: 2.1.16
3
+ Version: 2.1.17
4
4
  Summary: Adapter for exposing Command Registry commands as tools for AI models via MCP Proxy.
5
5
  Home-page: https://github.com/vasilyvz/mcp-proxy-adapter
6
6
  Author: Vasiliy VZ
@@ -338,4 +338,39 @@ This project uses GitHub Actions for continuous integration and automated publis
338
338
  - All tests are run on every push and pull request.
339
339
  - On push of a new tag (vX.Y.Z), the package is built and published to PyPI automatically.
340
340
 
341
- See `.github/workflows/publish.yml` for details.
341
+ See `.github/workflows/publish.yml` for details.
342
+
343
+ ## Встроенная команда help: правила и типовые ошибки
344
+
345
+ ### Как работает
346
+ - Команда `help` всегда встроена в MCPProxyAdapter и не требует реализации или регистрации со стороны пользователя.
347
+ - Для получения справки по конкретной команде используйте параметр `cmdname`:
348
+ ```json
349
+ {"jsonrpc": "2.0", "method": "help", "params": {"cmdname": "имя_команды"}, "id": 1}
350
+ ```
351
+ - Для получения списка всех команд:
352
+ ```json
353
+ {"jsonrpc": "2.0", "method": "help", "id": 1}
354
+ ```
355
+
356
+ ### Типовые ошибки и их решения
357
+ - **Ошибка: передан параметр `command` вместо `cmdname`**
358
+ - Ответ:
359
+ ```json
360
+ {"error": "Parameter 'command' is not supported. Use 'cmdname' instead.", "hint": "Send params: {\"cmdname\": \"your_command\"}", ...}
361
+ ```
362
+ - **Решение:** всегда используйте `cmdname`.
363
+ - **Ошибка сериализации coroutine**
364
+ - Причина: handler вызывается без await, либо возвращает coroutine.
365
+ - Ответ:
366
+ ```json
367
+ {"error": "Help handler must be awaited. Call as await dispatcher.execute('help', ...) in async context.", ...}
368
+ ```
369
+ - **Решение:** всегда await-ить dispatcher.execute в async endpoint.
370
+
371
+ ### Важно для интеграторов и пользователей
372
+ - Не реализуйте свой обработчик help — используйте встроенный.
373
+ - Не используйте параметр `command` — только `cmdname`.
374
+ - Все ошибки help-команды теперь сопровождаются понятной подсказкой и примером корректного запроса.
375
+
376
+ ---
@@ -1,5 +1,5 @@
1
1
  mcp_proxy_adapter/__init__.py,sha256=Nqnn8clbgv-5l0PgxcTOldg8mkMKrFn4TvPL-rYUUGg,1
2
- mcp_proxy_adapter/adapter.py,sha256=76dkVeDuqLsJ5AhuftzLlwy2M6yr_PfNbmNfo9dXVhc,28844
2
+ mcp_proxy_adapter/adapter.py,sha256=x5pT-t4uT12O3GzLurrKBSQ_hwVpjhCRx5oZ5AdZnpY,28856
3
3
  mcp_proxy_adapter/models.py,sha256=8zVWU6ly18pWozOnKQ2gsGpmTgL37-fFE_Fr1SDW-Nk,2530
4
4
  mcp_proxy_adapter/registry.py,sha256=jgC4TKaPbMbAsoxvGp2ToaOE4drD-VfZug7WJbm4IW4,15853
5
5
  mcp_proxy_adapter/schema.py,sha256=HZM0TTQTSi8ha1TEeVevdCyGZOUPoT1soB7Nex0hV50,10947
@@ -9,7 +9,7 @@ mcp_proxy_adapter/analyzers/docstring_analyzer.py,sha256=T3FLJEo_uChShfiEKRl8GpV
9
9
  mcp_proxy_adapter/analyzers/type_analyzer.py,sha256=6Wac7osKwF03waFSwQ8ZM0Wqn_zAP2D-I4WMEpR0hQM,5230
10
10
  mcp_proxy_adapter/dispatchers/__init__.py,sha256=Nqnn8clbgv-5l0PgxcTOldg8mkMKrFn4TvPL-rYUUGg,1
11
11
  mcp_proxy_adapter/dispatchers/base_dispatcher.py,sha256=S5_Xri058jAmOWeit1tedB_GMZQ9RLcNcYabA83ZF6k,2288
12
- mcp_proxy_adapter/dispatchers/json_rpc_dispatcher.py,sha256=HO3RY5AzCQF3UPqnOIauB7Sq9rJC9jv7h7FTM1eDR90,8054
12
+ mcp_proxy_adapter/dispatchers/json_rpc_dispatcher.py,sha256=DBhO8DKPBKKBsARlq6IesnOFvl4GU6XVDP8gB6hZMpk,9885
13
13
  mcp_proxy_adapter/examples/analyze_config.py,sha256=vog7TNHDw5ZoYhQLbAvZvEoufmQwH54KJzQBJrSq5w4,4283
14
14
  mcp_proxy_adapter/examples/basic_integration.py,sha256=mtRval4VSUgTb_C2p8U_DPPSEKA08dZYKZk-bOrE4H4,4470
15
15
  mcp_proxy_adapter/examples/docstring_and_schema_example.py,sha256=wFg3Cf2Jgve0J5kFzApvFSII8JOsOGaych64hIC7FqQ,2183
@@ -23,8 +23,8 @@ mcp_proxy_adapter/examples/testing_example.py,sha256=OxFUhGP9OXiu9eWjSpytpQ5MzoR
23
23
  mcp_proxy_adapter/validators/__init__.py,sha256=Nqnn8clbgv-5l0PgxcTOldg8mkMKrFn4TvPL-rYUUGg,1
24
24
  mcp_proxy_adapter/validators/docstring_validator.py,sha256=Onpq2iNJ1qF4ejkJJIlBkLROuSNIVALHVmXIgkCpaFI,2934
25
25
  mcp_proxy_adapter/validators/metadata_validator.py,sha256=uCrn38-VYYn89l6f5CC_GoTAHAweaOW2Z6Esro1rtGw,3155
26
- mcp_proxy_adapter-2.1.16.dist-info/licenses/LICENSE,sha256=OkApFEwdgMCt_mbvUI-eIwKMSTe38K3XnU2DT5ub-wI,1072
27
- mcp_proxy_adapter-2.1.16.dist-info/METADATA,sha256=ww2i2m0f6txplRMYCb65rU1h9tDAm-FL-4hq2ZBzlUE,8886
28
- mcp_proxy_adapter-2.1.16.dist-info/WHEEL,sha256=0CuiUZ_p9E4cD6NyLD6UG80LBXYyiSYZOKDm5lp32xk,91
29
- mcp_proxy_adapter-2.1.16.dist-info/top_level.txt,sha256=JZT7vPLBYrtroX-ij68JBhJYbjDdghcV-DFySRy-Nnw,18
30
- mcp_proxy_adapter-2.1.16.dist-info/RECORD,,
26
+ mcp_proxy_adapter-2.1.17.dist-info/licenses/LICENSE,sha256=OkApFEwdgMCt_mbvUI-eIwKMSTe38K3XnU2DT5ub-wI,1072
27
+ mcp_proxy_adapter-2.1.17.dist-info/METADATA,sha256=Ru_MBUNRwbAxzhofC-0M8JD-NmnzmI2-h9wbgned1Z4,10822
28
+ mcp_proxy_adapter-2.1.17.dist-info/WHEEL,sha256=0CuiUZ_p9E4cD6NyLD6UG80LBXYyiSYZOKDm5lp32xk,91
29
+ mcp_proxy_adapter-2.1.17.dist-info/top_level.txt,sha256=JZT7vPLBYrtroX-ij68JBhJYbjDdghcV-DFySRy-Nnw,18
30
+ mcp_proxy_adapter-2.1.17.dist-info/RECORD,,