fast-agent-mcp 0.2.56__tar.gz → 0.2.58__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 (262) hide show
  1. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/PKG-INFO +2 -2
  2. fast_agent_mcp-0.2.58/examples/bedrock/fast-agent.config.yaml +24 -0
  3. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/mcp/elicitations/elicitation_forms_server.py +25 -3
  4. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/pyproject.toml +9 -2
  5. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/agents/agent.py +10 -3
  6. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/agents/base_agent.py +7 -2
  7. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/config.py +3 -0
  8. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/core/agent_app.py +18 -6
  9. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/core/enhanced_prompt.py +10 -2
  10. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/core/fastagent.py +2 -0
  11. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/core/request_params.py +5 -0
  12. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/event_progress.py +3 -0
  13. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/human_input/elicitation_form.py +45 -33
  14. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/augmented_llm.py +16 -0
  15. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/providers/augmented_llm_anthropic.py +1 -0
  16. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/providers/augmented_llm_bedrock.py +890 -602
  17. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/providers/augmented_llm_google_native.py +1 -0
  18. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/providers/augmented_llm_openai.py +1 -0
  19. fast_agent_mcp-0.2.58/src/mcp_agent/llm/providers/bedrock_utils.py +216 -0
  20. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/mcp_agent_client_session.py +105 -2
  21. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/mcp_aggregator.py +92 -29
  22. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/mcp_connection_manager.py +19 -0
  23. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/mcp/elicitations/elicitation_forms_server.py +25 -3
  24. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/ui/console_display.py +105 -15
  25. fast_agent_mcp-0.2.56/examples/bedrock/fast-agent.config.yaml +0 -13
  26. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/.gitignore +0 -0
  27. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/LICENSE +0 -0
  28. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/README.md +0 -0
  29. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/azure-openai/fastagent.config.yaml +0 -0
  30. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/custom-agents/agent.py +0 -0
  31. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/custom-agents/fastagent.config.yaml +0 -0
  32. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/data-analysis/analysis-campaign.py +0 -0
  33. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/data-analysis/analysis.py +0 -0
  34. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/data-analysis/fastagent.config.yaml +0 -0
  35. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/data-analysis/mount-point/WA_Fn-UseC_-HR-Employee-Attrition.csv +0 -0
  36. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/mcp/elicitations/elicitation_account_server.py +0 -0
  37. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/mcp/elicitations/elicitation_game_server.py +0 -0
  38. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/mcp/elicitations/fastagent.config.yaml +0 -0
  39. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/mcp/elicitations/fastagent.secrets.yaml.example +0 -0
  40. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/mcp/elicitations/forms_demo.py +0 -0
  41. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/mcp/elicitations/game_character.py +0 -0
  42. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/mcp/elicitations/game_character_handler.py +0 -0
  43. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/mcp/elicitations/tool_call.py +0 -0
  44. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/mcp/mcp-filtering/fastagent.config.yaml +0 -0
  45. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/mcp/mcp-filtering/fastagent.secrets.yaml.example +0 -0
  46. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/mcp/mcp-filtering/mcp_server.py +0 -0
  47. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/mcp/mcp-filtering/test_mcp_filtering.py +0 -0
  48. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/mcp/state-transfer/agent_one.py +0 -0
  49. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/mcp/state-transfer/agent_two.py +0 -0
  50. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/mcp/state-transfer/fastagent.config.yaml +0 -0
  51. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/mcp/state-transfer/fastagent.secrets.yaml.example +0 -0
  52. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/mcp/vision-examples/cat.png +0 -0
  53. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/mcp/vision-examples/example1.py +0 -0
  54. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/mcp/vision-examples/example2.py +0 -0
  55. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/mcp/vision-examples/example3.py +0 -0
  56. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/mcp/vision-examples/fastagent.config.yaml +0 -0
  57. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/otel/agent.py +0 -0
  58. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/otel/agent2.py +0 -0
  59. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/otel/docker-compose.yaml +0 -0
  60. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/otel/fastagent.config.yaml +0 -0
  61. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/researcher/fastagent.config.yaml +0 -0
  62. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/researcher/researcher-eval.py +0 -0
  63. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/researcher/researcher-imp.py +0 -0
  64. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/researcher/researcher.py +0 -0
  65. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/tensorzero/.env.sample +0 -0
  66. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/tensorzero/Makefile +0 -0
  67. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/tensorzero/README.md +0 -0
  68. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/tensorzero/agent.py +0 -0
  69. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/tensorzero/demo_images/clam.jpg +0 -0
  70. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/tensorzero/demo_images/crab.png +0 -0
  71. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/tensorzero/demo_images/shrimp.png +0 -0
  72. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/tensorzero/docker-compose.yml +0 -0
  73. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/tensorzero/fastagent.config.yaml +0 -0
  74. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/tensorzero/image_demo.py +0 -0
  75. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/tensorzero/mcp_server/Dockerfile +0 -0
  76. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/tensorzero/mcp_server/entrypoint.sh +0 -0
  77. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/tensorzero/mcp_server/mcp_server.py +0 -0
  78. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/tensorzero/mcp_server/pyproject.toml +0 -0
  79. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/tensorzero/simple_agent.py +0 -0
  80. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/tensorzero/tensorzero_config/system_schema.json +0 -0
  81. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/tensorzero/tensorzero_config/system_template.minijinja +0 -0
  82. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/tensorzero/tensorzero_config/tensorzero.toml +0 -0
  83. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/workflows/chaining.py +0 -0
  84. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/workflows/evaluator.py +0 -0
  85. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/workflows/fastagent.config.yaml +0 -0
  86. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/workflows/graded_report.md +0 -0
  87. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/workflows/human_input.py +0 -0
  88. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/workflows/orchestrator.py +0 -0
  89. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/workflows/parallel.py +0 -0
  90. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/workflows/router.py +0 -0
  91. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/workflows/short_story.md +0 -0
  92. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/examples/workflows/short_story.txt +0 -0
  93. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/hatch_build.py +0 -0
  94. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/__init__.py +0 -0
  95. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/agents/__init__.py +0 -0
  96. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/agents/workflow/__init__.py +0 -0
  97. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/agents/workflow/chain_agent.py +0 -0
  98. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/agents/workflow/evaluator_optimizer.py +0 -0
  99. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/agents/workflow/iterative_planner.py +0 -0
  100. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/agents/workflow/orchestrator_agent.py +0 -0
  101. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/agents/workflow/orchestrator_models.py +0 -0
  102. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/agents/workflow/orchestrator_prompts.py +0 -0
  103. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/agents/workflow/parallel_agent.py +0 -0
  104. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/agents/workflow/router_agent.py +0 -0
  105. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/app.py +0 -0
  106. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/cli/__init__.py +0 -0
  107. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/cli/__main__.py +0 -0
  108. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/cli/commands/check_config.py +0 -0
  109. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/cli/commands/go.py +0 -0
  110. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/cli/commands/quickstart.py +0 -0
  111. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/cli/commands/server_helpers.py +0 -0
  112. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/cli/commands/setup.py +0 -0
  113. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/cli/commands/url_parser.py +0 -0
  114. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/cli/constants.py +0 -0
  115. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/cli/main.py +0 -0
  116. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/cli/terminal.py +0 -0
  117. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/console.py +0 -0
  118. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/context.py +0 -0
  119. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/context_dependent.py +0 -0
  120. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/core/__init__.py +0 -0
  121. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/core/agent_types.py +0 -0
  122. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/core/direct_decorators.py +0 -0
  123. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/core/direct_factory.py +0 -0
  124. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/core/error_handling.py +0 -0
  125. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/core/exceptions.py +0 -0
  126. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/core/interactive_prompt.py +0 -0
  127. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/core/mcp_content.py +0 -0
  128. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/core/mermaid_utils.py +0 -0
  129. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/core/prompt.py +0 -0
  130. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/core/usage_display.py +0 -0
  131. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/core/validation.py +0 -0
  132. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/executor/__init__.py +0 -0
  133. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/executor/executor.py +0 -0
  134. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/executor/task_registry.py +0 -0
  135. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/executor/workflow_signal.py +0 -0
  136. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/human_input/__init__.py +0 -0
  137. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/human_input/elicitation_forms.py +0 -0
  138. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/human_input/elicitation_handler.py +0 -0
  139. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/human_input/elicitation_state.py +0 -0
  140. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/human_input/form_fields.py +0 -0
  141. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/human_input/handler.py +0 -0
  142. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/human_input/simple_form.py +0 -0
  143. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/human_input/types.py +0 -0
  144. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/__init__.py +0 -0
  145. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/augmented_llm_passthrough.py +0 -0
  146. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/augmented_llm_playback.py +0 -0
  147. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/augmented_llm_silent.py +0 -0
  148. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/augmented_llm_slow.py +0 -0
  149. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/memory.py +0 -0
  150. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/model_database.py +0 -0
  151. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/model_factory.py +0 -0
  152. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/prompt_utils.py +0 -0
  153. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/provider_key_manager.py +0 -0
  154. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/provider_types.py +0 -0
  155. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/providers/__init__.py +0 -0
  156. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/providers/anthropic_utils.py +0 -0
  157. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/providers/augmented_llm_aliyun.py +0 -0
  158. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/providers/augmented_llm_azure.py +0 -0
  159. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/providers/augmented_llm_deepseek.py +0 -0
  160. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/providers/augmented_llm_generic.py +0 -0
  161. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/providers/augmented_llm_google_oai.py +0 -0
  162. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/providers/augmented_llm_groq.py +0 -0
  163. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/providers/augmented_llm_openrouter.py +0 -0
  164. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/providers/augmented_llm_tensorzero_openai.py +0 -0
  165. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/providers/augmented_llm_xai.py +0 -0
  166. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/providers/google_converter.py +0 -0
  167. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/providers/multipart_converter_anthropic.py +0 -0
  168. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/providers/multipart_converter_openai.py +0 -0
  169. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/providers/openai_multipart.py +0 -0
  170. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/providers/openai_utils.py +0 -0
  171. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/providers/sampling_converter_anthropic.py +0 -0
  172. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/providers/sampling_converter_openai.py +0 -0
  173. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/sampling_converter.py +0 -0
  174. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/sampling_format_converter.py +0 -0
  175. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/usage_tracking.py +0 -0
  176. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/logging/__init__.py +0 -0
  177. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/logging/events.py +0 -0
  178. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/logging/json_serializer.py +0 -0
  179. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/logging/listeners.py +0 -0
  180. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/logging/logger.py +0 -0
  181. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/logging/rich_progress.py +0 -0
  182. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/logging/transport.py +0 -0
  183. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/__init__.py +0 -0
  184. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/common.py +0 -0
  185. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/elicitation_factory.py +0 -0
  186. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/elicitation_handlers.py +0 -0
  187. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/gen_client.py +0 -0
  188. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/helpers/__init__.py +0 -0
  189. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/helpers/content_helpers.py +0 -0
  190. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/helpers/server_config_helpers.py +0 -0
  191. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/hf_auth.py +0 -0
  192. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/interfaces.py +0 -0
  193. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/logger_textio.py +0 -0
  194. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/mime_utils.py +0 -0
  195. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/prompt_message_multipart.py +0 -0
  196. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/prompt_render.py +0 -0
  197. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/prompt_serialization.py +0 -0
  198. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/prompts/__init__.py +0 -0
  199. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/prompts/__main__.py +0 -0
  200. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/prompts/prompt_constants.py +0 -0
  201. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/prompts/prompt_helpers.py +0 -0
  202. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/prompts/prompt_load.py +0 -0
  203. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/prompts/prompt_server.py +0 -0
  204. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/prompts/prompt_template.py +0 -0
  205. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/resource_utils.py +0 -0
  206. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/sampling.py +0 -0
  207. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp_server/__init__.py +0 -0
  208. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp_server/agent_server.py +0 -0
  209. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp_server_registry.py +0 -0
  210. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/progress_display.py +0 -0
  211. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/py.typed +0 -0
  212. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/data-analysis/analysis-campaign.py +0 -0
  213. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/data-analysis/analysis.py +0 -0
  214. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/data-analysis/fastagent.config.yaml +0 -0
  215. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/data-analysis/mount-point/WA_Fn-UseC_-HR-Employee-Attrition.csv +0 -0
  216. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/mcp/elicitations/elicitation_account_server.py +0 -0
  217. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/mcp/elicitations/elicitation_game_server.py +0 -0
  218. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/mcp/elicitations/fastagent.config.yaml +0 -0
  219. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/mcp/elicitations/fastagent.secrets.yaml.example +0 -0
  220. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/mcp/elicitations/forms_demo.py +0 -0
  221. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/mcp/elicitations/game_character.py +0 -0
  222. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/mcp/elicitations/game_character_handler.py +0 -0
  223. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/mcp/elicitations/tool_call.py +0 -0
  224. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/mcp/state-transfer/agent_one.py +0 -0
  225. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/mcp/state-transfer/agent_two.py +0 -0
  226. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/mcp/state-transfer/fastagent.config.yaml +0 -0
  227. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/mcp/state-transfer/fastagent.secrets.yaml.example +0 -0
  228. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/researcher/fastagent.config.yaml +0 -0
  229. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/researcher/researcher-eval.py +0 -0
  230. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/researcher/researcher-imp.py +0 -0
  231. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/researcher/researcher.py +0 -0
  232. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/tensorzero/.env.sample +0 -0
  233. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/tensorzero/Makefile +0 -0
  234. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/tensorzero/README.md +0 -0
  235. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/tensorzero/agent.py +0 -0
  236. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/tensorzero/demo_images/clam.jpg +0 -0
  237. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/tensorzero/demo_images/crab.png +0 -0
  238. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/tensorzero/demo_images/shrimp.png +0 -0
  239. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/tensorzero/docker-compose.yml +0 -0
  240. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/tensorzero/fastagent.config.yaml +0 -0
  241. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/tensorzero/image_demo.py +0 -0
  242. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/tensorzero/mcp_server/.python-version +0 -0
  243. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/tensorzero/mcp_server/Dockerfile +0 -0
  244. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/tensorzero/mcp_server/entrypoint.sh +0 -0
  245. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/tensorzero/mcp_server/mcp_server.py +0 -0
  246. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/tensorzero/mcp_server/pyproject.toml +0 -0
  247. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/tensorzero/simple_agent.py +0 -0
  248. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/tensorzero/tensorzero_config/system_schema.json +0 -0
  249. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/tensorzero/tensorzero_config/system_template.minijinja +0 -0
  250. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/tensorzero/tensorzero_config/tensorzero.toml +0 -0
  251. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/workflows/chaining.py +0 -0
  252. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/workflows/evaluator.py +0 -0
  253. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/workflows/fastagent.config.yaml +0 -0
  254. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/workflows/graded_report.md +0 -0
  255. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/workflows/human_input.py +0 -0
  256. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/workflows/orchestrator.py +0 -0
  257. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/workflows/parallel.py +0 -0
  258. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/workflows/router.py +0 -0
  259. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/workflows/short_story.md +0 -0
  260. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/workflows/short_story.txt +0 -0
  261. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/src/mcp_agent/tools/tool_definition.py +0 -0
  262. {fast_agent_mcp-0.2.56 → fast_agent_mcp-0.2.58}/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.56
3
+ Version: 0.2.58
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.4
221
+ Requires-Dist: mcp==1.13.1
222
222
  Requires-Dist: openai>=1.99.9
223
223
  Requires-Dist: opentelemetry-distro>=0.55b0
224
224
  Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.7.0
@@ -0,0 +1,24 @@
1
+ # Example minimal fast-agent.config.yaml for Bedrock
2
+
3
+ # List of supported models: https://docs.aws.amazon.com/bedrock/latest/userguide/models-supported.html
4
+ # Model string format: bedrock.<model_id>.<reasoning_effort>
5
+ # Examples:
6
+ # bedrock.amazon.nova-lite-v1:0 # No reasoning
7
+ # bedrock.claude-sonnet-4-0.high # High reasoning effort
8
+ # bedrock.anthropic.claude-3-7-sonnet-20250219-v1:0.medium # Medium reasoning
9
+ default_model: bedrock.amazon.nova-lite-v1:0
10
+
11
+ # Bedrock uses the AWS credentials provider chain to authenticate.
12
+ # This can be accomplished with aws sso login on local machines,
13
+ # or by IAM roles within AWS.
14
+ # see https://docs.aws.amazon.com/res/latest/ug/sso-idc.html
15
+ bedrock:
16
+ region: "us-east-1" # required
17
+ profile: "default" # optional, defaults to "default" - only needed if you have multiple profiles.
18
+ # Only needed on local machines, not on AWS.
19
+
20
+ # Default reasoning effort for all Bedrock models (can be overridden in model string)
21
+ # Options: "minimal" (off), "low" (512 tokens), "medium" (1024 tokens), "high" (2048 tokens)
22
+ # Note: Only Claude 4, Claude 3.7 Sonnet, and DeepSeek-R1 support reasoning
23
+ # Other models will automatically fallback to no reasoning if unsupported
24
+ reasoning_effort: "minimal" # Default: disabled
@@ -100,11 +100,25 @@ async def product_review() -> ReadResourceResult:
100
100
  },
101
101
  )
102
102
  review_text: str = Field(
103
- description="Tell us about your experience", min_length=10, max_length=1000
103
+ description="Tell us about your experience",
104
+ default="""Great product!
105
+ Here's what I loved:
106
+
107
+ - Excellent build quality
108
+ - Fast shipping
109
+ - Works as advertised
110
+
111
+ One minor issue:
112
+ - Instructions could be clearer
113
+
114
+ Overall, highly recommended!""",
115
+ min_length=10,
116
+ max_length=1000
104
117
  )
105
118
 
106
119
  result = await mcp.get_context().elicit(
107
- "Share your product review - Help others make informed decisions!", schema=ProductReview
120
+ "Share your product review - Help others make informed decisions!",
121
+ schema=ProductReview,
108
122
  )
109
123
 
110
124
  match result:
@@ -140,6 +154,7 @@ async def account_settings() -> ReadResourceResult:
140
154
  email_notifications: bool = Field(True, description="Receive email notifications?")
141
155
  marketing_emails: bool = Field(False, description="Subscribe to marketing emails?")
142
156
  theme: str = Field(
157
+ "dark",
143
158
  description="Choose your preferred theme",
144
159
  json_schema_extra={
145
160
  "enum": ["light", "dark", "auto"],
@@ -147,7 +162,9 @@ async def account_settings() -> ReadResourceResult:
147
162
  },
148
163
  )
149
164
  privacy_public: bool = Field(False, description="Make your profile public?")
150
- items_per_page: int = Field(description="Items to show per page (10-100)", ge=10, le=100)
165
+ items_per_page: int = Field(
166
+ 25, description="Items to show per page (10-100)", ge=10, le=100
167
+ )
151
168
 
152
169
  result = await mcp.get_context().elicit("Update your account settings", schema=AccountSettings)
153
170
 
@@ -182,7 +199,11 @@ async def service_appointment() -> ReadResourceResult:
182
199
 
183
200
  class ServiceAppointment(BaseModel):
184
201
  customer_name: str = Field(description="Your full name", min_length=2, max_length=50)
202
+ phone_number: str = Field(
203
+ "555-", description="Contact phone number", min_length=10, max_length=20
204
+ )
185
205
  vehicle_type: str = Field(
206
+ default="sedan",
186
207
  description="What type of vehicle do you have?",
187
208
  json_schema_extra={
188
209
  "enum": ["sedan", "suv", "truck", "motorcycle", "other"],
@@ -205,6 +226,7 @@ async def service_appointment() -> ReadResourceResult:
205
226
  lines = [
206
227
  "🔧 Service Appointment Scheduled!",
207
228
  f"👤 Customer: {data.customer_name}",
229
+ f"📞 Phone: {data.phone_number}",
208
230
  f"🚗 Vehicle: {data.vehicle_type.title()}",
209
231
  f"🚙 Loaner needed: {'Yes' if data.needs_loaner else 'No'}",
210
232
  f"📅 Appointment: {data.appointment_time}",
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "fast-agent-mcp"
3
- version = "0.2.56"
3
+ version = "0.2.58"
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.4",
18
+ "mcp==1.13.1",
19
19
  "opentelemetry-distro>=0.55b0",
20
20
  "opentelemetry-exporter-otlp-proto-http>=1.7.0",
21
21
  "pydantic-settings>=2.7.0",
@@ -89,6 +89,13 @@ markers = [
89
89
  "integration: marks tests as integration tests",
90
90
  "simulated_endpoints: marks tests that use simulated external endpoints"
91
91
  ]
92
+
93
+ # Filter out utcnow depreciation warnings from the boto3 library
94
+ filterwarnings = [
95
+ "ignore:datetime\\.datetime\\.utcnow\\(\\) is deprecated.*:DeprecationWarning:botocore\\.auth",
96
+ "ignore:datetime\\.datetime\\.utcnow\\(\\) is deprecated.*:DeprecationWarning:botocore\\.endpoint$",
97
+ ]
98
+
92
99
  # Other pytest options can go here too
93
100
  testpaths = ["test", "integration_tests"]
94
101
 
@@ -10,6 +10,7 @@ from typing import TYPE_CHECKING, Any, Callable, Dict, List, Optional, TypeVar
10
10
  from mcp_agent.agents.base_agent import BaseAgent
11
11
  from mcp_agent.core.agent_types import AgentConfig
12
12
  from mcp_agent.core.interactive_prompt import InteractivePrompt
13
+ from mcp_agent.core.request_params import RequestParams
13
14
  from mcp_agent.human_input.types import HumanInputCallback
14
15
  from mcp_agent.logging.logger import get_logger
15
16
  from mcp_agent.mcp.interfaces import AugmentedLLMProtocol
@@ -51,13 +52,19 @@ class Agent(BaseAgent):
51
52
  **kwargs,
52
53
  )
53
54
 
54
- async def prompt(self, default_prompt: str = "", agent_name: Optional[str] = None) -> str:
55
+ async def prompt(
56
+ self,
57
+ default_prompt: str = "",
58
+ agent_name: Optional[str] = None,
59
+ request_params: RequestParams | None = None
60
+ ) -> str:
55
61
  """
56
62
  Start an interactive prompt session with this agent.
57
63
 
58
64
  Args:
59
65
  default: Default message to use when user presses enter
60
66
  agent_name: Ignored for single agents, included for API compatibility
67
+ request_params: Optional request parameters
61
68
 
62
69
  Returns:
63
70
  The result of the interactive session
@@ -66,14 +73,14 @@ class Agent(BaseAgent):
66
73
  agent_name_str = str(self.name)
67
74
 
68
75
  # Create agent_types dictionary with just this agent
69
- agent_types = {agent_name_str: self.agent_type.value}
76
+ agent_types = {agent_name_str: self.agent_type}
70
77
 
71
78
  # Create the interactive prompt
72
79
  prompt = InteractivePrompt(agent_types=agent_types)
73
80
 
74
81
  # Define wrapper for send function
75
82
  async def send_wrapper(message, agent_name):
76
- return await self.send(message)
83
+ return await self.send(message, request_params)
77
84
 
78
85
  # Start the prompt loop with just this agent
79
86
  return await prompt.prompt_loop(
@@ -208,7 +208,11 @@ class BaseAgent(MCPAggregator, AgentProtocol):
208
208
  result: PromptMessageMultipart = await self.generate([Prompt.user(message)], request_params)
209
209
  return result.first_text()
210
210
 
211
- async def send(self, message: Union[str, PromptMessage, PromptMessageMultipart]) -> str:
211
+ async def send(
212
+ self,
213
+ message: Union[str, PromptMessage, PromptMessageMultipart],
214
+ request_params: RequestParams | None = None
215
+ ) -> str:
212
216
  """
213
217
  Send a message to the agent and get a response.
214
218
 
@@ -217,6 +221,7 @@ class BaseAgent(MCPAggregator, AgentProtocol):
217
221
  - String: Converted to a user PromptMessageMultipart
218
222
  - PromptMessage: Converted to PromptMessageMultipart
219
223
  - PromptMessageMultipart: Used directly
224
+ - request_params: Optional request parameters
220
225
 
221
226
  Returns:
222
227
  The agent's response as a string
@@ -225,7 +230,7 @@ class BaseAgent(MCPAggregator, AgentProtocol):
225
230
  prompt = self._normalize_message_input(message)
226
231
 
227
232
  # Use the LLM to generate a response
228
- response = await self.generate([prompt], None)
233
+ response = await self.generate([prompt], request_params)
229
234
  return response.all_text()
230
235
 
231
236
  def _normalize_message_input(
@@ -276,6 +276,9 @@ class BedrockSettings(BaseModel):
276
276
  profile: str | None = None
277
277
  """AWS profile to use for authentication"""
278
278
 
279
+ reasoning_effort: Literal["minimal", "low", "medium", "high"] = "minimal"
280
+ """Default reasoning effort for Bedrock models. Can be overridden in model string (e.g., bedrock.claude-sonnet-4-0.high)"""
281
+
279
282
  model_config = ConfigDict(extra="allow", arbitrary_types_allowed=True)
280
283
 
281
284
 
@@ -11,6 +11,7 @@ from rich import print as rich_print
11
11
  from mcp_agent.agents.agent import Agent
12
12
  from mcp_agent.core.agent_types import AgentType
13
13
  from mcp_agent.core.interactive_prompt import InteractivePrompt
14
+ from mcp_agent.core.request_params import RequestParams
14
15
  from mcp_agent.mcp.prompt_message_multipart import PromptMessageMultipart
15
16
  from mcp_agent.progress_display import progress_display
16
17
 
@@ -53,6 +54,7 @@ class AgentApp:
53
54
  message: Union[str, PromptMessage, PromptMessageMultipart] | None = None,
54
55
  agent_name: str | None = None,
55
56
  default_prompt: str = "",
57
+ request_params: RequestParams | None = None,
56
58
  ) -> str:
57
59
  """
58
60
  Make the object callable to send messages or start interactive prompt.
@@ -65,19 +67,21 @@ class AgentApp:
65
67
  - PromptMessageMultipart: Used directly
66
68
  agent_name: Optional name of the agent to send to (defaults to first agent)
67
69
  default_prompt: Default message to use in interactive prompt mode
70
+ request_params: Optional request parameters including MCP metadata
68
71
 
69
72
  Returns:
70
73
  The agent's response as a string or the result of the interactive session
71
74
  """
72
75
  if message:
73
- return await self._agent(agent_name).send(message)
76
+ return await self._agent(agent_name).send(message, request_params)
74
77
 
75
- return await self.interactive(agent_name=agent_name, default_prompt=default_prompt)
78
+ return await self.interactive(agent_name=agent_name, default_prompt=default_prompt, request_params=request_params)
76
79
 
77
80
  async def send(
78
81
  self,
79
82
  message: Union[str, PromptMessage, PromptMessageMultipart],
80
83
  agent_name: Optional[str] = None,
84
+ request_params: RequestParams | None = None,
81
85
  ) -> str:
82
86
  """
83
87
  Send a message to the specified agent (or to all agents).
@@ -88,11 +92,12 @@ class AgentApp:
88
92
  - PromptMessage: Converted to PromptMessageMultipart
89
93
  - PromptMessageMultipart: Used directly
90
94
  agent_name: Optional name of the agent to send to
95
+ request_params: Optional request parameters including MCP metadata
91
96
 
92
97
  Returns:
93
98
  The agent's response as a string
94
99
  """
95
- return await self._agent(agent_name).send(message)
100
+ return await self._agent(agent_name).send(message, request_params)
96
101
 
97
102
  def _agent(self, agent_name: str | None) -> Agent:
98
103
  if agent_name:
@@ -233,17 +238,23 @@ class AgentApp:
233
238
  )
234
239
 
235
240
  @deprecated
236
- async def prompt(self, agent_name: str | None = None, default_prompt: str = "") -> str:
241
+ async def prompt(
242
+ self,
243
+ agent_name: str | None = None,
244
+ default_prompt: str = "",
245
+ request_params: RequestParams | None = None
246
+ ) -> str:
237
247
  """
238
248
  Deprecated - use interactive() instead.
239
249
  """
240
- return await self.interactive(agent_name=agent_name, default_prompt=default_prompt)
250
+ return await self.interactive(agent_name=agent_name, default_prompt=default_prompt, request_params=request_params)
241
251
 
242
252
  async def interactive(
243
253
  self,
244
254
  agent_name: str | None = None,
245
255
  default_prompt: str = "",
246
256
  pretty_print_parallel: bool = False,
257
+ request_params: RequestParams | None = None,
247
258
  ) -> str:
248
259
  """
249
260
  Interactive prompt for sending messages with advanced features.
@@ -252,6 +263,7 @@ class AgentApp:
252
263
  agent_name: Optional target agent name (uses default if not specified)
253
264
  default: Default message to use when user presses enter
254
265
  pretty_print_parallel: Enable clean parallel results display for parallel agents
266
+ request_params: Optional request parameters including MCP metadata
255
267
 
256
268
  Returns:
257
269
  The result of the interactive session
@@ -285,7 +297,7 @@ class AgentApp:
285
297
 
286
298
  # Define the wrapper for send function
287
299
  async def send_wrapper(message, agent_name):
288
- result = await self.send(message, agent_name)
300
+ result = await self.send(message, agent_name, request_params)
289
301
 
290
302
  # Show parallel results if enabled and this is a parallel agent
291
303
  if pretty_print_parallel:
@@ -428,9 +428,14 @@ def create_keybindings(on_toggle_multiline=None, app=None, agent_provider=None,
428
428
  """Enter: accept input when not in multiline mode."""
429
429
  event.current_buffer.validate_and_handle()
430
430
 
431
+ @kb.add("c-j", filter=Condition(lambda: not in_multiline_mode))
432
+ def _(event) -> None:
433
+ """Ctrl+J: Insert newline when in normal mode."""
434
+ event.current_buffer.insert_text("\n")
435
+
431
436
  @kb.add("c-m", filter=Condition(lambda: in_multiline_mode))
432
437
  def _(event) -> None:
433
- """Enter: insert newline when in multiline mode."""
438
+ """Enter: Insert newline when in multiline mode."""
434
439
  event.current_buffer.insert_text("\n")
435
440
 
436
441
  # Use c-j (Ctrl+J) as an alternative to represent Ctrl+Enter in multiline mode
@@ -581,6 +586,7 @@ async def get_enhanced_input(
581
586
 
582
587
  shortcuts = [
583
588
  ("Ctrl+T", toggle_text),
589
+ ("Ctrl+J", "Newline" if not in_multiline_mode else None),
584
590
  ("Ctrl+E", "External"),
585
591
  ("Ctrl+Y", "Copy"),
586
592
  ("Ctrl+L", "Clear"),
@@ -588,7 +594,7 @@ async def get_enhanced_input(
588
594
  ("EXIT", "Exit")
589
595
  ]
590
596
 
591
- newline = "Ctrl+&lt;Enter&gt;:Submit" if in_multiline_mode else "&lt;Enter&gt;:Submit"
597
+ newline = "Ctrl+J:Submit" if in_multiline_mode else "&lt;Enter&gt;:Submit"
592
598
 
593
599
  # Only show relevant shortcuts based on mode
594
600
  shortcuts = [(k, v) for k, v in shortcuts if v]
@@ -670,6 +676,8 @@ async def get_enhanced_input(
670
676
  def pre_process_input(text):
671
677
  # Command processing
672
678
  if text and text.startswith("/"):
679
+ if text == "/":
680
+ return ""
673
681
  cmd_parts = text[1:].strip().split(maxsplit=1)
674
682
  cmd = cmd_parts[0].lower()
675
683
 
@@ -87,6 +87,7 @@ class FastAgent:
87
87
  ignore_unknown_args: bool = False,
88
88
  parse_cli_args: bool = True,
89
89
  quiet: bool = False, # Add quiet parameter
90
+ **kwargs
90
91
  ) -> None:
91
92
  """
92
93
  Initialize the fast-agent application.
@@ -203,6 +204,7 @@ class FastAgent:
203
204
  self.app = MCPApp(
204
205
  name=name,
205
206
  settings=config.Settings(**self.config) if hasattr(self, "config") else None,
207
+ **kwargs
206
208
  )
207
209
 
208
210
  # Stop progress display immediately if quiet mode is requested
@@ -52,3 +52,8 @@ class RequestParams(CreateMessageRequestParams):
52
52
  """
53
53
  Optional dictionary of template variables for dynamic templates. Currently only works for TensorZero inference backend
54
54
  """
55
+
56
+ mcp_metadata: Dict[str, Any] | None = None
57
+ """
58
+ Metadata to pass through to MCP tool calls via the _meta field.
59
+ """
@@ -25,6 +25,9 @@ class ProgressAction(str, Enum):
25
25
  FINISHED = "Finished"
26
26
  SHUTDOWN = "Shutdown"
27
27
  AGGREGATOR_INITIALIZED = "Running"
28
+ SERVER_OFFLINE = "Offline"
29
+ SERVER_RECONNECTING = "Reconnecting"
30
+ SERVER_ONLINE = "Online"
28
31
  FATAL_ERROR = "Error"
29
32
 
30
33
 
@@ -5,9 +5,7 @@ from typing import Any, Dict, Optional
5
5
 
6
6
  from mcp.types import ElicitRequestedSchema
7
7
  from prompt_toolkit import Application
8
- from prompt_toolkit.application.current import get_app
9
8
  from prompt_toolkit.buffer import Buffer
10
- from prompt_toolkit.filters import Condition
11
9
  from prompt_toolkit.formatted_text import FormattedText
12
10
  from prompt_toolkit.key_binding import KeyBindings
13
11
  from prompt_toolkit.key_binding.bindings.focus import focus_next, focus_previous
@@ -327,16 +325,21 @@ class ElicitationForm:
327
325
  def focus_previous_left(event):
328
326
  focus_previous(event)
329
327
 
330
- # Create filter for non-multiline fields
331
- not_in_multiline = Condition(lambda: not self._is_in_multiline_field())
332
-
333
- @kb.add("c-m", filter=not_in_multiline) # Enter to submit only when not in multiline
328
+ # Enter always submits
329
+ @kb.add("c-m")
334
330
  def submit(event):
335
331
  self._accept()
336
332
 
337
- @kb.add("c-j") # Ctrl+J as alternative submit for multiline fields
338
- def submit_alt(event):
339
- self._accept()
333
+ # Ctrl+J inserts newlines
334
+ @kb.add("c-j")
335
+ def insert_newline(event):
336
+ # Insert a newline at the cursor position
337
+ event.current_buffer.insert_text('\n')
338
+ # Mark this field as multiline when user adds a newline
339
+ for field_name, widget in self.field_widgets.items():
340
+ if isinstance(widget, Buffer) and widget == event.current_buffer:
341
+ self.multiline_fields.add(field_name)
342
+ break
340
343
 
341
344
  # ESC should ALWAYS cancel immediately, no matter what
342
345
  @kb.add("escape", eager=True, is_global=True)
@@ -353,7 +356,7 @@ class ElicitationForm:
353
356
  [
354
357
  (
355
358
  "class:bottom-toolbar.text",
356
- " <TAB> or ↑↓→← to navigate. <ENTER> submit (<Ctrl+J> in multiline). <ESC> to cancel. ",
359
+ " <TAB>/↑↓→← navigate. <ENTER> submit. <Ctrl+J> insert new line. <ESC> cancel. ",
357
360
  ),
358
361
  (
359
362
  "class:bottom-toolbar.text",
@@ -435,6 +438,7 @@ class ElicitationForm:
435
438
 
436
439
  return constraints
437
440
 
441
+
438
442
  def _create_field(self, field_name: str, field_def: Dict[str, Any]):
439
443
  """Create a field widget."""
440
444
 
@@ -510,7 +514,8 @@ class ElicitationForm:
510
514
  enum_names = field_def.get("enumNames", enum_values)
511
515
  values = [(val, name) for val, name in zip(enum_values, enum_names)]
512
516
 
513
- radio_list = RadioList(values=values)
517
+ default_value = field_def.get("default")
518
+ radio_list = RadioList(values=values, default=default_value)
514
519
  self.field_widgets[field_name] = radio_list
515
520
 
516
521
  return HSplit([label, Frame(radio_list, height=min(len(values) + 2, 6))])
@@ -541,23 +546,35 @@ class ElicitationForm:
541
546
  else:
542
547
  constraints = {}
543
548
 
544
- # Determine if field should be multiline based on max_length
549
+ default_value = field_def.get("default")
550
+
551
+ # Determine if field should be multiline based on max_length or default value length
545
552
  if field_type == "string":
546
553
  max_length = constraints.get("maxLength")
554
+ # Check default value length if maxLength not specified
555
+ if not max_length and default_value is not None:
556
+ max_length = len(str(default_value))
547
557
  else:
548
558
  max_length = None
549
- if max_length and max_length > 100:
559
+
560
+ # Check if default value contains newlines
561
+ if field_type == "string" and default_value is not None and '\n' in str(default_value):
562
+ multiline = True
563
+ self.multiline_fields.add(field_name) # Track multiline fields
564
+ # Set height to actual line count for fields with newlines in default
565
+ initial_height = str(default_value).count('\n') + 1
566
+ elif max_length and max_length > 100:
550
567
  # Use multiline for longer fields
551
568
  multiline = True
552
569
  self.multiline_fields.add(field_name) # Track multiline fields
553
570
  if max_length <= 300:
554
- height = 3
571
+ initial_height = 3
555
572
  else:
556
- height = 5
573
+ initial_height = 5
557
574
  else:
558
575
  # Single line for shorter fields
559
576
  multiline = False
560
- height = 1
577
+ initial_height = 1
561
578
 
562
579
  buffer = Buffer(
563
580
  validator=validator,
@@ -566,6 +583,8 @@ class ElicitationForm:
566
583
  complete_while_typing=False, # Disable completion for cleaner experience
567
584
  enable_history_search=False, # Disable history for cleaner experience
568
585
  )
586
+ if default_value is not None:
587
+ buffer.text = str(default_value)
569
588
  self.field_widgets[field_name] = buffer
570
589
 
571
590
  # Create dynamic style function for focus highlighting and validation errors
@@ -581,31 +600,24 @@ class ElicitationForm:
581
600
  else:
582
601
  return "class:input-field"
583
602
 
603
+ # Create a dynamic height function based on content
604
+ def get_dynamic_height():
605
+ if not buffer.text:
606
+ return initial_height
607
+ # Calculate height based on number of newlines in buffer
608
+ line_count = buffer.text.count('\n') + 1
609
+ # Use initial height as minimum, grow up to 20 lines
610
+ return min(max(line_count, initial_height), 20)
611
+
584
612
  text_input = Window(
585
613
  BufferControl(buffer=buffer),
586
- height=height,
614
+ height=get_dynamic_height, # Use dynamic height function
587
615
  style=get_field_style, # Use dynamic style function
588
616
  wrap_lines=True if multiline else False, # Enable word wrap for multiline
589
617
  )
590
618
 
591
619
  return HSplit([label, Frame(text_input)])
592
620
 
593
- def _is_in_multiline_field(self) -> bool:
594
- """Check if currently focused field is a multiline field."""
595
-
596
- focused = get_app().layout.current_control
597
-
598
- # Find which field this control belongs to
599
- # Only Buffer widgets can be multiline, so only check those
600
- for field_name, widget in self.field_widgets.items():
601
- if (
602
- isinstance(widget, Buffer)
603
- and hasattr(focused, "buffer")
604
- and widget == focused.buffer
605
- ):
606
- return field_name in self.multiline_fields
607
- return False
608
-
609
621
  def _validate_form(self) -> tuple[bool, Optional[str]]:
610
622
  """Validate the entire form."""
611
623
 
@@ -1,4 +1,5 @@
1
1
  from abc import abstractmethod
2
+ from contextvars import ContextVar
2
3
  from typing import (
3
4
  TYPE_CHECKING,
4
5
  Any,
@@ -61,6 +62,9 @@ if TYPE_CHECKING:
61
62
  # TODO -- move this to a constant
62
63
  HUMAN_INPUT_TOOL_NAME = "__human_input__"
63
64
 
65
+ # Context variable for storing MCP metadata
66
+ _mcp_metadata_var: ContextVar[Dict[str, Any] | None] = ContextVar('mcp_metadata', default=None)
67
+
64
68
 
65
69
  def deep_merge(dict1: Dict[Any, Any], dict2: Dict[Any, Any]) -> Dict[Any, Any]:
66
70
  """
@@ -97,6 +101,7 @@ class AugmentedLLM(ContextDependent, AugmentedLLMProtocol, Generic[MessageParamT
97
101
  PARAM_USE_HISTORY = "use_history"
98
102
  PARAM_MAX_ITERATIONS = "max_iterations"
99
103
  PARAM_TEMPLATE_VARS = "template_vars"
104
+ PARAM_MCP_METADATA = "mcp_metadata"
100
105
 
101
106
  # Base set of fields that should always be excluded
102
107
  BASE_EXCLUDE_FIELDS = {PARAM_METADATA}
@@ -232,6 +237,11 @@ class AugmentedLLM(ContextDependent, AugmentedLLMProtocol, Generic[MessageParamT
232
237
 
233
238
  self._precall(multipart_messages)
234
239
 
240
+ # Store MCP metadata in context variable
241
+ final_request_params = self.get_request_params(request_params)
242
+ if final_request_params.mcp_metadata:
243
+ _mcp_metadata_var.set(final_request_params.mcp_metadata)
244
+
235
245
  assistant_response: PromptMessageMultipart = await self._apply_prompt_provider_specific(
236
246
  multipart_messages, request_params
237
247
  )
@@ -275,6 +285,12 @@ class AugmentedLLM(ContextDependent, AugmentedLLMProtocol, Generic[MessageParamT
275
285
  multipart_messages = PromptMessageMultipart.to_multipart(multipart_messages)
276
286
 
277
287
  self._precall(multipart_messages)
288
+
289
+ # Store MCP metadata in context variable
290
+ final_request_params = self.get_request_params(request_params)
291
+ if final_request_params.mcp_metadata:
292
+ _mcp_metadata_var.set(final_request_params.mcp_metadata)
293
+
278
294
  result, assistant_response = await self._apply_prompt_provider_specific_structured(
279
295
  multipart_messages, model, request_params
280
296
  )
@@ -69,6 +69,7 @@ class AnthropicAugmentedLLM(AugmentedLLM[MessageParam, Message]):
69
69
  AugmentedLLM.PARAM_MAX_ITERATIONS,
70
70
  AugmentedLLM.PARAM_PARALLEL_TOOL_CALLS,
71
71
  AugmentedLLM.PARAM_TEMPLATE_VARS,
72
+ AugmentedLLM.PARAM_MCP_METADATA,
72
73
  }
73
74
 
74
75
  def __init__(self, *args, **kwargs) -> None: