mcp-mesh 0.6.1__tar.gz → 0.6.2__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 (150) hide show
  1. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/.gitignore +1 -1
  2. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/PKG-INFO +1 -1
  3. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/__init__.py +1 -1
  4. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/mesh_llm_agent_injector.py +53 -9
  5. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/api_heartbeat/api_dependency_resolution.py +54 -21
  6. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/mcp_heartbeat/dependency_resolution.py +43 -26
  7. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/pyproject.toml +4 -4
  8. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/LICENSE +0 -0
  9. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/README.md +0 -0
  10. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/__init__.py +0 -0
  11. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/async_mcp_client.py +0 -0
  12. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/base_injector.py +0 -0
  13. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/decorator_registry.py +0 -0
  14. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/dependency_injector.py +0 -0
  15. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/full_mcp_proxy.py +0 -0
  16. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/http_wrapper.py +0 -0
  17. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/llm_config.py +0 -0
  18. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/llm_errors.py +0 -0
  19. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/mcp_client_proxy.py +0 -0
  20. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/mesh_llm_agent.py +0 -0
  21. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/provider_handlers/__init__.py +0 -0
  22. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/provider_handlers/base_provider_handler.py +0 -0
  23. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/provider_handlers/claude_handler.py +0 -0
  24. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/provider_handlers/generic_handler.py +0 -0
  25. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/provider_handlers/openai_handler.py +0 -0
  26. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/provider_handlers/provider_handler_registry.py +0 -0
  27. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/response_parser.py +0 -0
  28. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/self_dependency_proxy.py +0 -0
  29. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/session_aware_client.py +0 -0
  30. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/session_manager.py +0 -0
  31. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/signature_analyzer.py +0 -0
  32. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/tool_executor.py +0 -0
  33. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/tool_schema_builder.py +0 -0
  34. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/unified_mcp_proxy.py +0 -0
  35. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/.openapi-generator/FILES +0 -0
  36. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/.openapi-generator/VERSION +0 -0
  37. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/.openapi-generator-ignore +0 -0
  38. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/__init__.py +0 -0
  39. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/api/__init__.py +0 -0
  40. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/api/agents_api.py +0 -0
  41. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/api/health_api.py +0 -0
  42. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/api/tracing_api.py +0 -0
  43. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/api_client.py +0 -0
  44. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/api_response.py +0 -0
  45. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/configuration.py +0 -0
  46. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/exceptions.py +0 -0
  47. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/__init__.py +0 -0
  48. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/agent_info.py +0 -0
  49. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/agent_metadata.py +0 -0
  50. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/agent_metadata_dependencies_inner.py +0 -0
  51. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/agent_metadata_dependencies_inner_one_of.py +0 -0
  52. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/agent_registration.py +0 -0
  53. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/agent_registration_metadata.py +0 -0
  54. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/agents_list_response.py +0 -0
  55. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/capability_info.py +0 -0
  56. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/decorator_agent_metadata.py +0 -0
  57. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/decorator_agent_request.py +0 -0
  58. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/decorator_info.py +0 -0
  59. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/dependency_info.py +0 -0
  60. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/dependency_resolution_info.py +0 -0
  61. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/error_response.py +0 -0
  62. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/health_response.py +0 -0
  63. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/heartbeat_request.py +0 -0
  64. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/heartbeat_request_metadata.py +0 -0
  65. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/heartbeat_response.py +0 -0
  66. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/llm_provider.py +0 -0
  67. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/llm_tool_filter.py +0 -0
  68. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/llm_tool_filter_filter_inner.py +0 -0
  69. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/llm_tool_filter_filter_inner_one_of.py +0 -0
  70. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/llm_tool_info.py +0 -0
  71. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/mesh_agent_register_metadata.py +0 -0
  72. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/mesh_agent_registration.py +0 -0
  73. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/mesh_registration_response.py +0 -0
  74. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/mesh_registration_response_dependencies_resolved_value_inner.py +0 -0
  75. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/mesh_tool_dependency_registration.py +0 -0
  76. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/mesh_tool_register_metadata.py +0 -0
  77. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/mesh_tool_registration.py +0 -0
  78. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/registration_response.py +0 -0
  79. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/resolved_llm_provider.py +0 -0
  80. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/rich_dependency.py +0 -0
  81. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/root_response.py +0 -0
  82. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/standardized_dependency.py +0 -0
  83. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/trace_event.py +0 -0
  84. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/py.typed +0 -0
  85. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/rest.py +0 -0
  86. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/__init__.py +0 -0
  87. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/api_heartbeat/__init__.py +0 -0
  88. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/api_heartbeat/api_fast_heartbeat_check.py +0 -0
  89. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/api_heartbeat/api_health_check.py +0 -0
  90. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/api_heartbeat/api_heartbeat_orchestrator.py +0 -0
  91. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/api_heartbeat/api_heartbeat_pipeline.py +0 -0
  92. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/api_heartbeat/api_heartbeat_send.py +0 -0
  93. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/api_heartbeat/api_lifespan_integration.py +0 -0
  94. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/api_heartbeat/api_registry_connection.py +0 -0
  95. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/api_startup/__init__.py +0 -0
  96. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/api_startup/api_pipeline.py +0 -0
  97. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/api_startup/api_server_setup.py +0 -0
  98. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/api_startup/fastapi_discovery.py +0 -0
  99. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/api_startup/middleware_integration.py +0 -0
  100. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/api_startup/route_collection.py +0 -0
  101. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/api_startup/route_integration.py +0 -0
  102. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/mcp_heartbeat/__init__.py +0 -0
  103. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/mcp_heartbeat/fast_heartbeat_check.py +0 -0
  104. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/mcp_heartbeat/heartbeat_orchestrator.py +0 -0
  105. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/mcp_heartbeat/heartbeat_pipeline.py +0 -0
  106. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/mcp_heartbeat/heartbeat_send.py +0 -0
  107. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/mcp_heartbeat/lifespan_integration.py +0 -0
  108. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/mcp_heartbeat/llm_tools_resolution.py +0 -0
  109. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/mcp_heartbeat/registry_connection.py +0 -0
  110. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/mcp_startup/__init__.py +0 -0
  111. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/mcp_startup/configuration.py +0 -0
  112. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/mcp_startup/decorator_collection.py +0 -0
  113. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/mcp_startup/fastapiserver_setup.py +0 -0
  114. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/mcp_startup/fastmcpserver_discovery.py +0 -0
  115. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/mcp_startup/heartbeat_loop.py +0 -0
  116. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/mcp_startup/heartbeat_preparation.py +0 -0
  117. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/mcp_startup/server_discovery.py +0 -0
  118. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/mcp_startup/startup_orchestrator.py +0 -0
  119. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/mcp_startup/startup_pipeline.py +0 -0
  120. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/shared/__init__.py +0 -0
  121. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/shared/base_step.py +0 -0
  122. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/shared/mesh_pipeline.py +0 -0
  123. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/shared/pipeline_types.py +0 -0
  124. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/shared/registry_connection.py +0 -0
  125. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/shared/__init__.py +0 -0
  126. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/shared/config_resolver.py +0 -0
  127. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/shared/content_extractor.py +0 -0
  128. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/shared/defaults.py +0 -0
  129. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/shared/fast_heartbeat_status.py +0 -0
  130. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/shared/fastapi_middleware_manager.py +0 -0
  131. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/shared/health_check_cache.py +0 -0
  132. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/shared/host_resolver.py +0 -0
  133. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/shared/logging_config.py +0 -0
  134. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/shared/registry_client_wrapper.py +0 -0
  135. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/shared/server_discovery.py +0 -0
  136. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/shared/simple_shutdown.py +0 -0
  137. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/shared/sse_parser.py +0 -0
  138. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/shared/support_types.py +0 -0
  139. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/tracing/agent_context_helper.py +0 -0
  140. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/tracing/context.py +0 -0
  141. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/tracing/execution_tracer.py +0 -0
  142. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/tracing/fastapi_tracing_middleware.py +0 -0
  143. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/tracing/redis_metadata_publisher.py +0 -0
  144. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/tracing/trace_context_helper.py +0 -0
  145. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/tracing/utils.py +0 -0
  146. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/utils/fastmcp_schema_extractor.py +0 -0
  147. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/mesh/__init__.py +0 -0
  148. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/mesh/decorators.py +0 -0
  149. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/mesh/helpers.py +0 -0
  150. {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/mesh/types.py +0 -0
@@ -179,7 +179,7 @@ capability_store/
179
179
 
180
180
  # Go binaries
181
181
  mcp-mesh-dev
182
- mcp-mesh-registry
182
+ /mcp-mesh-registry
183
183
  meshctl
184
184
  bin/meshctl
185
185
  *.exe
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcp-mesh
3
- Version: 0.6.1
3
+ Version: 0.6.2
4
4
  Summary: Kubernetes-native platform for distributed MCP applications
5
5
  Project-URL: Homepage, https://github.com/dhyansraj/mcp-mesh
6
6
  Project-URL: Documentation, https://github.com/dhyansraj/mcp-mesh/tree/main/docs
@@ -31,7 +31,7 @@ from .engine.decorator_registry import (
31
31
  get_decorator_stats,
32
32
  )
33
33
 
34
- __version__ = "0.6.1"
34
+ __version__ = "0.6.2"
35
35
 
36
36
  # Store reference to runtime processor if initialized
37
37
  _runtime_processor = None
@@ -19,6 +19,35 @@ from .unified_mcp_proxy import UnifiedMCPProxy
19
19
  logger = logging.getLogger(__name__)
20
20
 
21
21
 
22
+ def extract_vendor_from_model(model: str) -> str | None:
23
+ """
24
+ Extract vendor name from LiteLLM model string.
25
+
26
+ LiteLLM uses vendor/model format (e.g., "anthropic/claude-sonnet-4-5").
27
+ This extracts the vendor for provider handler selection.
28
+
29
+ Args:
30
+ model: LiteLLM model string
31
+
32
+ Returns:
33
+ Vendor name (e.g., "anthropic", "openai") or None if not extractable
34
+
35
+ Examples:
36
+ "anthropic/claude-sonnet-4-5" -> "anthropic"
37
+ "openai/gpt-4o" -> "openai"
38
+ "gpt-4" -> None (no vendor prefix)
39
+ """
40
+ if not model:
41
+ return None
42
+
43
+ if "/" in model:
44
+ vendor = model.split("/")[0].lower().strip()
45
+ logger.debug(f"🔍 Extracted vendor '{vendor}' from model '{model}'")
46
+ return vendor
47
+
48
+ return None
49
+
50
+
22
51
  class MeshLlmAgentInjector(BaseInjector):
23
52
  """
24
53
  Manages dynamic injection of MeshLlmAgent proxies.
@@ -86,9 +115,7 @@ class MeshLlmAgentInjector(BaseInjector):
86
115
  exc_info=True,
87
116
  )
88
117
 
89
- def process_llm_providers(
90
- self, llm_providers: dict[str, dict[str, Any]]
91
- ) -> None:
118
+ def process_llm_providers(self, llm_providers: dict[str, dict[str, Any]]) -> None:
92
119
  """
93
120
  Process llm_providers from registry response (v0.6.1 mesh delegation).
94
121
 
@@ -181,9 +208,7 @@ class MeshLlmAgentInjector(BaseInjector):
181
208
  """
182
209
  function_name = provider_data.get("name")
183
210
  if not function_name:
184
- raise ValueError(
185
- f"Provider missing required 'name' field: {provider_data}"
186
- )
211
+ raise ValueError(f"Provider missing required 'name' field: {provider_data}")
187
212
 
188
213
  endpoint = provider_data.get("endpoint")
189
214
  if not endpoint:
@@ -493,6 +518,19 @@ class MeshLlmAgentInjector(BaseInjector):
493
518
  is_template = config_dict.get("is_template", False)
494
519
  template_path = config_dict.get("template_path")
495
520
 
521
+ # Determine vendor for provider handler selection
522
+ # Priority: 1) From registry (mesh delegation), 2) From model name, 3) None
523
+ vendor = llm_agent_data.get("vendor")
524
+ if not vendor:
525
+ # For direct LiteLLM calls, extract vendor from model name
526
+ # e.g., "anthropic/claude-sonnet-4-5" -> "anthropic"
527
+ model = config_dict.get("model", "")
528
+ vendor = extract_vendor_from_model(model)
529
+ if vendor:
530
+ logger.info(
531
+ f"🔍 Extracted vendor '{vendor}' from model '{model}' for handler selection"
532
+ )
533
+
496
534
  # Create MeshLlmAgent with both metadata and proxies
497
535
  llm_agent = MeshLlmAgent(
498
536
  config=llm_config,
@@ -503,14 +541,20 @@ class MeshLlmAgentInjector(BaseInjector):
503
541
  tool_proxies=llm_agent_data["tools_proxies"], # Proxies for execution
504
542
  template_path=template_path if is_template else None,
505
543
  context_value=context_value if is_template else None,
506
- provider_proxy=llm_agent_data.get("provider_proxy"), # Provider proxy for mesh delegation
507
- vendor=llm_agent_data.get("vendor"), # Phase 2: Vendor for provider handler selection
544
+ provider_proxy=llm_agent_data.get(
545
+ "provider_proxy"
546
+ ), # Provider proxy for mesh delegation
547
+ vendor=vendor, # Vendor for provider handler selection (from registry or model name)
508
548
  )
509
549
 
510
550
  logger.debug(
511
551
  f"🤖 Created MeshLlmAgent for {function_id} with {len(llm_agent_data['tools_metadata'])} tools"
512
552
  + (f", template={template_path}" if is_template else "")
513
- + (f", provider_proxy={llm_agent_data.get('provider_proxy').function_name if llm_agent_data.get('provider_proxy') else 'None'}" if isinstance(config_dict.get("provider"), dict) else "")
553
+ + (
554
+ f", provider_proxy={llm_agent_data.get('provider_proxy').function_name if llm_agent_data.get('provider_proxy') else 'None'}"
555
+ if isinstance(config_dict.get("provider"), dict)
556
+ else ""
557
+ )
514
558
  )
515
559
 
516
560
  return llm_agent
@@ -228,11 +228,10 @@ class APIDependencyResolutionStep(PipelineStep):
228
228
 
229
229
  # Import here to avoid circular imports
230
230
  from ...engine.dependency_injector import get_global_injector
231
- from ...engine.full_mcp_proxy import EnhancedFullMCPProxy, FullMCPProxy
232
- from ...engine.mcp_client_proxy import (
233
- EnhancedMCPClientProxy,
234
- MCPClientProxy,
235
- )
231
+ from ...engine.full_mcp_proxy import (EnhancedFullMCPProxy,
232
+ FullMCPProxy)
233
+ from ...engine.mcp_client_proxy import (EnhancedMCPClientProxy,
234
+ MCPClientProxy)
236
235
 
237
236
  injector = get_global_injector()
238
237
 
@@ -289,13 +288,16 @@ class APIDependencyResolutionStep(PipelineStep):
289
288
  # Import here to avoid circular imports
290
289
  import os
291
290
 
292
- from ...engine.self_dependency_proxy import SelfDependencyProxy
293
- from ...engine.unified_mcp_proxy import EnhancedUnifiedMCPProxy
291
+ from ...engine.self_dependency_proxy import \
292
+ SelfDependencyProxy
293
+ from ...engine.unified_mcp_proxy import \
294
+ EnhancedUnifiedMCPProxy
294
295
 
295
296
  # Get current agent ID for self-dependency detection
296
297
  current_agent_id = None
297
298
  try:
298
- from ...engine.decorator_registry import DecoratorRegistry
299
+ from ...engine.decorator_registry import \
300
+ DecoratorRegistry
299
301
 
300
302
  config = DecoratorRegistry.get_resolved_agent_config()
301
303
  current_agent_id = config["agent_id"]
@@ -328,18 +330,48 @@ class APIDependencyResolutionStep(PipelineStep):
328
330
  )
329
331
 
330
332
  if is_self_dependency:
331
- # Note: Self-dependencies are unusual for API services but we handle them
332
- self.logger.warning(
333
- f"⚠️ API SELF-DEPENDENCY detected for '{capability}' - "
334
- f"this is unusual for API services. Consider refactoring."
335
- )
336
- # For API services, we don't have access to original functions in the same way
337
- # Fall back to unified proxy (same as cross-service)
338
- new_proxy = EnhancedUnifiedMCPProxy(
339
- endpoint,
340
- dep_function_name,
341
- kwargs_config=kwargs_config,
342
- )
333
+ # Create self-dependency proxy with WRAPPER function (not original)
334
+ # The wrapper has dependency injection logic, so calling it ensures
335
+ # the target function's dependencies are also injected properly.
336
+ wrapper_func = None
337
+ if dep_function_name in mesh_tools:
338
+ wrapper_func = mesh_tools[dep_function_name].function
339
+ self.logger.debug(
340
+ f"🔍 Found wrapper for '{dep_function_name}' in DecoratorRegistry"
341
+ )
342
+
343
+ if wrapper_func:
344
+ new_proxy = SelfDependencyProxy(
345
+ wrapper_func, dep_function_name
346
+ )
347
+ self.logger.info(
348
+ f"🔄 API SELF-DEPENDENCY: Using wrapper for '{capability}' "
349
+ f"(local call with full DI support)"
350
+ )
351
+ else:
352
+ # Fallback to original function if wrapper not found
353
+ original_func = injector.find_original_function(
354
+ dep_function_name
355
+ )
356
+ if original_func:
357
+ new_proxy = SelfDependencyProxy(
358
+ original_func, dep_function_name
359
+ )
360
+ self.logger.warning(
361
+ f"⚠️ API SELF-DEPENDENCY: Using original function for '{capability}' "
362
+ f"(wrapper not found, DI may not work for nested deps)"
363
+ )
364
+ else:
365
+ self.logger.warning(
366
+ f"⚠️ API SELF-DEPENDENCY: Cannot create SelfDependencyProxy for '{capability}', "
367
+ f"falling back to HTTP (may cause issues)"
368
+ )
369
+ # Fall back to unified proxy (same as cross-service)
370
+ new_proxy = EnhancedUnifiedMCPProxy(
371
+ endpoint,
372
+ dep_function_name,
373
+ kwargs_config=kwargs_config,
374
+ )
343
375
  else:
344
376
  # Create cross-service proxy using unified proxy (same as MCP pipeline)
345
377
  new_proxy = EnhancedUnifiedMCPProxy(
@@ -450,7 +482,8 @@ class APIDependencyResolutionStep(PipelineStep):
450
482
  Proxy instance
451
483
  """
452
484
  from ...engine.full_mcp_proxy import EnhancedFullMCPProxy, FullMCPProxy
453
- from ...engine.mcp_client_proxy import EnhancedMCPClientProxy, MCPClientProxy
485
+ from ...engine.mcp_client_proxy import (EnhancedMCPClientProxy,
486
+ MCPClientProxy)
454
487
 
455
488
  if proxy_type == "FullMCPProxy":
456
489
  # Use enhanced proxy if kwargs available
@@ -255,12 +255,14 @@ class DependencyResolutionStep(PipelineStep):
255
255
  # Get current agent ID for self-dependency detection
256
256
  import os
257
257
 
258
- from ...engine.self_dependency_proxy import SelfDependencyProxy
258
+ from ...engine.self_dependency_proxy import \
259
+ SelfDependencyProxy
259
260
 
260
261
  # Get current agent ID from DecoratorRegistry (single source of truth)
261
262
  current_agent_id = None
262
263
  try:
263
- from ...engine.decorator_registry import DecoratorRegistry
264
+ from ...engine.decorator_registry import \
265
+ DecoratorRegistry
264
266
 
265
267
  config = DecoratorRegistry.get_resolved_agent_config()
266
268
  current_agent_id = config["agent_id"]
@@ -293,36 +295,51 @@ class DependencyResolutionStep(PipelineStep):
293
295
  )
294
296
 
295
297
  if is_self_dependency:
296
- # Create self-dependency proxy with cached function reference
297
- original_func = injector.find_original_function(
298
- dep_function_name
299
- )
300
- if original_func:
301
- new_proxy = SelfDependencyProxy(
302
- original_func, dep_function_name
298
+ # Create self-dependency proxy with WRAPPER function (not original)
299
+ # The wrapper has dependency injection logic, so calling it ensures
300
+ # the target function's dependencies are also injected properly.
301
+ wrapper_func = None
302
+ if dep_function_name in mesh_tools:
303
+ wrapper_func = mesh_tools[dep_function_name].function
304
+ self.logger.debug(
305
+ f"🔍 Found wrapper for '{dep_function_name}' in DecoratorRegistry"
303
306
  )
304
- self.logger.warning(
305
- f"⚠️ SELF-DEPENDENCY: Using direct function call for '{capability}' "
306
- f"instead of HTTP to avoid deadlock. Consider refactoring to "
307
- f"eliminate self-dependencies if possible."
307
+
308
+ if wrapper_func:
309
+ new_proxy = SelfDependencyProxy(
310
+ wrapper_func, dep_function_name
308
311
  )
309
312
  self.logger.info(
310
- f"🔄 Updated to SelfDependencyProxy: '{capability}'"
313
+ f"🔄 SELF-DEPENDENCY: Using wrapper for '{capability}' "
314
+ f"(local call with full DI support)"
311
315
  )
312
316
  else:
313
- self.logger.error(
314
- f"❌ Cannot create SelfDependencyProxy for '{capability}': "
315
- f"original function '{dep_function_name}' not found, falling back to HTTP"
316
- )
317
- # Use unified proxy for fallback
318
- new_proxy = EnhancedUnifiedMCPProxy(
319
- endpoint,
320
- dep_function_name,
321
- kwargs_config=kwargs_config,
322
- )
323
- self.logger.debug(
324
- f"🔧 Created EnhancedUnifiedMCPProxy (fallback): {kwargs_config}"
317
+ # Fallback to original function if wrapper not found
318
+ original_func = injector.find_original_function(
319
+ dep_function_name
325
320
  )
321
+ if original_func:
322
+ new_proxy = SelfDependencyProxy(
323
+ original_func, dep_function_name
324
+ )
325
+ self.logger.warning(
326
+ f"⚠️ SELF-DEPENDENCY: Using original function for '{capability}' "
327
+ f"(wrapper not found, DI may not work for nested deps)"
328
+ )
329
+ else:
330
+ self.logger.error(
331
+ f"❌ Cannot create SelfDependencyProxy for '{capability}': "
332
+ f"neither wrapper nor original function '{dep_function_name}' found, falling back to HTTP"
333
+ )
334
+ # Use unified proxy for fallback
335
+ new_proxy = EnhancedUnifiedMCPProxy(
336
+ endpoint,
337
+ dep_function_name,
338
+ kwargs_config=kwargs_config,
339
+ )
340
+ self.logger.debug(
341
+ f"🔧 Created EnhancedUnifiedMCPProxy (fallback): {kwargs_config}"
342
+ )
326
343
  else:
327
344
  # Create cross-service proxy using unified proxy
328
345
  new_proxy = EnhancedUnifiedMCPProxy(
@@ -6,7 +6,7 @@ build-backend = "hatchling.build"
6
6
 
7
7
  [project]
8
8
  name = "mcp-mesh"
9
- version = "0.6.1"
9
+ version = "0.6.2"
10
10
  description = "Kubernetes-native platform for distributed MCP applications"
11
11
  readme = "README.md"
12
12
  license = { text = "MIT" }
@@ -117,7 +117,7 @@ extend-exclude = '''
117
117
  '''
118
118
 
119
119
  [tool.ruff]
120
- target-version = "0.6.1"
120
+ target-version = "0.6.2"
121
121
  line-length = 88
122
122
 
123
123
  [tool.ruff.lint]
@@ -154,7 +154,7 @@ ignore = [
154
154
  "tests/**" = ["E712", "F841", "B007", "C401", "F401"] # Relax style requirements for test files
155
155
 
156
156
  [tool.mypy]
157
- python_version = "0.6.1"
157
+ python_version = "0.6.2"
158
158
  check_untyped_defs = false # Temporarily relaxed
159
159
  disallow_any_generics = false # Temporarily relaxed
160
160
  disallow_incomplete_defs = false # Temporarily relaxed
@@ -166,7 +166,7 @@ warn_return_any = false # Temporarily relaxed
166
166
  exclude = ["tests/", ".*agent_server_generated.*", ".*registry_client_generated.*"] # Skip type checking for test and generated files
167
167
 
168
168
  [tool.pytest.ini_options]
169
- minversion = "0.6.1"
169
+ minversion = "0.6.2"
170
170
  addopts = "-ra -q --strict-markers --strict-config"
171
171
  testpaths = [
172
172
  "tests",
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes