fast-agent-mcp 0.2.48__tar.gz → 0.2.49__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 (241) hide show
  1. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/PKG-INFO +1 -1
  2. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/pyproject.toml +1 -1
  3. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/config.py +3 -2
  4. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/model_factory.py +1 -0
  5. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/providers/augmented_llm_azure.py +1 -1
  6. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/providers/augmented_llm_openai.py +16 -6
  7. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/providers/multipart_converter_openai.py +35 -18
  8. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/logging/rich_progress.py +13 -4
  9. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/mcp_agent_client_session.py +5 -3
  10. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/.gitignore +0 -0
  11. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/LICENSE +0 -0
  12. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/README.md +0 -0
  13. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/azure-openai/fastagent.config.yaml +0 -0
  14. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/bedrock/fast-agent.config.yaml +0 -0
  15. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/custom-agents/agent.py +0 -0
  16. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/custom-agents/fastagent.config.yaml +0 -0
  17. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/data-analysis/analysis-campaign.py +0 -0
  18. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/data-analysis/analysis.py +0 -0
  19. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/data-analysis/fastagent.config.yaml +0 -0
  20. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/data-analysis/mount-point/WA_Fn-UseC_-HR-Employee-Attrition.csv +0 -0
  21. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/mcp/elicitations/elicitation_account_server.py +0 -0
  22. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/mcp/elicitations/elicitation_forms_server.py +0 -0
  23. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/mcp/elicitations/elicitation_game_server.py +0 -0
  24. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/mcp/elicitations/fastagent.config.yaml +0 -0
  25. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/mcp/elicitations/fastagent.secrets.yaml.example +0 -0
  26. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/mcp/elicitations/forms_demo.py +0 -0
  27. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/mcp/elicitations/game_character.py +0 -0
  28. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/mcp/elicitations/game_character_handler.py +0 -0
  29. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/mcp/elicitations/tool_call.py +0 -0
  30. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/mcp/mcp-filtering/fastagent.config.yaml +0 -0
  31. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/mcp/mcp-filtering/fastagent.secrets.yaml.example +0 -0
  32. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/mcp/mcp-filtering/mcp_server.py +0 -0
  33. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/mcp/mcp-filtering/test_mcp_filtering.py +0 -0
  34. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/mcp/state-transfer/agent_one.py +0 -0
  35. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/mcp/state-transfer/agent_two.py +0 -0
  36. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/mcp/state-transfer/fastagent.config.yaml +0 -0
  37. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/mcp/state-transfer/fastagent.secrets.yaml.example +0 -0
  38. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/mcp/vision-examples/cat.png +0 -0
  39. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/mcp/vision-examples/example1.py +0 -0
  40. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/mcp/vision-examples/example2.py +0 -0
  41. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/mcp/vision-examples/example3.py +0 -0
  42. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/mcp/vision-examples/fastagent.config.yaml +0 -0
  43. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/otel/agent.py +0 -0
  44. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/otel/agent2.py +0 -0
  45. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/otel/docker-compose.yaml +0 -0
  46. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/otel/fastagent.config.yaml +0 -0
  47. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/researcher/fastagent.config.yaml +0 -0
  48. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/researcher/researcher-eval.py +0 -0
  49. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/researcher/researcher-imp.py +0 -0
  50. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/researcher/researcher.py +0 -0
  51. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/tensorzero/.env.sample +0 -0
  52. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/tensorzero/Makefile +0 -0
  53. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/tensorzero/README.md +0 -0
  54. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/tensorzero/agent.py +0 -0
  55. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/tensorzero/demo_images/clam.jpg +0 -0
  56. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/tensorzero/demo_images/crab.png +0 -0
  57. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/tensorzero/demo_images/shrimp.png +0 -0
  58. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/tensorzero/docker-compose.yml +0 -0
  59. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/tensorzero/fastagent.config.yaml +0 -0
  60. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/tensorzero/image_demo.py +0 -0
  61. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/tensorzero/mcp_server/Dockerfile +0 -0
  62. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/tensorzero/mcp_server/entrypoint.sh +0 -0
  63. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/tensorzero/mcp_server/mcp_server.py +0 -0
  64. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/tensorzero/simple_agent.py +0 -0
  65. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/tensorzero/tensorzero_config/system_schema.json +0 -0
  66. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/tensorzero/tensorzero_config/system_template.minijinja +0 -0
  67. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/tensorzero/tensorzero_config/tensorzero.toml +0 -0
  68. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/workflows/chaining.py +0 -0
  69. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/workflows/evaluator.py +0 -0
  70. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/workflows/fastagent.config.yaml +0 -0
  71. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/workflows/graded_report.md +0 -0
  72. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/workflows/human_input.py +0 -0
  73. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/workflows/orchestrator.py +0 -0
  74. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/workflows/parallel.py +0 -0
  75. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/workflows/router.py +0 -0
  76. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/workflows/short_story.md +0 -0
  77. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/examples/workflows/short_story.txt +0 -0
  78. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/hatch_build.py +0 -0
  79. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/__init__.py +0 -0
  80. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/agents/__init__.py +0 -0
  81. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/agents/agent.py +0 -0
  82. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/agents/base_agent.py +0 -0
  83. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/agents/workflow/__init__.py +0 -0
  84. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/agents/workflow/chain_agent.py +0 -0
  85. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/agents/workflow/evaluator_optimizer.py +0 -0
  86. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/agents/workflow/iterative_planner.py +0 -0
  87. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/agents/workflow/orchestrator_agent.py +0 -0
  88. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/agents/workflow/orchestrator_models.py +0 -0
  89. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/agents/workflow/orchestrator_prompts.py +0 -0
  90. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/agents/workflow/parallel_agent.py +0 -0
  91. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/agents/workflow/router_agent.py +0 -0
  92. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/app.py +0 -0
  93. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/cli/__init__.py +0 -0
  94. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/cli/__main__.py +0 -0
  95. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/cli/commands/check_config.py +0 -0
  96. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/cli/commands/go.py +0 -0
  97. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/cli/commands/quickstart.py +0 -0
  98. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/cli/commands/server_helpers.py +0 -0
  99. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/cli/commands/setup.py +0 -0
  100. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/cli/commands/url_parser.py +0 -0
  101. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/cli/constants.py +0 -0
  102. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/cli/main.py +0 -0
  103. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/cli/terminal.py +0 -0
  104. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/console.py +0 -0
  105. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/context.py +0 -0
  106. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/context_dependent.py +0 -0
  107. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/core/__init__.py +0 -0
  108. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/core/agent_app.py +0 -0
  109. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/core/agent_types.py +0 -0
  110. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/core/direct_decorators.py +0 -0
  111. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/core/direct_factory.py +0 -0
  112. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/core/enhanced_prompt.py +0 -0
  113. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/core/error_handling.py +0 -0
  114. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/core/exceptions.py +0 -0
  115. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/core/fastagent.py +0 -0
  116. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/core/interactive_prompt.py +0 -0
  117. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/core/mcp_content.py +0 -0
  118. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/core/mermaid_utils.py +0 -0
  119. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/core/prompt.py +0 -0
  120. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/core/request_params.py +0 -0
  121. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/core/usage_display.py +0 -0
  122. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/core/validation.py +0 -0
  123. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/event_progress.py +0 -0
  124. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/executor/__init__.py +0 -0
  125. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/executor/executor.py +0 -0
  126. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/executor/task_registry.py +0 -0
  127. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/executor/workflow_signal.py +0 -0
  128. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/human_input/__init__.py +0 -0
  129. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/human_input/elicitation_form.py +0 -0
  130. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/human_input/elicitation_forms.py +0 -0
  131. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/human_input/elicitation_handler.py +0 -0
  132. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/human_input/elicitation_state.py +0 -0
  133. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/human_input/form_fields.py +0 -0
  134. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/human_input/handler.py +0 -0
  135. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/human_input/simple_form.py +0 -0
  136. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/human_input/types.py +0 -0
  137. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/__init__.py +0 -0
  138. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/augmented_llm.py +0 -0
  139. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/augmented_llm_passthrough.py +0 -0
  140. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/augmented_llm_playback.py +0 -0
  141. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/augmented_llm_silent.py +0 -0
  142. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/augmented_llm_slow.py +0 -0
  143. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/memory.py +0 -0
  144. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/model_database.py +0 -0
  145. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/prompt_utils.py +0 -0
  146. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/provider_key_manager.py +0 -0
  147. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/provider_types.py +0 -0
  148. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/providers/__init__.py +0 -0
  149. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/providers/anthropic_utils.py +0 -0
  150. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/providers/augmented_llm_aliyun.py +0 -0
  151. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/providers/augmented_llm_anthropic.py +0 -0
  152. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/providers/augmented_llm_bedrock.py +0 -0
  153. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/providers/augmented_llm_deepseek.py +0 -0
  154. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/providers/augmented_llm_generic.py +0 -0
  155. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/providers/augmented_llm_google_native.py +0 -0
  156. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/providers/augmented_llm_google_oai.py +0 -0
  157. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/providers/augmented_llm_groq.py +0 -0
  158. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/providers/augmented_llm_openrouter.py +0 -0
  159. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/providers/augmented_llm_tensorzero.py +0 -0
  160. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/providers/augmented_llm_xai.py +0 -0
  161. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/providers/google_converter.py +0 -0
  162. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/providers/multipart_converter_anthropic.py +0 -0
  163. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/providers/multipart_converter_tensorzero.py +0 -0
  164. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/providers/openai_multipart.py +0 -0
  165. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/providers/openai_utils.py +0 -0
  166. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/providers/sampling_converter_anthropic.py +0 -0
  167. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/providers/sampling_converter_openai.py +0 -0
  168. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/sampling_converter.py +0 -0
  169. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/sampling_format_converter.py +0 -0
  170. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/usage_tracking.py +0 -0
  171. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/logging/__init__.py +0 -0
  172. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/logging/events.py +0 -0
  173. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/logging/json_serializer.py +0 -0
  174. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/logging/listeners.py +0 -0
  175. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/logging/logger.py +0 -0
  176. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/logging/transport.py +0 -0
  177. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/__init__.py +0 -0
  178. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/common.py +0 -0
  179. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/elicitation_factory.py +0 -0
  180. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/elicitation_handlers.py +0 -0
  181. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/gen_client.py +0 -0
  182. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/helpers/__init__.py +0 -0
  183. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/helpers/content_helpers.py +0 -0
  184. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/helpers/server_config_helpers.py +0 -0
  185. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/hf_auth.py +0 -0
  186. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/interfaces.py +0 -0
  187. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/logger_textio.py +0 -0
  188. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/mcp_aggregator.py +0 -0
  189. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/mcp_connection_manager.py +0 -0
  190. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/mime_utils.py +0 -0
  191. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/prompt_message_multipart.py +0 -0
  192. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/prompt_render.py +0 -0
  193. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/prompt_serialization.py +0 -0
  194. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/prompts/__init__.py +0 -0
  195. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/prompts/__main__.py +0 -0
  196. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/prompts/prompt_constants.py +0 -0
  197. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/prompts/prompt_helpers.py +0 -0
  198. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/prompts/prompt_load.py +0 -0
  199. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/prompts/prompt_server.py +0 -0
  200. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/prompts/prompt_template.py +0 -0
  201. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/resource_utils.py +0 -0
  202. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/sampling.py +0 -0
  203. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp_server/__init__.py +0 -0
  204. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp_server/agent_server.py +0 -0
  205. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp_server_registry.py +0 -0
  206. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/progress_display.py +0 -0
  207. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/py.typed +0 -0
  208. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/data-analysis/analysis-campaign.py +0 -0
  209. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/data-analysis/analysis.py +0 -0
  210. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/data-analysis/fastagent.config.yaml +0 -0
  211. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/data-analysis/mount-point/WA_Fn-UseC_-HR-Employee-Attrition.csv +0 -0
  212. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/mcp/elicitations/elicitation_account_server.py +0 -0
  213. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/mcp/elicitations/elicitation_forms_server.py +0 -0
  214. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/mcp/elicitations/elicitation_game_server.py +0 -0
  215. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/mcp/elicitations/fastagent.config.yaml +0 -0
  216. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/mcp/elicitations/fastagent.secrets.yaml.example +0 -0
  217. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/mcp/elicitations/forms_demo.py +0 -0
  218. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/mcp/elicitations/game_character.py +0 -0
  219. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/mcp/elicitations/game_character_handler.py +0 -0
  220. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/mcp/elicitations/tool_call.py +0 -0
  221. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/mcp/state-transfer/agent_one.py +0 -0
  222. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/mcp/state-transfer/agent_two.py +0 -0
  223. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/mcp/state-transfer/fastagent.config.yaml +0 -0
  224. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/mcp/state-transfer/fastagent.secrets.yaml.example +0 -0
  225. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/researcher/fastagent.config.yaml +0 -0
  226. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/researcher/researcher-eval.py +0 -0
  227. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/researcher/researcher-imp.py +0 -0
  228. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/researcher/researcher.py +0 -0
  229. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/workflows/chaining.py +0 -0
  230. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/workflows/evaluator.py +0 -0
  231. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/workflows/fastagent.config.yaml +0 -0
  232. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/workflows/graded_report.md +0 -0
  233. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/workflows/human_input.py +0 -0
  234. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/workflows/orchestrator.py +0 -0
  235. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/workflows/parallel.py +0 -0
  236. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/workflows/router.py +0 -0
  237. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/workflows/short_story.md +0 -0
  238. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/workflows/short_story.txt +0 -0
  239. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/tools/tool_definition.py +0 -0
  240. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/src/mcp_agent/ui/console_display.py +0 -0
  241. {fast_agent_mcp-0.2.48 → fast_agent_mcp-0.2.49}/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.48
3
+ Version: 0.2.49
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
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "fast-agent-mcp"
3
- version = "0.2.48"
3
+ version = "0.2.49"
4
4
  description = "Define, Prompt and Test MCP enabled Agents and Workflows"
5
5
  readme = "README.md"
6
6
  license = { file = "LICENSE" }
@@ -8,6 +8,7 @@ import re
8
8
  from pathlib import Path
9
9
  from typing import Any, Dict, List, Literal, Optional, Tuple
10
10
 
11
+ from mcp import Implementation
11
12
  from pydantic import BaseModel, ConfigDict, field_validator
12
13
  from pydantic_settings import BaseSettings, SettingsConfigDict
13
14
 
@@ -61,11 +62,9 @@ class MCPServerSettings(BaseModel):
61
62
  Represents the configuration for an individual server.
62
63
  """
63
64
 
64
- # TODO: saqadri - server name should be something a server can provide itself during initialization
65
65
  name: str | None = None
66
66
  """The name of the server."""
67
67
 
68
- # TODO: saqadri - server description should be something a server can provide itself during initialization
69
68
  description: str | None = None
70
69
  """The description of the server."""
71
70
 
@@ -108,6 +107,8 @@ class MCPServerSettings(BaseModel):
108
107
  cwd: str | None = None
109
108
  """Working directory for the executed server command."""
110
109
 
110
+ implementation: Implementation | None = None
111
+
111
112
 
112
113
  class MCPSettings(BaseModel):
113
114
  """Configuration for all MCP servers."""
@@ -143,6 +143,7 @@ class ModelFactory:
143
143
  "gemini2": "gemini-2.0-flash",
144
144
  "gemini25": "gemini-2.5-flash-preview-05-20",
145
145
  "gemini25pro": "gemini-2.5-pro-preview-05-06",
146
+ "kimi": "groq.moonshotai/kimi-k2-instruct",
146
147
  }
147
148
 
148
149
  # Mapping of providers to their LLM classes
@@ -18,7 +18,7 @@ def _extract_resource_name(url: str) -> str | None:
18
18
  return host.replace(suffix, "") if host.endswith(suffix) else None
19
19
 
20
20
 
21
- DEFAULT_AZURE_API_VERSION = "2023-05-15"
21
+ DEFAULT_AZURE_API_VERSION = "2024-10-21"
22
22
 
23
23
 
24
24
  class AzureOpenAIAugmentedLLM(OpenAIAugmentedLLM):
@@ -412,7 +412,9 @@ class OpenAIAugmentedLLM(AugmentedLLM[ChatCompletionMessageParam, ChatCompletion
412
412
  )
413
413
 
414
414
  tool_results = []
415
+
415
416
  for tool_call in message.tool_calls:
417
+
416
418
  self.show_tool_call(
417
419
  available_tools,
418
420
  tool_call.function.name,
@@ -428,12 +430,20 @@ class OpenAIAugmentedLLM(AugmentedLLM[ChatCompletionMessageParam, ChatCompletion
428
430
  else from_json(tool_call.function.arguments, allow_partial=True),
429
431
  ),
430
432
  )
431
- result = await self.call_tool(tool_call_request, tool_call.id)
432
- self.show_tool_result(result)
433
-
434
- tool_results.append((tool_call.id, result))
435
- responses.extend(result.content)
436
- messages.extend(OpenAIConverter.convert_function_results_to_openai(tool_results))
433
+
434
+ try:
435
+ result = await self.call_tool(tool_call_request, tool_call.id)
436
+ self.show_tool_result(result)
437
+ tool_results.append((tool_call.id, result))
438
+ responses.extend(result.content)
439
+ except Exception as e:
440
+ self.logger.error(f"Tool call {tool_call.id} failed with error: {e}")
441
+ # Still add the tool_call_id with an error result to prevent missing responses
442
+ error_result = CallToolResult(content=[TextContent(type="text", text=f"Tool call failed: {str(e)}")])
443
+ tool_results.append((tool_call.id, error_result))
444
+
445
+ converted_messages = OpenAIConverter.convert_function_results_to_openai(tool_results)
446
+ messages.extend(converted_messages)
437
447
 
438
448
  self.logger.debug(
439
449
  f"Iteration {i}: Tool call results: {str(tool_results) if tool_results else 'None'}"
@@ -441,9 +441,6 @@ class OpenAIConverter:
441
441
  # Convert to OpenAI format
442
442
  user_message = OpenAIConverter.convert_to_openai(non_text_multipart)
443
443
 
444
- # We need to add tool_call_id manually
445
- user_message["tool_call_id"] = tool_call_id
446
-
447
444
  return (tool_message, [user_message])
448
445
 
449
446
  @staticmethod
@@ -461,22 +458,42 @@ class OpenAIConverter:
461
458
  Returns:
462
459
  List of OpenAI API messages for tool responses
463
460
  """
464
- messages = []
461
+ tool_messages = []
462
+ user_messages = []
463
+ has_mixed_content = False
465
464
 
466
465
  for tool_call_id, result in results:
467
- converted = OpenAIConverter.convert_tool_result_to_openai(
468
- tool_result=result,
469
- tool_call_id=tool_call_id,
470
- concatenate_text_blocks=concatenate_text_blocks,
471
- )
472
-
473
- # Handle the case where we have mixed content and get back a tuple
474
- if isinstance(converted, tuple):
475
- tool_message, additional_messages = converted
476
- messages.append(tool_message)
477
- messages.extend(additional_messages)
478
- else:
479
- # Single message case (text-only)
480
- messages.append(converted)
466
+ try:
467
+ converted = OpenAIConverter.convert_tool_result_to_openai(
468
+ tool_result=result,
469
+ tool_call_id=tool_call_id,
470
+ concatenate_text_blocks=concatenate_text_blocks,
471
+ )
481
472
 
473
+ # Handle the case where we have mixed content and get back a tuple
474
+ if isinstance(converted, tuple):
475
+ tool_message, additional_messages = converted
476
+ tool_messages.append(tool_message)
477
+ user_messages.extend(additional_messages)
478
+ has_mixed_content = True
479
+ else:
480
+ # Single message case (text-only)
481
+ tool_messages.append(converted)
482
+ except Exception as e:
483
+ _logger.error(f"Failed to convert tool_call_id={tool_call_id}: {e}")
484
+ # Create a basic tool response to prevent missing tool_call_id error
485
+ fallback_message = {
486
+ "role": "tool",
487
+ "tool_call_id": tool_call_id,
488
+ "content": f"[Conversion error: {str(e)}]",
489
+ }
490
+ tool_messages.append(fallback_message)
491
+
492
+ # CONDITIONAL REORDERING: Only reorder if there are user messages (mixed content)
493
+ if has_mixed_content and user_messages:
494
+ # Reorder: All tool messages first (OpenAI sequence), then user messages (vision context)
495
+ messages = tool_messages + user_messages
496
+ else:
497
+ # Pure tool responses - keep original order to preserve context (snapshots, etc.)
498
+ messages = tool_messages
482
499
  return messages
@@ -21,7 +21,7 @@ class RichProgressDisplay:
21
21
  self._progress = Progress(
22
22
  SpinnerColumn(spinner_name="simpleDotsScrolling"),
23
23
  TextColumn(
24
- "[progress.description]{task.description}|",
24
+ "[progress.description]{task.description}",
25
25
  # table_column=Column(max_width=16),
26
26
  ),
27
27
  TextColumn(text_format="{task.fields[target]:<16}", style="Bold Blue"),
@@ -77,7 +77,7 @@ class RichProgressDisplay:
77
77
  ProgressAction.LOADED: "dim green",
78
78
  ProgressAction.INITIALIZED: "dim green",
79
79
  ProgressAction.CHATTING: "bold blue",
80
- ProgressAction.STREAMING: "bold blue", # Same color as chatting
80
+ ProgressAction.STREAMING: "bold green", # Assistant Colour
81
81
  ProgressAction.ROUTING: "bold blue",
82
82
  ProgressAction.PLANNING: "bold blue",
83
83
  ProgressAction.READY: "dim green",
@@ -107,10 +107,19 @@ class RichProgressDisplay:
107
107
  # Ensure no None values in the update
108
108
  # For streaming, use custom description immediately to avoid flashing
109
109
  if event.action == ProgressAction.STREAMING and event.streaming_tokens:
110
- formatted_tokens = f"↓ {event.streaming_tokens.strip()}".ljust(15)
110
+ # Account for [dim][/dim] tags (11 characters) in padding calculation
111
+ formatted_tokens = f"▎[dim]◀[/dim] {event.streaming_tokens.strip()}".ljust(17 + 11)
111
112
  description = f"[{self._get_action_style(event.action)}]{formatted_tokens}"
113
+ elif event.action == ProgressAction.CHATTING:
114
+ # Add special formatting for chatting with dimmed arrow
115
+ formatted_text = f"▎[dim]▶[/dim] {event.action.value.strip()}".ljust(17 + 11)
116
+ description = f"[{self._get_action_style(event.action)}]{formatted_text}"
117
+ elif event.action == ProgressAction.CALLING_TOOL:
118
+ # Add special formatting for calling tool with dimmed arrow
119
+ formatted_text = f"▎[dim]◀[/dim] {event.action.value}".ljust(17 + 11)
120
+ description = f"[{self._get_action_style(event.action)}]{formatted_text}"
112
121
  else:
113
- description = f"[{self._get_action_style(event.action)}]{event.action.value:<15}"
122
+ description = f"[{self._get_action_style(event.action)}]{event.action.value:<15}"
114
123
 
115
124
  self._progress.update(
116
125
  task_id,
@@ -66,9 +66,6 @@ class MCPAgentClientSession(ClientSession, ContextDependent):
66
66
  # Extract server_name if provided in kwargs
67
67
  from importlib.metadata import version
68
68
 
69
- version = version("fast-agent-mcp") or "dev"
70
- fast_agent: Implementation = Implementation(name="fast-agent-mcp", version=version)
71
-
72
69
  self.session_server_name = kwargs.pop("server_name", None)
73
70
  # Extract the notification callbacks if provided
74
71
  self._tool_list_changed_callback = kwargs.pop("tool_list_changed_callback", None)
@@ -83,6 +80,11 @@ class MCPAgentClientSession(ClientSession, ContextDependent):
83
80
  # Extract custom elicitation handler if provided
84
81
  custom_elicitation_handler = kwargs.pop("elicitation_handler", None)
85
82
 
83
+ version = version("fast-agent-mcp") or "dev"
84
+ fast_agent: Implementation = Implementation(name="fast-agent-mcp", version=version)
85
+ if self.server_config and self.server_config.implementation:
86
+ fast_agent = self.server_config.implementation
87
+
86
88
  # Only register callbacks if the server_config has the relevant settings
87
89
  list_roots_cb = list_roots if (self.server_config and self.server_config.roots) else None
88
90
 
File without changes