fast-agent-mcp 0.2.53__tar.gz → 0.2.55__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.

Potentially problematic release.


This version of fast-agent-mcp might be problematic. Click here for more details.

Files changed (260) hide show
  1. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/PKG-INFO +2 -2
  2. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/pyproject.toml +2 -2
  3. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/agents/base_agent.py +54 -0
  4. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/llm/model_database.py +4 -1
  5. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/llm/providers/augmented_llm_aliyun.py +7 -4
  6. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/llm/providers/augmented_llm_groq.py +1 -1
  7. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/llm/providers/augmented_llm_openai.py +6 -6
  8. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/mcp/interfaces.py +3 -1
  9. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/mcp/mcp_aggregator.py +52 -0
  10. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/.gitignore +0 -0
  11. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/LICENSE +0 -0
  12. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/README.md +0 -0
  13. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/azure-openai/fastagent.config.yaml +0 -0
  14. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/bedrock/fast-agent.config.yaml +0 -0
  15. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/custom-agents/agent.py +0 -0
  16. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/custom-agents/fastagent.config.yaml +0 -0
  17. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/data-analysis/analysis-campaign.py +0 -0
  18. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/data-analysis/analysis.py +0 -0
  19. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/data-analysis/fastagent.config.yaml +0 -0
  20. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/data-analysis/mount-point/WA_Fn-UseC_-HR-Employee-Attrition.csv +0 -0
  21. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/mcp/elicitations/elicitation_account_server.py +0 -0
  22. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/mcp/elicitations/elicitation_forms_server.py +0 -0
  23. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/mcp/elicitations/elicitation_game_server.py +0 -0
  24. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/mcp/elicitations/fastagent.config.yaml +0 -0
  25. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/mcp/elicitations/fastagent.secrets.yaml.example +0 -0
  26. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/mcp/elicitations/forms_demo.py +0 -0
  27. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/mcp/elicitations/game_character.py +0 -0
  28. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/mcp/elicitations/game_character_handler.py +0 -0
  29. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/mcp/elicitations/tool_call.py +0 -0
  30. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/mcp/mcp-filtering/fastagent.config.yaml +0 -0
  31. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/mcp/mcp-filtering/fastagent.secrets.yaml.example +0 -0
  32. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/mcp/mcp-filtering/mcp_server.py +0 -0
  33. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/mcp/mcp-filtering/test_mcp_filtering.py +0 -0
  34. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/mcp/state-transfer/agent_one.py +0 -0
  35. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/mcp/state-transfer/agent_two.py +0 -0
  36. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/mcp/state-transfer/fastagent.config.yaml +0 -0
  37. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/mcp/state-transfer/fastagent.secrets.yaml.example +0 -0
  38. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/mcp/vision-examples/cat.png +0 -0
  39. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/mcp/vision-examples/example1.py +0 -0
  40. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/mcp/vision-examples/example2.py +0 -0
  41. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/mcp/vision-examples/example3.py +0 -0
  42. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/mcp/vision-examples/fastagent.config.yaml +0 -0
  43. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/otel/agent.py +0 -0
  44. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/otel/agent2.py +0 -0
  45. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/otel/docker-compose.yaml +0 -0
  46. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/otel/fastagent.config.yaml +0 -0
  47. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/researcher/fastagent.config.yaml +0 -0
  48. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/researcher/researcher-eval.py +0 -0
  49. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/researcher/researcher-imp.py +0 -0
  50. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/researcher/researcher.py +0 -0
  51. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/tensorzero/.env.sample +0 -0
  52. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/tensorzero/Makefile +0 -0
  53. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/tensorzero/README.md +0 -0
  54. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/tensorzero/agent.py +0 -0
  55. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/tensorzero/demo_images/clam.jpg +0 -0
  56. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/tensorzero/demo_images/crab.png +0 -0
  57. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/tensorzero/demo_images/shrimp.png +0 -0
  58. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/tensorzero/docker-compose.yml +0 -0
  59. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/tensorzero/fastagent.config.yaml +0 -0
  60. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/tensorzero/image_demo.py +0 -0
  61. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/tensorzero/mcp_server/Dockerfile +0 -0
  62. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/tensorzero/mcp_server/entrypoint.sh +0 -0
  63. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/tensorzero/mcp_server/mcp_server.py +0 -0
  64. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/tensorzero/mcp_server/pyproject.toml +0 -0
  65. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/tensorzero/simple_agent.py +0 -0
  66. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/tensorzero/tensorzero_config/system_schema.json +0 -0
  67. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/tensorzero/tensorzero_config/system_template.minijinja +0 -0
  68. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/tensorzero/tensorzero_config/tensorzero.toml +0 -0
  69. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/workflows/chaining.py +0 -0
  70. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/workflows/evaluator.py +0 -0
  71. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/workflows/fastagent.config.yaml +0 -0
  72. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/workflows/graded_report.md +0 -0
  73. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/workflows/human_input.py +0 -0
  74. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/workflows/orchestrator.py +0 -0
  75. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/workflows/parallel.py +0 -0
  76. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/workflows/router.py +0 -0
  77. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/workflows/short_story.md +0 -0
  78. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/examples/workflows/short_story.txt +0 -0
  79. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/hatch_build.py +0 -0
  80. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/__init__.py +0 -0
  81. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/agents/__init__.py +0 -0
  82. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/agents/agent.py +0 -0
  83. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/agents/workflow/__init__.py +0 -0
  84. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/agents/workflow/chain_agent.py +0 -0
  85. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/agents/workflow/evaluator_optimizer.py +0 -0
  86. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/agents/workflow/iterative_planner.py +0 -0
  87. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/agents/workflow/orchestrator_agent.py +0 -0
  88. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/agents/workflow/orchestrator_models.py +0 -0
  89. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/agents/workflow/orchestrator_prompts.py +0 -0
  90. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/agents/workflow/parallel_agent.py +0 -0
  91. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/agents/workflow/router_agent.py +0 -0
  92. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/app.py +0 -0
  93. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/cli/__init__.py +0 -0
  94. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/cli/__main__.py +0 -0
  95. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/cli/commands/check_config.py +0 -0
  96. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/cli/commands/go.py +0 -0
  97. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/cli/commands/quickstart.py +0 -0
  98. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/cli/commands/server_helpers.py +0 -0
  99. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/cli/commands/setup.py +0 -0
  100. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/cli/commands/url_parser.py +0 -0
  101. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/cli/constants.py +0 -0
  102. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/cli/main.py +0 -0
  103. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/cli/terminal.py +0 -0
  104. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/config.py +0 -0
  105. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/console.py +0 -0
  106. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/context.py +0 -0
  107. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/context_dependent.py +0 -0
  108. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/core/__init__.py +0 -0
  109. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/core/agent_app.py +0 -0
  110. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/core/agent_types.py +0 -0
  111. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/core/direct_decorators.py +0 -0
  112. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/core/direct_factory.py +0 -0
  113. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/core/enhanced_prompt.py +0 -0
  114. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/core/error_handling.py +0 -0
  115. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/core/exceptions.py +0 -0
  116. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/core/fastagent.py +0 -0
  117. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/core/interactive_prompt.py +0 -0
  118. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/core/mcp_content.py +0 -0
  119. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/core/mermaid_utils.py +0 -0
  120. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/core/prompt.py +0 -0
  121. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/core/request_params.py +0 -0
  122. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/core/usage_display.py +0 -0
  123. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/core/validation.py +0 -0
  124. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/event_progress.py +0 -0
  125. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/executor/__init__.py +0 -0
  126. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/executor/executor.py +0 -0
  127. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/executor/task_registry.py +0 -0
  128. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/executor/workflow_signal.py +0 -0
  129. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/human_input/__init__.py +0 -0
  130. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/human_input/elicitation_form.py +0 -0
  131. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/human_input/elicitation_forms.py +0 -0
  132. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/human_input/elicitation_handler.py +0 -0
  133. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/human_input/elicitation_state.py +0 -0
  134. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/human_input/form_fields.py +0 -0
  135. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/human_input/handler.py +0 -0
  136. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/human_input/simple_form.py +0 -0
  137. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/human_input/types.py +0 -0
  138. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/llm/__init__.py +0 -0
  139. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/llm/augmented_llm.py +0 -0
  140. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/llm/augmented_llm_passthrough.py +0 -0
  141. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/llm/augmented_llm_playback.py +0 -0
  142. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/llm/augmented_llm_silent.py +0 -0
  143. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/llm/augmented_llm_slow.py +0 -0
  144. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/llm/memory.py +0 -0
  145. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/llm/model_factory.py +0 -0
  146. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/llm/prompt_utils.py +0 -0
  147. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/llm/provider_key_manager.py +0 -0
  148. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/llm/provider_types.py +0 -0
  149. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/llm/providers/__init__.py +0 -0
  150. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/llm/providers/anthropic_utils.py +0 -0
  151. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/llm/providers/augmented_llm_anthropic.py +0 -0
  152. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/llm/providers/augmented_llm_azure.py +0 -0
  153. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/llm/providers/augmented_llm_bedrock.py +0 -0
  154. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/llm/providers/augmented_llm_deepseek.py +0 -0
  155. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/llm/providers/augmented_llm_generic.py +0 -0
  156. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/llm/providers/augmented_llm_google_native.py +0 -0
  157. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/llm/providers/augmented_llm_google_oai.py +0 -0
  158. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/llm/providers/augmented_llm_openrouter.py +0 -0
  159. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/llm/providers/augmented_llm_tensorzero_openai.py +0 -0
  160. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/llm/providers/augmented_llm_xai.py +0 -0
  161. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/llm/providers/google_converter.py +0 -0
  162. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/llm/providers/multipart_converter_anthropic.py +0 -0
  163. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/llm/providers/multipart_converter_openai.py +0 -0
  164. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/llm/providers/openai_multipart.py +0 -0
  165. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/llm/providers/openai_utils.py +0 -0
  166. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/llm/providers/sampling_converter_anthropic.py +0 -0
  167. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/llm/providers/sampling_converter_openai.py +0 -0
  168. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/llm/sampling_converter.py +0 -0
  169. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/llm/sampling_format_converter.py +0 -0
  170. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/llm/usage_tracking.py +0 -0
  171. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/logging/__init__.py +0 -0
  172. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/logging/events.py +0 -0
  173. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/logging/json_serializer.py +0 -0
  174. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/logging/listeners.py +0 -0
  175. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/logging/logger.py +0 -0
  176. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/logging/rich_progress.py +0 -0
  177. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/logging/transport.py +0 -0
  178. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/mcp/__init__.py +0 -0
  179. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/mcp/common.py +0 -0
  180. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/mcp/elicitation_factory.py +0 -0
  181. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/mcp/elicitation_handlers.py +0 -0
  182. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/mcp/gen_client.py +0 -0
  183. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/mcp/helpers/__init__.py +0 -0
  184. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/mcp/helpers/content_helpers.py +0 -0
  185. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/mcp/helpers/server_config_helpers.py +0 -0
  186. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/mcp/hf_auth.py +0 -0
  187. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/mcp/logger_textio.py +0 -0
  188. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/mcp/mcp_agent_client_session.py +0 -0
  189. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/mcp/mcp_connection_manager.py +0 -0
  190. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/mcp/mime_utils.py +0 -0
  191. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/mcp/prompt_message_multipart.py +0 -0
  192. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/mcp/prompt_render.py +0 -0
  193. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/mcp/prompt_serialization.py +0 -0
  194. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/mcp/prompts/__init__.py +0 -0
  195. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/mcp/prompts/__main__.py +0 -0
  196. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/mcp/prompts/prompt_constants.py +0 -0
  197. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/mcp/prompts/prompt_helpers.py +0 -0
  198. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/mcp/prompts/prompt_load.py +0 -0
  199. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/mcp/prompts/prompt_server.py +0 -0
  200. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/mcp/prompts/prompt_template.py +0 -0
  201. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/mcp/resource_utils.py +0 -0
  202. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/mcp/sampling.py +0 -0
  203. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/mcp_server/__init__.py +0 -0
  204. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/mcp_server/agent_server.py +0 -0
  205. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/mcp_server_registry.py +0 -0
  206. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/progress_display.py +0 -0
  207. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/py.typed +0 -0
  208. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/resources/examples/data-analysis/analysis-campaign.py +0 -0
  209. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/resources/examples/data-analysis/analysis.py +0 -0
  210. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/resources/examples/data-analysis/fastagent.config.yaml +0 -0
  211. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/resources/examples/data-analysis/mount-point/WA_Fn-UseC_-HR-Employee-Attrition.csv +0 -0
  212. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/resources/examples/mcp/elicitations/elicitation_account_server.py +0 -0
  213. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/resources/examples/mcp/elicitations/elicitation_forms_server.py +0 -0
  214. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/resources/examples/mcp/elicitations/elicitation_game_server.py +0 -0
  215. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/resources/examples/mcp/elicitations/fastagent.config.yaml +0 -0
  216. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/resources/examples/mcp/elicitations/fastagent.secrets.yaml.example +0 -0
  217. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/resources/examples/mcp/elicitations/forms_demo.py +0 -0
  218. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/resources/examples/mcp/elicitations/game_character.py +0 -0
  219. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/resources/examples/mcp/elicitations/game_character_handler.py +0 -0
  220. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/resources/examples/mcp/elicitations/tool_call.py +0 -0
  221. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/resources/examples/mcp/state-transfer/agent_one.py +0 -0
  222. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/resources/examples/mcp/state-transfer/agent_two.py +0 -0
  223. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/resources/examples/mcp/state-transfer/fastagent.config.yaml +0 -0
  224. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/resources/examples/mcp/state-transfer/fastagent.secrets.yaml.example +0 -0
  225. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/resources/examples/researcher/fastagent.config.yaml +0 -0
  226. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/resources/examples/researcher/researcher-eval.py +0 -0
  227. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/resources/examples/researcher/researcher-imp.py +0 -0
  228. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/resources/examples/researcher/researcher.py +0 -0
  229. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/resources/examples/tensorzero/.env.sample +0 -0
  230. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/resources/examples/tensorzero/Makefile +0 -0
  231. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/resources/examples/tensorzero/README.md +0 -0
  232. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/resources/examples/tensorzero/agent.py +0 -0
  233. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/resources/examples/tensorzero/demo_images/clam.jpg +0 -0
  234. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/resources/examples/tensorzero/demo_images/crab.png +0 -0
  235. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/resources/examples/tensorzero/demo_images/shrimp.png +0 -0
  236. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/resources/examples/tensorzero/docker-compose.yml +0 -0
  237. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/resources/examples/tensorzero/fastagent.config.yaml +0 -0
  238. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/resources/examples/tensorzero/image_demo.py +0 -0
  239. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/resources/examples/tensorzero/mcp_server/.python-version +0 -0
  240. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/resources/examples/tensorzero/mcp_server/Dockerfile +0 -0
  241. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/resources/examples/tensorzero/mcp_server/entrypoint.sh +0 -0
  242. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/resources/examples/tensorzero/mcp_server/mcp_server.py +0 -0
  243. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/resources/examples/tensorzero/mcp_server/pyproject.toml +0 -0
  244. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/resources/examples/tensorzero/simple_agent.py +0 -0
  245. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/resources/examples/tensorzero/tensorzero_config/system_schema.json +0 -0
  246. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/resources/examples/tensorzero/tensorzero_config/system_template.minijinja +0 -0
  247. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/resources/examples/tensorzero/tensorzero_config/tensorzero.toml +0 -0
  248. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/resources/examples/workflows/chaining.py +0 -0
  249. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/resources/examples/workflows/evaluator.py +0 -0
  250. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/resources/examples/workflows/fastagent.config.yaml +0 -0
  251. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/resources/examples/workflows/graded_report.md +0 -0
  252. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/resources/examples/workflows/human_input.py +0 -0
  253. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/resources/examples/workflows/orchestrator.py +0 -0
  254. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/resources/examples/workflows/parallel.py +0 -0
  255. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/resources/examples/workflows/router.py +0 -0
  256. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/resources/examples/workflows/short_story.md +0 -0
  257. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/resources/examples/workflows/short_story.txt +0 -0
  258. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/tools/tool_definition.py +0 -0
  259. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/ui/console_display.py +0 -0
  260. {fast_agent_mcp-0.2.53 → fast_agent_mcp-0.2.55}/src/mcp_agent/ui/console_display_legacy.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fast-agent-mcp
3
- Version: 0.2.53
3
+ Version: 0.2.55
4
4
  Summary: Define, Prompt and Test MCP enabled Agents and Workflows
5
5
  Author-email: Shaun Smith <fastagent@llmindset.co.uk>
6
6
  License: Apache License
@@ -218,7 +218,7 @@ Requires-Dist: deprecated>=1.2.18
218
218
  Requires-Dist: email-validator>=2.2.0
219
219
  Requires-Dist: fastapi>=0.115.6
220
220
  Requires-Dist: google-genai>=1.27.0
221
- Requires-Dist: mcp==1.12.1
221
+ Requires-Dist: mcp==1.12.4
222
222
  Requires-Dist: openai>=1.97.1
223
223
  Requires-Dist: opentelemetry-distro>=0.55b0
224
224
  Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.7.0
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "fast-agent-mcp"
3
- version = "0.2.53"
3
+ version = "0.2.55"
4
4
  description = "Define, Prompt and Test MCP enabled Agents and Workflows"
5
5
  readme = "README.md"
6
6
  license = { file = "LICENSE" }
@@ -15,7 +15,7 @@ classifiers = [
15
15
  requires-python = ">=3.13"
16
16
  dependencies = [
17
17
  "fastapi>=0.115.6",
18
- "mcp==1.12.1",
18
+ "mcp==1.12.4",
19
19
  "opentelemetry-distro>=0.55b0",
20
20
  "opentelemetry-exporter-otlp-proto-http>=1.7.0",
21
21
  "pydantic-settings>=2.7.0",
@@ -783,6 +783,60 @@ class BaseAgent(MCPAggregator, AgentProtocol):
783
783
 
784
784
  return result
785
785
 
786
+ async def list_mcp_tools(self, server_name: str | None = None) -> Mapping[str, List[Tool]]:
787
+ """
788
+ List all tools available to this agent, grouped by server and filtered by configuration.
789
+
790
+ Args:
791
+ server_name: Optional server name to list tools from
792
+
793
+ Returns:
794
+ Dictionary mapping server names to lists of Tool objects (with original names, not namespaced)
795
+ """
796
+ if not self.initialized:
797
+ await self.initialize()
798
+
799
+ # Get all tools from the parent class
800
+ result = await super().list_mcp_tools(server_name)
801
+
802
+ # Apply filtering if tools are specified in config
803
+ if self.config.tools is not None:
804
+ filtered_result = {}
805
+ for server, tools in result.items():
806
+ # Check if this server has tool filters
807
+ if server in self.config.tools:
808
+ filtered_tools = []
809
+ for tool in tools:
810
+ # Check if tool matches any pattern for this server
811
+ for pattern in self.config.tools[server]:
812
+ if self._matches_pattern(tool.name, pattern, server):
813
+ filtered_tools.append(tool)
814
+ break
815
+ if filtered_tools:
816
+ filtered_result[server] = filtered_tools
817
+ result = filtered_result
818
+
819
+ # Add human input tool to a special server if human input is configured
820
+ if self.human_input_callback:
821
+ from mcp.server.fastmcp.tools import Tool as FastTool
822
+
823
+ human_input_tool: FastTool = FastTool.from_function(self.request_human_input)
824
+ special_server_name = "__human_input__"
825
+
826
+ # If the special server doesn't exist in result, create it
827
+ if special_server_name not in result:
828
+ result[special_server_name] = []
829
+
830
+ result[special_server_name].append(
831
+ Tool(
832
+ name=HUMAN_INPUT_TOOL_NAME,
833
+ description=human_input_tool.description,
834
+ inputSchema=human_input_tool.parameters,
835
+ )
836
+ )
837
+
838
+ return result
839
+
786
840
  @property
787
841
  def agent_type(self) -> AgentType:
788
842
  """
@@ -91,7 +91,10 @@ class ModelDatabase:
91
91
  )
92
92
 
93
93
  QWEN_STANDARD = ModelParameters(
94
- context_window=32000, max_output_tokens=8192, tokenizes=QWEN_MULTIMODAL
94
+ context_window=32000,
95
+ max_output_tokens=8192,
96
+ tokenizes=QWEN_MULTIMODAL,
97
+ json_mode="object",
95
98
  )
96
99
  QWEN3_REASONER = ModelParameters(
97
100
  context_window=131072,
@@ -1,24 +1,26 @@
1
1
  from mcp_agent.core.request_params import RequestParams
2
2
  from mcp_agent.llm.provider_types import Provider
3
+ from mcp_agent.llm.providers.augmented_llm_groq import GroqAugmentedLLM
3
4
  from mcp_agent.llm.providers.augmented_llm_openai import OpenAIAugmentedLLM
4
5
 
5
6
  ALIYUN_BASE_URL = "https://dashscope.aliyuncs.com/compatible-mode/v1"
6
7
  DEFAULT_QWEN_MODEL = "qwen-turbo"
7
8
 
8
9
 
9
- class AliyunAugmentedLLM(OpenAIAugmentedLLM):
10
+ class AliyunAugmentedLLM(GroqAugmentedLLM):
10
11
  def __init__(self, *args, **kwargs) -> None:
11
- super().__init__(*args, provider=Provider.ALIYUN, **kwargs)
12
+ OpenAIAugmentedLLM.__init__(self, *args, provider=Provider.ALIYUN, **kwargs)
12
13
 
13
14
  def _initialize_default_params(self, kwargs: dict) -> RequestParams:
14
15
  """Initialize Aliyun-specific default parameters"""
15
16
  # Get base defaults from parent (includes ModelDatabase lookup)
16
17
  base_params = super()._initialize_default_params(kwargs)
17
-
18
+
18
19
  # Override with Aliyun-specific settings
19
20
  chosen_model = kwargs.get("model", DEFAULT_QWEN_MODEL)
20
21
  base_params.model = chosen_model
21
-
22
+ base_params.parallel_tool_calls = True
23
+
22
24
  return base_params
23
25
 
24
26
  def _base_url(self) -> str:
@@ -27,3 +29,4 @@ class AliyunAugmentedLLM(OpenAIAugmentedLLM):
27
29
  base_url = self.context.config.aliyun.base_url
28
30
 
29
31
  return base_url if base_url else ALIYUN_BASE_URL
32
+
@@ -46,7 +46,7 @@ class GroqAugmentedLLM(OpenAIAugmentedLLM):
46
46
  assert self.default_request_params
47
47
  llm_model = self.default_request_params.model or DEFAULT_GROQ_MODEL
48
48
  json_mode: str | None = ModelDatabase.get_json_mode(llm_model)
49
- if "json_object" == json_mode:
49
+ if "object" == json_mode:
50
50
  request_params.response_format = {"type": "json_object"}
51
51
 
52
52
  # Get the full schema and extract just the properties
@@ -321,20 +321,20 @@ class OpenAIAugmentedLLM(AugmentedLLM[ChatCompletionMessageParam, ChatCompletion
321
321
 
322
322
  response = await self.aggregator.list_tools()
323
323
  available_tools: List[ChatCompletionToolParam] | None = [
324
- ChatCompletionToolParam(
325
- type="function",
326
- function={
324
+ {
325
+ "type": "function",
326
+ "function": {
327
327
  "name": tool.name,
328
328
  "description": tool.description if tool.description else "",
329
329
  "parameters": self.adjust_schema(tool.inputSchema),
330
330
  },
331
- )
331
+ }
332
332
  for tool in response.tools
333
333
  ]
334
334
 
335
335
  if not available_tools:
336
- if self.provider == Provider.DEEPSEEK:
337
- available_tools = None # deepseek does not allow empty array
336
+ if self.provider in [Provider.DEEPSEEK, Provider.ALIYUN]:
337
+ available_tools = None # deepseek/aliyun does not allow empty array
338
338
  else:
339
339
  available_tools = []
340
340
 
@@ -25,7 +25,7 @@ from a2a.types import AgentCard
25
25
  from anyio.streams.memory import MemoryObjectReceiveStream, MemoryObjectSendStream
26
26
  from deprecated import deprecated
27
27
  from mcp import ClientSession
28
- from mcp.types import GetPromptResult, Prompt, PromptMessage, ReadResourceResult
28
+ from mcp.types import GetPromptResult, Prompt, PromptMessage, ReadResourceResult, Tool
29
29
  from pydantic import BaseModel
30
30
 
31
31
  from mcp_agent.core.agent_types import AgentType
@@ -203,6 +203,8 @@ class AgentProtocol(AugmentedLLMProtocol, Protocol):
203
203
 
204
204
  async def list_resources(self, server_name: str | None = None) -> Mapping[str, List[str]]: ...
205
205
 
206
+ async def list_mcp_tools(self, server_name: str | None = None) -> Mapping[str, List[Tool]]: ...
207
+
206
208
  async def get_resource(
207
209
  self, resource_uri: str, server_name: str | None = None
208
210
  ) -> ReadResourceResult:
@@ -1232,3 +1232,55 @@ class MCPAggregator(ContextDependent):
1232
1232
  logger.error(f"Error fetching resources from {s_name}: {e}")
1233
1233
 
1234
1234
  return results
1235
+
1236
+ async def list_mcp_tools(self, server_name: str | None = None) -> Dict[str, List[Tool]]:
1237
+ """
1238
+ List available tools from one or all servers, grouped by server name.
1239
+
1240
+ Args:
1241
+ server_name: Optional server name to list tools from. If not provided,
1242
+ lists tools from all servers.
1243
+
1244
+ Returns:
1245
+ Dictionary mapping server names to lists of Tool objects (with original names, not namespaced)
1246
+ """
1247
+ if not self.initialized:
1248
+ await self.load_servers()
1249
+
1250
+ results: Dict[str, List[Tool]] = {}
1251
+
1252
+ # Get the list of servers to check
1253
+ servers_to_check = [server_name] if server_name else self.server_names
1254
+
1255
+ # For each server, try to list its tools
1256
+ for s_name in servers_to_check:
1257
+ if s_name not in self.server_names:
1258
+ logger.error(f"Server '{s_name}' not found")
1259
+ continue
1260
+
1261
+ # Initialize empty list for this server
1262
+ results[s_name] = []
1263
+
1264
+ # Check if server supports tools capability
1265
+ if not await self.server_supports_feature(s_name, "tools"):
1266
+ logger.debug(f"Server '{s_name}' does not support tools")
1267
+ continue
1268
+
1269
+ try:
1270
+ # Use the _execute_on_server method to call list_tools on the server
1271
+ result = await self._execute_on_server(
1272
+ server_name=s_name,
1273
+ operation_type="tools-list",
1274
+ operation_name="",
1275
+ method_name="list_tools",
1276
+ method_args={},
1277
+ )
1278
+
1279
+ # Get tools from result (these have original names, not namespaced)
1280
+ tools = getattr(result, "tools", [])
1281
+ results[s_name] = tools
1282
+
1283
+ except Exception as e:
1284
+ logger.error(f"Error fetching tools from {s_name}: {e}")
1285
+
1286
+ return results
File without changes