mcp-proxy-adapter 3.1.4__tar.gz → 3.1.6__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.
Files changed (237) hide show
  1. {mcp_proxy_adapter-3.1.4/mcp_proxy_adapter.egg-info → mcp_proxy_adapter-3.1.6}/PKG-INFO +1 -1
  2. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/EN/development/DEPENDENCY_INJECTION.md +1 -1
  3. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/RU/development/DEPENDENCY_INJECTION.md +1 -1
  4. mcp_proxy_adapter-3.1.6/examples/check_vstl_schema.py +106 -0
  5. mcp_proxy_adapter-3.1.6/examples/patch_vstl_service.py +105 -0
  6. mcp_proxy_adapter-3.1.6/examples/patch_vstl_service_mcp.py +108 -0
  7. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/examples/test_package_3.1.4.py +4 -4
  8. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/api/app.py +21 -0
  9. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/commands/command_registry.py +15 -0
  10. mcp_proxy_adapter-3.1.6/mcp_proxy_adapter/commands/help_command.py +290 -0
  11. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/tests/commands/test_help_command.py +8 -5
  12. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/tests/integration/test_cmd_integration.py +4 -5
  13. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/tests/test_command_registry.py +37 -1
  14. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/version.py +1 -1
  15. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6/mcp_proxy_adapter.egg-info}/PKG-INFO +1 -1
  16. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter.egg-info/SOURCES.txt +3 -0
  17. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/pyproject.toml +1 -1
  18. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/setup.py +1 -1
  19. mcp_proxy_adapter-3.1.4/mcp_proxy_adapter/commands/help_command.py +0 -195
  20. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/LICENSE +0 -0
  21. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/MANIFEST.in +0 -0
  22. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/README.md +0 -0
  23. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/EN/API_SCHEMA.md +0 -0
  24. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/EN/AUTOMATED_PUBLISHING.md +0 -0
  25. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/EN/BASIC_ARCHITECTURE.md +0 -0
  26. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/EN/COMMAND_CHECKLIST.md +0 -0
  27. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/EN/COMMAND_RESULTS.md +0 -0
  28. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/EN/COMMAND_TEMPLATE.md +0 -0
  29. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/EN/CONFIGURATION_PRINCIPLES.md +0 -0
  30. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/EN/DOCUMENTATION_MAP.md +0 -0
  31. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/EN/DOCUMENTATION_STANDARDS.md +0 -0
  32. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/EN/ERROR_HANDLING.md +0 -0
  33. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/EN/EXAMPLES_COMMAND_CLASSES.md +0 -0
  34. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/EN/GLOSSARY.md +0 -0
  35. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/EN/LOGGING_SYSTEM.md +0 -0
  36. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/EN/NAMING_STANDARDS.md +0 -0
  37. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/EN/OPENAPI_SCHEMA.md +0 -0
  38. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/EN/PROJECT_EXTENSION_GUIDE.md +0 -0
  39. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/EN/PROJECT_IDEOLOGY.md +0 -0
  40. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/EN/PROJECT_RULES.md +0 -0
  41. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/EN/PROJECT_STRUCTURE.md +0 -0
  42. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/EN/PUBLISHING_TO_PYPI.md +0 -0
  43. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/EN/README.md +0 -0
  44. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/EN/api/cmd_endpoint.md +0 -0
  45. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/EN/api/errors.md +0 -0
  46. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/EN/api/intro.md +0 -0
  47. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/EN/api/requests.md +0 -0
  48. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/EN/api/responses.md +0 -0
  49. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/EN/commands/get_date_command.md +0 -0
  50. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/EN/commands/help_command.md +0 -0
  51. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/EN/commands/index.md +0 -0
  52. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/EN/commands/new_uuid4_command.md +0 -0
  53. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/EN/development/COMMAND_METADATA_ENHANCEMENT.md +0 -0
  54. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/EN/development/METADATA_COMMANDS.md +0 -0
  55. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/EN/development/OPENAPI_CUSTOMIZATION.md +0 -0
  56. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/EN/development/REMOVE_COMMAND_GUIDE.md +0 -0
  57. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/EN/development/TOOL_INTEGRATION.md +0 -0
  58. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/EN/development/architecture.md +0 -0
  59. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/EN/examples/README.md +0 -0
  60. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/EN/examples/anti_patterns.md +0 -0
  61. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/EN/examples/basic_example.md +0 -0
  62. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/EN/examples/complete_example.md +0 -0
  63. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/EN/examples/minimal_example.md +0 -0
  64. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/EN/testing/README.md +0 -0
  65. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/EN/user/basic_usage.md +0 -0
  66. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/EN/user/configuration.md +0 -0
  67. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/EN/user/deployment.md +0 -0
  68. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/EN/user/examples.md +0 -0
  69. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/EN/user/installation.md +0 -0
  70. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/RU/API_SCHEMA.md +0 -0
  71. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/RU/AUTOMATED_PUBLISHING.md +0 -0
  72. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/RU/BASIC_ARCHITECTURE.md +0 -0
  73. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/RU/COMMAND_CHECKLIST.md +0 -0
  74. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/RU/COMMAND_RESULTS.md +0 -0
  75. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/RU/COMMAND_TEMPLATE.md +0 -0
  76. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/RU/CONFIGURATION_PRINCIPLES.md +0 -0
  77. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/RU/DOCUMENTATION_MAP.md +0 -0
  78. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/RU/DOCUMENTATION_STANDARDS.md +0 -0
  79. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/RU/ERROR_HANDLING.md +0 -0
  80. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/RU/EXAMPLES_COMMAND_CLASSES.md +0 -0
  81. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/RU/GLOSSARY.md +0 -0
  82. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/RU/LOGGING_SYSTEM.md +0 -0
  83. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/RU/NAMING_STANDARDS.md +0 -0
  84. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/RU/OPENAPI_SCHEMA.md +0 -0
  85. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/RU/PROJECT_EXTENSION_GUIDE.md +0 -0
  86. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/RU/PROJECT_IDEOLOGY.md +0 -0
  87. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/RU/PROJECT_RULES.md +0 -0
  88. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/RU/PROJECT_STRUCTURE.md +0 -0
  89. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/RU/PUBLISHING_TO_PYPI.md +0 -0
  90. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/RU/README.md +0 -0
  91. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/RU/api/cmd_endpoint.md +0 -0
  92. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/RU/api/errors.md +0 -0
  93. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/RU/api/intro.md +0 -0
  94. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/RU/api/requests.md +0 -0
  95. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/RU/api/responses.md +0 -0
  96. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/RU/commands/get_date_command.md +0 -0
  97. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/RU/commands/help_command.md +0 -0
  98. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/RU/commands/index.md +0 -0
  99. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/RU/commands/new_uuid4_command.md +0 -0
  100. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/RU/development/COMMAND_METADATA_ENHANCEMENT.md +0 -0
  101. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/RU/development/METADATA_COMMANDS.md +0 -0
  102. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/RU/development/OPENAPI_CUSTOMIZATION.md +0 -0
  103. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/RU/development/PLAN_REALIZACII_METADATA.md +0 -0
  104. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/RU/development/REMOVE_COMMAND_GUIDE.md +0 -0
  105. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/RU/development/TOOL_INTEGRATION.md +0 -0
  106. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/RU/development/architecture.md +0 -0
  107. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/RU/examples/README.md +0 -0
  108. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/RU/examples/anti_patterns.md +0 -0
  109. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/RU/examples/basic_example.md +0 -0
  110. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/RU/examples/complete_example.md +0 -0
  111. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/RU/examples/minimal_example.md +0 -0
  112. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/RU/testing/README.md +0 -0
  113. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/RU/user/basic_usage.md +0 -0
  114. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/RU/user/configuration.md +0 -0
  115. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/RU/user/deployment.md +0 -0
  116. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/RU/user/examples.md +0 -0
  117. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/docs/RU/user/installation.md +0 -0
  118. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/examples/__init__.py +0 -0
  119. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/examples/anti_patterns/README.md +0 -0
  120. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/examples/anti_patterns/__init__.py +0 -0
  121. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/examples/anti_patterns/bad_design/README.md +0 -0
  122. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/examples/anti_patterns/bad_design/global_state.py +0 -0
  123. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/examples/anti_patterns/bad_design/monolithic_command.py +0 -0
  124. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/examples/basic_example/README.md +0 -0
  125. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/examples/basic_example/__init__.py +0 -0
  126. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/examples/basic_example/commands/__init__.py +0 -0
  127. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/examples/basic_example/commands/echo_command.py +0 -0
  128. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/examples/basic_example/commands/math_command.py +0 -0
  129. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/examples/basic_example/commands/time_command.py +0 -0
  130. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/examples/basic_example/config.json +0 -0
  131. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/examples/basic_example/docs/EN/README.md +0 -0
  132. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/examples/basic_example/docs/RU/README.md +0 -0
  133. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/examples/basic_example/server.py +0 -0
  134. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/examples/basic_example/tests/conftest.py +0 -0
  135. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/examples/commands/echo_command.py +0 -0
  136. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/examples/commands/echo_command_di.py +0 -0
  137. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/examples/commands/echo_result.py +0 -0
  138. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/examples/commands/get_date_command.py +0 -0
  139. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/examples/commands/new_uuid4_command.py +0 -0
  140. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/examples/complete_example/Dockerfile +0 -0
  141. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/examples/complete_example/README.md +0 -0
  142. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/examples/complete_example/__init__.py +0 -0
  143. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/examples/complete_example/commands/__init__.py +0 -0
  144. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/examples/complete_example/commands/system_command.py +0 -0
  145. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/examples/complete_example/config.json +0 -0
  146. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/examples/complete_example/configs/config.dev.yaml +0 -0
  147. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/examples/complete_example/configs/config.docker.yaml +0 -0
  148. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/examples/complete_example/docker-compose.yml +0 -0
  149. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/examples/complete_example/requirements.txt +0 -0
  150. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/examples/complete_example/server.py +0 -0
  151. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/examples/di_example/.pytest_cache/README.md +0 -0
  152. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/examples/di_example/server.py +0 -0
  153. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/examples/fix_vstl_help.py +0 -0
  154. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/examples/minimal_example/README.md +0 -0
  155. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/examples/minimal_example/__init__.py +0 -0
  156. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/examples/minimal_example/config.json +0 -0
  157. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/examples/minimal_example/main.py +0 -0
  158. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/examples/minimal_example/simple_server.py +0 -0
  159. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/examples/minimal_example/tests/conftest.py +0 -0
  160. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/examples/minimal_example/tests/test_hello_command.py +0 -0
  161. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/examples/minimal_example/tests/test_integration.py +0 -0
  162. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/examples/server.py +0 -0
  163. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/examples/simple_server.py +0 -0
  164. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/examples/test_server.py +0 -0
  165. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/examples/tool_description_example.py +0 -0
  166. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/__init__.py +0 -0
  167. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/api/__init__.py +0 -0
  168. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/api/handlers.py +0 -0
  169. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/api/middleware/__init__.py +0 -0
  170. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/api/middleware/auth.py +0 -0
  171. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/api/middleware/base.py +0 -0
  172. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/api/middleware/error_handling.py +0 -0
  173. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/api/middleware/logging.py +0 -0
  174. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/api/middleware/performance.py +0 -0
  175. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/api/middleware/rate_limit.py +0 -0
  176. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/api/schemas.py +0 -0
  177. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/api/tool_integration.py +0 -0
  178. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/api/tools.py +0 -0
  179. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/commands/__init__.py +0 -0
  180. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/commands/base.py +0 -0
  181. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/commands/config_command.py +0 -0
  182. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/commands/dependency_container.py +0 -0
  183. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/commands/health_command.py +0 -0
  184. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/commands/result.py +0 -0
  185. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/config.py +0 -0
  186. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/core/__init__.py +0 -0
  187. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/core/errors.py +0 -0
  188. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/core/logging.py +0 -0
  189. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/core/utils.py +0 -0
  190. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/custom_openapi.py +0 -0
  191. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/openapi.py +0 -0
  192. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/py.typed +0 -0
  193. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/schemas/base_schema.json +0 -0
  194. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/schemas/openapi_schema.json +0 -0
  195. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/tests/__init__.py +0 -0
  196. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/tests/api/__init__.py +0 -0
  197. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/tests/api/test_cmd_endpoint.py +0 -0
  198. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/tests/api/test_middleware.py +0 -0
  199. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/tests/commands/__init__.py +0 -0
  200. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/tests/commands/test_config_command.py +0 -0
  201. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/tests/commands/test_echo_command.py +0 -0
  202. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/tests/conftest.py +0 -0
  203. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/tests/functional/__init__.py +0 -0
  204. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/tests/functional/test_api.py +0 -0
  205. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/tests/integration/__init__.py +0 -0
  206. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/tests/integration/test_integration.py +0 -0
  207. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/tests/performance/__init__.py +0 -0
  208. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/tests/performance/test_performance.py +0 -0
  209. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/tests/stubs/__init__.py +0 -0
  210. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/tests/stubs/echo_command.py +0 -0
  211. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/tests/test_api_endpoints.py +0 -0
  212. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/tests/test_api_handlers.py +0 -0
  213. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/tests/test_base_command.py +0 -0
  214. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/tests/test_batch_requests.py +0 -0
  215. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/tests/test_config.py +0 -0
  216. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/tests/test_utils.py +0 -0
  217. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/tests/unit/__init__.py +0 -0
  218. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/tests/unit/test_base_command.py +0 -0
  219. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter/tests/unit/test_config.py +0 -0
  220. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter.egg-info/dependency_links.txt +0 -0
  221. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter.egg-info/requires.txt +0 -0
  222. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/mcp_proxy_adapter.egg-info/top_level.txt +0 -0
  223. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/requirements.txt +0 -0
  224. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/setup.cfg +0 -0
  225. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/tests/__init__.py +0 -0
  226. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/tests/api/__init__.py +0 -0
  227. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/tests/api/test_handler_dependency_injection.py +0 -0
  228. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/tests/api/test_tool_description.py +0 -0
  229. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/tests/commands/__init__.py +0 -0
  230. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/tests/commands/test_command_di.py +0 -0
  231. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/tests/commands/test_command_metadata.py +0 -0
  232. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/tests/commands/test_dependency_container.py +0 -0
  233. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/tests/commands/test_echo_command_di.py +0 -0
  234. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/tests/commands/test_help_command.py +0 -0
  235. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/tests/conftest.py +0 -0
  236. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/tests/integration/__init__.py +0 -0
  237. {mcp_proxy_adapter-3.1.4 → mcp_proxy_adapter-3.1.6}/tests/integration/test_di_integration.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcp-proxy-adapter
3
- Version: 3.1.4
3
+ Version: 3.1.6
4
4
  Summary: Reliable microservice with unified JSON-RPC endpoint
5
5
  Home-page: https://github.com/yourusername/mcp-proxy-adapter
6
6
  Author: MCP Team
@@ -1,6 +1,6 @@
1
1
  # Dependency Injection
2
2
 
3
- MCP Proxy Adapter version 3.1.4 introduces support for Dependency Injection (DI).
3
+ MCP Proxy Adapter version 3.1.6 introduces support for Dependency Injection (DI).
4
4
  This feature allows creating more flexible and testable commands that can
5
5
  use shared services and resources.
6
6
 
@@ -1,6 +1,6 @@
1
1
  # Внедрение зависимостей (Dependency Injection)
2
2
 
3
- В версии 3.1.4 библиотеки MCP Proxy Adapter добавлена поддержка внедрения зависимостей (DI).
3
+ В версии 3.1.6 библиотеки MCP Proxy Adapter добавлена поддержка внедрения зависимостей (DI).
4
4
  Эта функциональность позволяет создавать более гибкие и тестируемые команды, которые
5
5
  могут использовать общие сервисы и ресурсы.
6
6
 
@@ -0,0 +1,106 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Скрипт для проверки схемы команды help в сервисе VSTL
4
+ """
5
+
6
+ import json
7
+ import requests
8
+ from typing import Dict, Any, Optional
9
+
10
+ # URL и заголовки для VSTL сервиса
11
+ VSTL_URL = "http://localhost:8007/cmd"
12
+ HEADERS = {"Content-Type": "application/json"}
13
+
14
+ def send_json_rpc(method: str, params: Optional[Dict[str, Any]] = None) -> Dict[str, Any]:
15
+ """
16
+ Отправляет JSON-RPC запрос и возвращает ответ
17
+
18
+ Args:
19
+ method: Имя метода
20
+ params: Параметры запроса
21
+
22
+ Returns:
23
+ Dict[str, Any]: Ответ сервера
24
+ """
25
+ # Формируем JSON-RPC запрос
26
+ payload = {
27
+ "jsonrpc": "2.0",
28
+ "method": method,
29
+ "id": 1
30
+ }
31
+
32
+ # Добавляем параметры, если они есть
33
+ if params is not None:
34
+ payload["params"] = params
35
+
36
+ print(f"Отправляем запрос: {json.dumps(payload, indent=2)}")
37
+
38
+ # Отправляем запрос
39
+ response = requests.post(VSTL_URL, json=payload, headers=HEADERS)
40
+
41
+ # Возвращаем ответ
42
+ return response.json()
43
+
44
+ def test_help_command():
45
+ """
46
+ Проверяет команду help в различных вариантах
47
+ """
48
+ print("\n=== Проверка команды help без параметров ===")
49
+ response = send_json_rpc("help")
50
+ print(f"Ответ: {json.dumps(response, indent=2)}")
51
+
52
+ print("\n=== Проверка команды help с пустыми параметрами ===")
53
+ response = send_json_rpc("help", {})
54
+ print(f"Ответ: {json.dumps(response, indent=2)}")
55
+
56
+ print("\n=== Проверка команды help с параметром cmdname=null ===")
57
+ response = send_json_rpc("help", {"cmdname": None})
58
+ print(f"Ответ: {json.dumps(response, indent=2)}")
59
+
60
+ print("\n=== Проверка команды help с параметром cmdname=\"config\" ===")
61
+ response = send_json_rpc("help", {"cmdname": "config"})
62
+ print(f"Ответ: {json.dumps(response, indent=2)}")
63
+
64
+ # Проверяем workaround с передачей строки "null"
65
+ print("\n=== Проверка команды help с параметром cmdname=\"null\" ===")
66
+ response = send_json_rpc("help", {"cmdname": "null"})
67
+ print(f"Ответ: {json.dumps(response, indent=2)}")
68
+
69
+ def check_schema():
70
+ """
71
+ Проверяет схему команд и ищет обязательные параметры
72
+ """
73
+ print("\n=== Проверка схемы команд ===")
74
+
75
+ # Запрашиваем список всех доступных команд
76
+ health_response = send_json_rpc("health")
77
+ print(f"Здоровье сервиса: {json.dumps(health_response, indent=2)}")
78
+
79
+ # Проверяем команду config для получения схемы
80
+ config_response = send_json_rpc("config", {"operation": "get"})
81
+ print(f"Конфигурация: {json.dumps(config_response, indent=2)}")
82
+
83
+ # Пробуем с явным указанием строки вместо null
84
+ print("\n=== Проверка команды help с cmdname=\"\" (пустая строка) ===")
85
+ response = send_json_rpc("help", {"cmdname": ""})
86
+ print(f"Ответ: {json.dumps(response, indent=2)}")
87
+
88
+ # Создаем свой вариант с переопределением параметров
89
+ print("\n=== Проверка специального запроса с kwargs=null ===")
90
+ # Прямая отправка JSON с null значением для kwargs
91
+ special_payload = {
92
+ "jsonrpc": "2.0",
93
+ "method": "help",
94
+ "params": {"kwargs": None},
95
+ "id": 1
96
+ }
97
+ response = requests.post(VSTL_URL, json=special_payload, headers=HEADERS)
98
+ print(f"Ответ: {json.dumps(response.json(), indent=2)}")
99
+
100
+ if __name__ == "__main__":
101
+ print("=== Диагностика проблемы с командой help в сервисе VSTL ===")
102
+ try:
103
+ test_help_command()
104
+ check_schema()
105
+ except Exception as e:
106
+ print(f"Ошибка при выполнении: {e}")
@@ -0,0 +1,105 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Скрипт для исправления ошибки 'name null is not defined' в сервисе VSTL.
4
+
5
+ Этот скрипт обходит проблему с обработкой null в сервисе vstl
6
+ при помощи модификации JSON-RPC запросов, чтобы заменять null на None.
7
+
8
+ Использование:
9
+ python patch_vstl_service.py
10
+ """
11
+
12
+ import sys
13
+ import json
14
+ import requests
15
+ from typing import Dict, Any, Optional
16
+
17
+ # URL и заголовки для VSTL сервиса
18
+ VSTL_URL = "http://localhost:8000/cmd"
19
+ HEADERS = {"Content-Type": "application/json"}
20
+
21
+ def safe_call_vstl(command: str, params: Optional[Dict[str, Any]] = None) -> Dict[str, Any]:
22
+ """
23
+ Безопасно вызывает команду в сервисе VSTL, обрабатывая null значения.
24
+
25
+ Args:
26
+ command: Имя команды
27
+ params: Параметры для команды
28
+
29
+ Returns:
30
+ Dict[str, Any]: Ответ от сервиса
31
+ """
32
+ # Обработка null значений - заменяем null на None для Python
33
+ safe_params = {}
34
+ if params:
35
+ for key, value in params.items():
36
+ if value == "null" or value == "none":
37
+ safe_params[key] = None
38
+ else:
39
+ safe_params[key] = value
40
+
41
+ # Безопасно сериализуем параметры, чтобы null значения были корректно обработаны
42
+ payload = {
43
+ "jsonrpc": "2.0",
44
+ "method": command,
45
+ "params": safe_params or {},
46
+ "id": 1
47
+ }
48
+
49
+ # Отправляем запрос
50
+ response = requests.post(VSTL_URL, json=payload, headers=HEADERS)
51
+ return response.json()
52
+
53
+ def test_vstl_commands():
54
+ """
55
+ Тестирует различные команды в сервисе VSTL с безопасной обработкой null.
56
+ """
57
+ print("=== Тестирование команд VSTL с патчем для обработки null ===\n")
58
+
59
+ # Проверяем команду health
60
+ print("1. Команда health:")
61
+ response = safe_call_vstl("health", {})
62
+ print(f"Ответ: {json.dumps(response, indent=2)}\n")
63
+
64
+ # Проверяем команду help без параметров
65
+ print("2. Команда help без параметров:")
66
+ response = safe_call_vstl("help", {})
67
+ print(f"Ответ: {json.dumps(response, indent=2)}")
68
+
69
+ # Если команда help сработала, выведем список всех доступных команд
70
+ if response.get("result") and not response.get("error"):
71
+ commands_info = response["result"].get("commands", {})
72
+ print(f"\nДоступные команды ({len(commands_info)}):")
73
+ for cmd_name, cmd_info in commands_info.items():
74
+ print(f" - {cmd_name}: {cmd_info.get('summary', 'Нет описания')}")
75
+
76
+ # Проверяем команду help с параметром cmdname
77
+ print("\n3. Команда help с параметром cmdname:")
78
+ response = safe_call_vstl("help", {"cmdname": "health"})
79
+ print(f"Ответ: {json.dumps(response, indent=2)}\n")
80
+
81
+ # Проверяем команду config
82
+ print("4. Команда config:")
83
+ response = safe_call_vstl("config", {"operation": "get"})
84
+ print(f"Ответ: {json.dumps(response, indent=2)}\n")
85
+
86
+ # Выводим рекомендации по полному исправлению
87
+ print("\n=== Рекомендации по полному исправлению проблемы с null в VSTL ===")
88
+ print("""
89
+ 1. Проверьте исходный код сервиса VSTL на наличие использования переменной 'null'
90
+ без её объявления (обратите внимание на файл help_command.py)
91
+
92
+ 2. Замените все использования JavaScript-стиля null на Python None:
93
+ - Поиск: if value == null
94
+ - Замена: if value is None
95
+
96
+ 3. Обновите сервис до последней версии mcp_proxy_adapter 3.1.6 и перезапустите
97
+
98
+ 4. Если это невозможно, используйте этот скрипт как промежуточное решение,
99
+ чтобы безопасно вызывать команды VSTL с корректной обработкой null.
100
+
101
+ 5. Внесите исправления в метод validate_params, как показано в fix_vstl_help.py
102
+ """)
103
+
104
+ if __name__ == "__main__":
105
+ test_vstl_commands()
@@ -0,0 +1,108 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Скрипт для исправления ошибки 'name null is not defined' в сервисе VSTL через MCP Proxy API.
4
+
5
+ Этот скрипт демонстрирует как обойти проблему с null в сервисе vstl,
6
+ используя стандартные средства MCP Proxy API.
7
+ """
8
+
9
+ import os
10
+ import sys
11
+ import json
12
+ import subprocess
13
+ from typing import Dict, Any, Optional
14
+
15
+ def call_vstl_command(command: str, params: Optional[Dict[str, Any]] = None):
16
+ """
17
+ Вызывает команду vstl через MCP Proxy API.
18
+
19
+ Args:
20
+ command: Название команды
21
+ params: Параметры команды
22
+
23
+ Returns:
24
+ Результат выполнения команды
25
+ """
26
+ # Формируем параметры для команды mcp_MCP-Proxy_vstl
27
+ if params is None:
28
+ params = {}
29
+
30
+ # Сериализуем параметры в JSON
31
+ params_json = json.dumps(params)
32
+
33
+ # Формируем команду для вызова MCP Proxy API
34
+ cmd = [
35
+ "curl", "-s",
36
+ "-X", "POST",
37
+ "-H", "Content-Type: application/json",
38
+ "-d", f'{{"jsonrpc":"2.0","method":"{command}","params":{params_json},"id":1}}',
39
+ "http://localhost:8000/api/vstl"
40
+ ]
41
+
42
+ # Выполняем команду
43
+ try:
44
+ result = subprocess.run(cmd, capture_output=True, text=True, check=True)
45
+ # Парсим результат как JSON
46
+ return json.loads(result.stdout)
47
+ except subprocess.CalledProcessError as e:
48
+ print(f"Ошибка выполнения команды: {e}")
49
+ print(f"STDOUT: {e.stdout}")
50
+ print(f"STDERR: {e.stderr}")
51
+ return {"error": str(e)}
52
+ except json.JSONDecodeError as e:
53
+ print(f"Ошибка декодирования JSON: {e}")
54
+ print(f"Ответ: {result.stdout}")
55
+ return {"error": "Неверный формат JSON в ответе"}
56
+
57
+ def test_vstl_commands():
58
+ """
59
+ Тестирует различные команды vstl с обходом проблемы null.
60
+ """
61
+ print("=== Тестирование команд VSTL через MCP Proxy API ===\n")
62
+
63
+ # Проверяем команду health
64
+ print("1. Команда health:")
65
+ response = call_vstl_command("health", {})
66
+ print(f"Ответ: {json.dumps(response, indent=2)}\n")
67
+
68
+ # Проверяем команду help без параметров
69
+ print("2. Команда help без параметров:")
70
+ response = call_vstl_command("help", {})
71
+ print(f"Ответ: {json.dumps(response, indent=2)}")
72
+
73
+ # Если есть ошибка в команде help без параметров, попробуем еще несколько вариантов
74
+ if "error" in response:
75
+ print("\n2.1. Попытка обойти ошибку - вызов help с корректными параметрами:")
76
+ response = call_vstl_command("help", {"cmdname": None})
77
+ print(f"Ответ: {json.dumps(response, indent=2)}")
78
+
79
+ # Проверяем команду help с параметром cmdname
80
+ print("\n3. Команда help с параметром cmdname:")
81
+ response = call_vstl_command("help", {"cmdname": "health"})
82
+ print(f"Ответ: {json.dumps(response, indent=2)}\n")
83
+
84
+ # Проверяем команду config
85
+ print("4. Команда config:")
86
+ response = call_vstl_command("config", {"operation": "get"})
87
+ print(f"Ответ: {json.dumps(response, indent=2)}\n")
88
+
89
+ # Выводим рекомендации по исправлению
90
+ print("\n=== Рекомендации по исправлению проблемы с null в VSTL ===")
91
+ print("""
92
+ 1. Проблема с обработкой null в JavaScript-совместимых API - это распространенная ошибка.
93
+ В JavaScript null - это ключевое слово, а в Python - это None.
94
+
95
+ 2. Для полного решения проблемы необходимо исправить реализацию сервиса VSTL:
96
+ - Найти в коде места, где используется 'null' как переменная
97
+ - Заменить на корректное использование None
98
+ - Добавить к аргументам метода execute в help_command.py параметр **kwargs
99
+ - Обновить метод validate_params для обработки строковых представлений null
100
+
101
+ 3. До исправления сервера можно использовать следующие обходные пути:
102
+ - Использовать MCP Proxy API с корректными значениями параметров (None вместо null)
103
+ - Использовать промежуточный слой, который будет преобразовывать запросы
104
+ - Избегать отправки параметров null/None в командах, где это возможно
105
+ """)
106
+
107
+ if __name__ == "__main__":
108
+ test_vstl_commands()
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env python3
2
2
  """
3
- Скрипт для проверки работы улучшенной обработки null в версии 3.1.4.
3
+ Скрипт для проверки работы улучшенной обработки null в версии 3.1.6.
4
4
 
5
5
  Этот скрипт:
6
- 1. Проверяет, что версия пакета 3.1.4
6
+ 1. Проверяет, что версия пакета 3.1.6
7
7
  2. Тестирует улучшенный метод validate_params
8
8
  3. Проверяет, что команда help правильно обрабатывает null значения
9
9
  """
@@ -26,7 +26,7 @@ def check_version():
26
26
  """
27
27
  Проверяет версию установленного пакета mcp_proxy_adapter.
28
28
  """
29
- expected_version = "3.1.4"
29
+ expected_version = "3.1.6"
30
30
 
31
31
  print(f"\n=== Проверка версии ===")
32
32
  print(f"Установленная версия: {__version__}")
@@ -146,7 +146,7 @@ def main():
146
146
  """
147
147
  Основная функция для запуска тестов.
148
148
  """
149
- print("=== Проверка MCP Proxy Adapter 3.1.4 ===")
149
+ print("=== Проверка MCP Proxy Adapter 3.1.6 ===")
150
150
 
151
151
  # Проверяем версию пакета
152
152
  version_ok = check_version()
@@ -200,6 +200,27 @@ def create_app() -> FastAPI:
200
200
  "error": e.to_dict()
201
201
  }
202
202
  )
203
+ except NotFoundError as e:
204
+ # Специальная обработка для help-команды: возвращаем result с пустым commands и error
205
+ if command_name == "help":
206
+ return {
207
+ "result": {
208
+ "success": False,
209
+ "commands": {},
210
+ "error": str(e),
211
+ "note": "To get detailed information about a specific command, call help with parameter: POST /cmd {\"command\": \"help\", \"params\": {\"cmdname\": \"<command_name>\"}}"
212
+ }
213
+ }
214
+ # Для остальных команд — стандартная ошибка
215
+ return JSONResponse(
216
+ status_code=200,
217
+ content={
218
+ "error": {
219
+ "code": e.code,
220
+ "message": str(e)
221
+ }
222
+ }
223
+ )
203
224
 
204
225
  except json.JSONDecodeError:
205
226
  req_logger.error("JSON decode error")
@@ -1,5 +1,20 @@
1
1
  """
2
2
  Module for registering and managing commands.
3
+
4
+ Example: Registering a command instance (for dependency injection)
5
+ ---------------------------------------------------------------
6
+
7
+ .. code-block:: python
8
+
9
+ from mcp_proxy_adapter.commands.command_registry import registry
10
+ from my_commands import MyCommand
11
+
12
+ # Suppose MyCommand requires a service dependency
13
+ service = MyService()
14
+ my_command_instance = MyCommand(service=service)
15
+ registry.register(my_command_instance)
16
+
17
+ # Now, when the command is executed, the same instance (with dependencies) will be used
3
18
  """
4
19
 
5
20
  import importlib