mcp-proxy-adapter 3.1.2__tar.gz → 3.1.4__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 (233) hide show
  1. {mcp_proxy_adapter-3.1.2/mcp_proxy_adapter.egg-info → mcp_proxy_adapter-3.1.4}/PKG-INFO +1 -1
  2. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/EN/development/DEPENDENCY_INJECTION.md +1 -1
  3. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/RU/development/DEPENDENCY_INJECTION.md +1 -1
  4. mcp_proxy_adapter-3.1.4/examples/fix_vstl_help.py +123 -0
  5. mcp_proxy_adapter-3.1.4/examples/test_package_3.1.4.py +177 -0
  6. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/commands/base.py +24 -1
  7. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/commands/help_command.py +5 -3
  8. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/version.py +1 -1
  9. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4/mcp_proxy_adapter.egg-info}/PKG-INFO +1 -1
  10. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter.egg-info/SOURCES.txt +2 -0
  11. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/pyproject.toml +1 -1
  12. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/setup.py +1 -1
  13. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/LICENSE +0 -0
  14. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/MANIFEST.in +0 -0
  15. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/README.md +0 -0
  16. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/EN/API_SCHEMA.md +0 -0
  17. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/EN/AUTOMATED_PUBLISHING.md +0 -0
  18. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/EN/BASIC_ARCHITECTURE.md +0 -0
  19. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/EN/COMMAND_CHECKLIST.md +0 -0
  20. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/EN/COMMAND_RESULTS.md +0 -0
  21. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/EN/COMMAND_TEMPLATE.md +0 -0
  22. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/EN/CONFIGURATION_PRINCIPLES.md +0 -0
  23. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/EN/DOCUMENTATION_MAP.md +0 -0
  24. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/EN/DOCUMENTATION_STANDARDS.md +0 -0
  25. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/EN/ERROR_HANDLING.md +0 -0
  26. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/EN/EXAMPLES_COMMAND_CLASSES.md +0 -0
  27. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/EN/GLOSSARY.md +0 -0
  28. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/EN/LOGGING_SYSTEM.md +0 -0
  29. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/EN/NAMING_STANDARDS.md +0 -0
  30. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/EN/OPENAPI_SCHEMA.md +0 -0
  31. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/EN/PROJECT_EXTENSION_GUIDE.md +0 -0
  32. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/EN/PROJECT_IDEOLOGY.md +0 -0
  33. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/EN/PROJECT_RULES.md +0 -0
  34. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/EN/PROJECT_STRUCTURE.md +0 -0
  35. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/EN/PUBLISHING_TO_PYPI.md +0 -0
  36. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/EN/README.md +0 -0
  37. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/EN/api/cmd_endpoint.md +0 -0
  38. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/EN/api/errors.md +0 -0
  39. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/EN/api/intro.md +0 -0
  40. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/EN/api/requests.md +0 -0
  41. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/EN/api/responses.md +0 -0
  42. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/EN/commands/get_date_command.md +0 -0
  43. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/EN/commands/help_command.md +0 -0
  44. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/EN/commands/index.md +0 -0
  45. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/EN/commands/new_uuid4_command.md +0 -0
  46. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/EN/development/COMMAND_METADATA_ENHANCEMENT.md +0 -0
  47. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/EN/development/METADATA_COMMANDS.md +0 -0
  48. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/EN/development/OPENAPI_CUSTOMIZATION.md +0 -0
  49. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/EN/development/REMOVE_COMMAND_GUIDE.md +0 -0
  50. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/EN/development/TOOL_INTEGRATION.md +0 -0
  51. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/EN/development/architecture.md +0 -0
  52. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/EN/examples/README.md +0 -0
  53. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/EN/examples/anti_patterns.md +0 -0
  54. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/EN/examples/basic_example.md +0 -0
  55. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/EN/examples/complete_example.md +0 -0
  56. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/EN/examples/minimal_example.md +0 -0
  57. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/EN/testing/README.md +0 -0
  58. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/EN/user/basic_usage.md +0 -0
  59. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/EN/user/configuration.md +0 -0
  60. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/EN/user/deployment.md +0 -0
  61. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/EN/user/examples.md +0 -0
  62. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/EN/user/installation.md +0 -0
  63. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/RU/API_SCHEMA.md +0 -0
  64. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/RU/AUTOMATED_PUBLISHING.md +0 -0
  65. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/RU/BASIC_ARCHITECTURE.md +0 -0
  66. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/RU/COMMAND_CHECKLIST.md +0 -0
  67. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/RU/COMMAND_RESULTS.md +0 -0
  68. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/RU/COMMAND_TEMPLATE.md +0 -0
  69. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/RU/CONFIGURATION_PRINCIPLES.md +0 -0
  70. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/RU/DOCUMENTATION_MAP.md +0 -0
  71. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/RU/DOCUMENTATION_STANDARDS.md +0 -0
  72. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/RU/ERROR_HANDLING.md +0 -0
  73. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/RU/EXAMPLES_COMMAND_CLASSES.md +0 -0
  74. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/RU/GLOSSARY.md +0 -0
  75. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/RU/LOGGING_SYSTEM.md +0 -0
  76. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/RU/NAMING_STANDARDS.md +0 -0
  77. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/RU/OPENAPI_SCHEMA.md +0 -0
  78. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/RU/PROJECT_EXTENSION_GUIDE.md +0 -0
  79. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/RU/PROJECT_IDEOLOGY.md +0 -0
  80. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/RU/PROJECT_RULES.md +0 -0
  81. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/RU/PROJECT_STRUCTURE.md +0 -0
  82. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/RU/PUBLISHING_TO_PYPI.md +0 -0
  83. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/RU/README.md +0 -0
  84. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/RU/api/cmd_endpoint.md +0 -0
  85. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/RU/api/errors.md +0 -0
  86. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/RU/api/intro.md +0 -0
  87. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/RU/api/requests.md +0 -0
  88. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/RU/api/responses.md +0 -0
  89. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/RU/commands/get_date_command.md +0 -0
  90. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/RU/commands/help_command.md +0 -0
  91. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/RU/commands/index.md +0 -0
  92. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/RU/commands/new_uuid4_command.md +0 -0
  93. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/RU/development/COMMAND_METADATA_ENHANCEMENT.md +0 -0
  94. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/RU/development/METADATA_COMMANDS.md +0 -0
  95. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/RU/development/OPENAPI_CUSTOMIZATION.md +0 -0
  96. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/RU/development/PLAN_REALIZACII_METADATA.md +0 -0
  97. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/RU/development/REMOVE_COMMAND_GUIDE.md +0 -0
  98. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/RU/development/TOOL_INTEGRATION.md +0 -0
  99. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/RU/development/architecture.md +0 -0
  100. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/RU/examples/README.md +0 -0
  101. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/RU/examples/anti_patterns.md +0 -0
  102. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/RU/examples/basic_example.md +0 -0
  103. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/RU/examples/complete_example.md +0 -0
  104. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/RU/examples/minimal_example.md +0 -0
  105. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/RU/testing/README.md +0 -0
  106. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/RU/user/basic_usage.md +0 -0
  107. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/RU/user/configuration.md +0 -0
  108. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/RU/user/deployment.md +0 -0
  109. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/RU/user/examples.md +0 -0
  110. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/docs/RU/user/installation.md +0 -0
  111. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/examples/__init__.py +0 -0
  112. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/examples/anti_patterns/README.md +0 -0
  113. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/examples/anti_patterns/__init__.py +0 -0
  114. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/examples/anti_patterns/bad_design/README.md +0 -0
  115. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/examples/anti_patterns/bad_design/global_state.py +0 -0
  116. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/examples/anti_patterns/bad_design/monolithic_command.py +0 -0
  117. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/examples/basic_example/README.md +0 -0
  118. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/examples/basic_example/__init__.py +0 -0
  119. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/examples/basic_example/commands/__init__.py +0 -0
  120. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/examples/basic_example/commands/echo_command.py +0 -0
  121. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/examples/basic_example/commands/math_command.py +0 -0
  122. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/examples/basic_example/commands/time_command.py +0 -0
  123. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/examples/basic_example/config.json +0 -0
  124. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/examples/basic_example/docs/EN/README.md +0 -0
  125. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/examples/basic_example/docs/RU/README.md +0 -0
  126. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/examples/basic_example/server.py +0 -0
  127. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/examples/basic_example/tests/conftest.py +0 -0
  128. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/examples/commands/echo_command.py +0 -0
  129. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/examples/commands/echo_command_di.py +0 -0
  130. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/examples/commands/echo_result.py +0 -0
  131. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/examples/commands/get_date_command.py +0 -0
  132. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/examples/commands/new_uuid4_command.py +0 -0
  133. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/examples/complete_example/Dockerfile +0 -0
  134. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/examples/complete_example/README.md +0 -0
  135. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/examples/complete_example/__init__.py +0 -0
  136. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/examples/complete_example/commands/__init__.py +0 -0
  137. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/examples/complete_example/commands/system_command.py +0 -0
  138. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/examples/complete_example/config.json +0 -0
  139. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/examples/complete_example/configs/config.dev.yaml +0 -0
  140. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/examples/complete_example/configs/config.docker.yaml +0 -0
  141. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/examples/complete_example/docker-compose.yml +0 -0
  142. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/examples/complete_example/requirements.txt +0 -0
  143. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/examples/complete_example/server.py +0 -0
  144. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/examples/di_example/.pytest_cache/README.md +0 -0
  145. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/examples/di_example/server.py +0 -0
  146. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/examples/minimal_example/README.md +0 -0
  147. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/examples/minimal_example/__init__.py +0 -0
  148. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/examples/minimal_example/config.json +0 -0
  149. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/examples/minimal_example/main.py +0 -0
  150. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/examples/minimal_example/simple_server.py +0 -0
  151. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/examples/minimal_example/tests/conftest.py +0 -0
  152. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/examples/minimal_example/tests/test_hello_command.py +0 -0
  153. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/examples/minimal_example/tests/test_integration.py +0 -0
  154. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/examples/server.py +0 -0
  155. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/examples/simple_server.py +0 -0
  156. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/examples/test_server.py +0 -0
  157. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/examples/tool_description_example.py +0 -0
  158. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/__init__.py +0 -0
  159. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/api/__init__.py +0 -0
  160. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/api/app.py +0 -0
  161. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/api/handlers.py +0 -0
  162. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/api/middleware/__init__.py +0 -0
  163. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/api/middleware/auth.py +0 -0
  164. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/api/middleware/base.py +0 -0
  165. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/api/middleware/error_handling.py +0 -0
  166. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/api/middleware/logging.py +0 -0
  167. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/api/middleware/performance.py +0 -0
  168. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/api/middleware/rate_limit.py +0 -0
  169. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/api/schemas.py +0 -0
  170. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/api/tool_integration.py +0 -0
  171. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/api/tools.py +0 -0
  172. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/commands/__init__.py +0 -0
  173. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/commands/command_registry.py +0 -0
  174. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/commands/config_command.py +0 -0
  175. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/commands/dependency_container.py +0 -0
  176. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/commands/health_command.py +0 -0
  177. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/commands/result.py +0 -0
  178. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/config.py +0 -0
  179. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/core/__init__.py +0 -0
  180. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/core/errors.py +0 -0
  181. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/core/logging.py +0 -0
  182. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/core/utils.py +0 -0
  183. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/custom_openapi.py +0 -0
  184. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/openapi.py +0 -0
  185. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/py.typed +0 -0
  186. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/schemas/base_schema.json +0 -0
  187. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/schemas/openapi_schema.json +0 -0
  188. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/tests/__init__.py +0 -0
  189. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/tests/api/__init__.py +0 -0
  190. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/tests/api/test_cmd_endpoint.py +0 -0
  191. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/tests/api/test_middleware.py +0 -0
  192. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/tests/commands/__init__.py +0 -0
  193. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/tests/commands/test_config_command.py +0 -0
  194. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/tests/commands/test_echo_command.py +0 -0
  195. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/tests/commands/test_help_command.py +0 -0
  196. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/tests/conftest.py +0 -0
  197. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/tests/functional/__init__.py +0 -0
  198. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/tests/functional/test_api.py +0 -0
  199. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/tests/integration/__init__.py +0 -0
  200. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/tests/integration/test_cmd_integration.py +0 -0
  201. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/tests/integration/test_integration.py +0 -0
  202. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/tests/performance/__init__.py +0 -0
  203. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/tests/performance/test_performance.py +0 -0
  204. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/tests/stubs/__init__.py +0 -0
  205. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/tests/stubs/echo_command.py +0 -0
  206. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/tests/test_api_endpoints.py +0 -0
  207. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/tests/test_api_handlers.py +0 -0
  208. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/tests/test_base_command.py +0 -0
  209. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/tests/test_batch_requests.py +0 -0
  210. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/tests/test_command_registry.py +0 -0
  211. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/tests/test_config.py +0 -0
  212. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/tests/test_utils.py +0 -0
  213. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/tests/unit/__init__.py +0 -0
  214. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/tests/unit/test_base_command.py +0 -0
  215. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter/tests/unit/test_config.py +0 -0
  216. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter.egg-info/dependency_links.txt +0 -0
  217. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter.egg-info/requires.txt +0 -0
  218. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/mcp_proxy_adapter.egg-info/top_level.txt +0 -0
  219. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/requirements.txt +0 -0
  220. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/setup.cfg +0 -0
  221. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/tests/__init__.py +0 -0
  222. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/tests/api/__init__.py +0 -0
  223. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/tests/api/test_handler_dependency_injection.py +0 -0
  224. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/tests/api/test_tool_description.py +0 -0
  225. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/tests/commands/__init__.py +0 -0
  226. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/tests/commands/test_command_di.py +0 -0
  227. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/tests/commands/test_command_metadata.py +0 -0
  228. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/tests/commands/test_dependency_container.py +0 -0
  229. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/tests/commands/test_echo_command_di.py +0 -0
  230. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/tests/commands/test_help_command.py +0 -0
  231. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/tests/conftest.py +0 -0
  232. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/tests/integration/__init__.py +0 -0
  233. {mcp_proxy_adapter-3.1.2 → mcp_proxy_adapter-3.1.4}/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.2
3
+ Version: 3.1.4
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.2 introduces support for Dependency Injection (DI).
3
+ MCP Proxy Adapter version 3.1.4 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.2 библиотеки MCP Proxy Adapter добавлена поддержка внедрения зависимостей (DI).
3
+ В версии 3.1.4 библиотеки MCP Proxy Adapter добавлена поддержка внедрения зависимостей (DI).
4
4
  Эта функциональность позволяет создавать более гибкие и тестируемые команды, которые
5
5
  могут использовать общие сервисы и ресурсы.
6
6
 
@@ -0,0 +1,123 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Скрипт для исправления проблемы с обработкой JavaScript null в сервисе VSTL.
4
+
5
+ Этот скрипт демонстрирует проблему с обработкой null значений в VSTL
6
+ и способ её решения с помощью обновленной реализации метода validate_params.
7
+ """
8
+
9
+ import sys
10
+ import json
11
+ import requests
12
+ from typing import Dict, Any, Optional
13
+
14
+ # URL и заголовки для VSTL сервиса
15
+ VSTL_URL = "http://localhost:8000/cmd"
16
+ HEADERS = {"Content-Type": "application/json"}
17
+
18
+ def call_vstl_help(params: Optional[Dict[str, Any]] = None) -> Dict[str, Any]:
19
+ """
20
+ Вызывает команду help в сервисе VSTL.
21
+
22
+ Args:
23
+ params: Параметры для команды help
24
+
25
+ Returns:
26
+ Dict[str, Any]: Ответ от сервиса
27
+ """
28
+ payload = {
29
+ "jsonrpc": "2.0",
30
+ "method": "help",
31
+ "params": params or {},
32
+ "id": 1
33
+ }
34
+
35
+ response = requests.post(VSTL_URL, json=payload, headers=HEADERS)
36
+ return response.json()
37
+
38
+ def test_validate_params_fix():
39
+ """
40
+ Демонстрирует проблему с обработкой null и решение с помощью
41
+ улучшенной реализации метода validate_params.
42
+ """
43
+ # Оригинальная реализация метода validate_params
44
+ def original_validate_params(params: Dict[str, Any]) -> Dict[str, Any]:
45
+ if params is None:
46
+ params = {}
47
+
48
+ validated_params = params.copy()
49
+
50
+ for key, value in list(validated_params.items()):
51
+ if value is None or (isinstance(value, str) and value == ""):
52
+ if key in ["cmdname"]:
53
+ pass
54
+ else:
55
+ del validated_params[key]
56
+
57
+ return validated_params
58
+
59
+ # Улучшенная реализация метода validate_params
60
+ def improved_validate_params(params: Dict[str, Any]) -> Dict[str, Any]:
61
+ if params is None:
62
+ params = {}
63
+
64
+ validated_params = params.copy()
65
+
66
+ for key, value in list(validated_params.items()):
67
+ if value is None or (isinstance(value, str) and value.lower() in ["null", "none", ""]):
68
+ if key in ["cmdname"]:
69
+ validated_params[key] = None
70
+ else:
71
+ del validated_params[key]
72
+
73
+ return validated_params
74
+
75
+ # Тестирование оригинальной реализации
76
+ original_params = {"unknown_param": "null"}
77
+
78
+ print("\n=== Оригинальные параметры ===")
79
+ print(f"Параметры: {original_params}")
80
+ print("Результат validate_params (оригинальный):")
81
+ try:
82
+ print(original_validate_params(original_params))
83
+ except Exception as e:
84
+ print(f"ОШИБКА: {e}")
85
+
86
+ # Тестирование улучшенной реализации
87
+ print("\n=== Улучшенная обработка 'null' ===")
88
+ print(f"Параметры: {original_params}")
89
+ print("Результат validate_params (улучшенный):")
90
+ try:
91
+ print(improved_validate_params(original_params))
92
+ except Exception as e:
93
+ print(f"ОШИБКА: {e}")
94
+
95
+ # Проверка запроса к VSTL с null в параметрах
96
+ print("\n=== Тестирование запроса к VSTL ===")
97
+
98
+ # Тест с null в параметрах
99
+ print("\nТест 1: Запрос с null в параметрах")
100
+ response = call_vstl_help({"unknown_param": None})
101
+ print(f"Ответ: {json.dumps(response, indent=2)}")
102
+
103
+ # Тест с строковым "null" в параметрах
104
+ print("\nТест 2: Запрос со строковым 'null' в параметрах")
105
+ response = call_vstl_help({"unknown_param": "null"})
106
+ print(f"Ответ: {json.dumps(response, indent=2)}")
107
+
108
+ # Рекомендации по исправлению
109
+ print("\n=== Рекомендации по исправлению ===")
110
+ print("""
111
+ 1. Обновите метод validate_params в файле commands/base.py на улучшенную версию:
112
+ - Добавьте проверку на строки "null" и "none" (в любом регистре)
113
+ - Для параметров, которые могут быть None, преобразуйте их в Python None
114
+
115
+ 2. Обновите метод execute команды help, чтобы игнорировать неизвестные параметры:
116
+ - Добавьте аргумент **kwargs в сигнатуру метода
117
+
118
+ Эти изменения улучшат совместимость с клиентами, отправляющими JavaScript null
119
+ и сделают API более устойчивым к различным форматам входных данных.
120
+ """)
121
+
122
+ if __name__ == "__main__":
123
+ test_validate_params_fix()
@@ -0,0 +1,177 @@
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)
@@ -81,9 +81,28 @@ class Command(ABC):
81
81
  Raises:
82
82
  ValidationError: If parameters are invalid.
83
83
  """
84
+ # Ensure params is a dictionary, even if None was passed
85
+ if params is None:
86
+ params = {}
87
+
88
+ # Create a copy to avoid modifying the input dictionary during iteration
89
+ validated_params = params.copy()
90
+
91
+ # Handle None values and empty strings in parameters
92
+ for key, value in list(validated_params.items()):
93
+ # Process None values or empty strings - this helps with JavaScript null/undefined conversions
94
+ if value is None or (isinstance(value, str) and value.lower() in ["null", "none", ""]):
95
+ # For commands that specifically handle None values, keep the parameter
96
+ # (like help), keep the parameter but ensure it's a proper Python None
97
+ if key in ["cmdname"]: # список параметров, для которых None является допустимым значением
98
+ validated_params[key] = None
99
+ else:
100
+ # For most parameters, remove None values to avoid issues
101
+ del validated_params[key]
102
+
84
103
  # This is a simple implementation that can be overridden by subclasses
85
104
  # In real implementation this method would validate parameters against the schema
86
- return params
105
+ return validated_params
87
106
 
88
107
  @classmethod
89
108
  async def run(cls, **kwargs) -> CommandResult:
@@ -109,6 +128,10 @@ class Command(ABC):
109
128
  command_name = command_name[:-7]
110
129
  else:
111
130
  command_name = cls.name
131
+
132
+ # Ensure kwargs is never None
133
+ if kwargs is None:
134
+ kwargs = {}
112
135
 
113
136
  # Parameters validation
114
137
  validated_params = cls.validate_params(kwargs)
@@ -118,12 +118,13 @@ class HelpCommand(Command):
118
118
  name = "help"
119
119
  result_class = HelpResult
120
120
 
121
- async def execute(self, cmdname: Optional[str] = None) -> HelpResult:
121
+ async def execute(self, cmdname: Optional[str] = None, **kwargs) -> HelpResult:
122
122
  """
123
123
  Execute help command.
124
124
 
125
125
  Args:
126
126
  cmdname: Name of the command to get information about (optional)
127
+ **kwargs: Any additional parameters (will be ignored)
127
128
 
128
129
  Returns:
129
130
  HelpResult: Help command result
@@ -131,8 +132,9 @@ class HelpCommand(Command):
131
132
  Raises:
132
133
  NotFoundError: If specified command not found
133
134
  """
134
- # If cmdname is provided, return information about specific command
135
- if cmdname:
135
+ # Handle case when cmdname is provided
136
+ # Important: explicitly check for None or empty string
137
+ if cmdname is not None and cmdname != "":
136
138
  try:
137
139
  # Get command metadata from registry
138
140
  command_metadata = registry.get_command_metadata(cmdname)
@@ -1,3 +1,3 @@
1
1
  """Version information for MCP Microservice."""
2
2
 
3
- __version__ = "3.1.2"
3
+ __version__ = "3.1.4"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcp-proxy-adapter
3
- Version: 3.1.2
3
+ Version: 3.1.4
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
@@ -102,8 +102,10 @@ docs/RU/user/deployment.md
102
102
  docs/RU/user/examples.md
103
103
  docs/RU/user/installation.md
104
104
  examples/__init__.py
105
+ examples/fix_vstl_help.py
105
106
  examples/server.py
106
107
  examples/simple_server.py
108
+ examples/test_package_3.1.4.py
107
109
  examples/test_server.py
108
110
  examples/tool_description_example.py
109
111
  examples/anti_patterns/README.md
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "mcp-proxy-adapter"
7
- version = "3.1.2"
7
+ version = "3.1.4"
8
8
  description = "Reliable microservice with unified JSON-RPC endpoint"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.8"
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
2
2
 
3
3
  setup(
4
4
  name="mcp-proxy-adapter",
5
- version="3.1.2",
5
+ version="3.1.4",
6
6
  description="Adapter for MCP Proxy JSON-RPC communications",
7
7
  long_description=open("README.md").read(),
8
8
  long_description_content_type="text/markdown",