fast-agent-mcp 0.2.57__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.57 → 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.57 → fast_agent_mcp-0.2.58}/examples/mcp/elicitations/elicitation_forms_server.py +25 -3
  4. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/pyproject.toml +9 -2
  5. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/config.py +3 -0
  6. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/human_input/elicitation_form.py +45 -33
  7. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/augmented_llm.py +1 -0
  8. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/providers/augmented_llm_anthropic.py +1 -0
  9. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/providers/augmented_llm_bedrock.py +890 -602
  10. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/providers/augmented_llm_google_native.py +1 -0
  11. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/providers/augmented_llm_openai.py +1 -0
  12. fast_agent_mcp-0.2.58/src/mcp_agent/llm/providers/bedrock_utils.py +216 -0
  13. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/mcp/elicitations/elicitation_forms_server.py +25 -3
  14. fast_agent_mcp-0.2.57/examples/bedrock/fast-agent.config.yaml +0 -13
  15. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/.gitignore +0 -0
  16. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/LICENSE +0 -0
  17. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/README.md +0 -0
  18. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/azure-openai/fastagent.config.yaml +0 -0
  19. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/custom-agents/agent.py +0 -0
  20. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/custom-agents/fastagent.config.yaml +0 -0
  21. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/data-analysis/analysis-campaign.py +0 -0
  22. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/data-analysis/analysis.py +0 -0
  23. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/data-analysis/fastagent.config.yaml +0 -0
  24. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/data-analysis/mount-point/WA_Fn-UseC_-HR-Employee-Attrition.csv +0 -0
  25. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/mcp/elicitations/elicitation_account_server.py +0 -0
  26. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/mcp/elicitations/elicitation_game_server.py +0 -0
  27. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/mcp/elicitations/fastagent.config.yaml +0 -0
  28. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/mcp/elicitations/fastagent.secrets.yaml.example +0 -0
  29. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/mcp/elicitations/forms_demo.py +0 -0
  30. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/mcp/elicitations/game_character.py +0 -0
  31. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/mcp/elicitations/game_character_handler.py +0 -0
  32. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/mcp/elicitations/tool_call.py +0 -0
  33. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/mcp/mcp-filtering/fastagent.config.yaml +0 -0
  34. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/mcp/mcp-filtering/fastagent.secrets.yaml.example +0 -0
  35. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/mcp/mcp-filtering/mcp_server.py +0 -0
  36. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/mcp/mcp-filtering/test_mcp_filtering.py +0 -0
  37. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/mcp/state-transfer/agent_one.py +0 -0
  38. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/mcp/state-transfer/agent_two.py +0 -0
  39. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/mcp/state-transfer/fastagent.config.yaml +0 -0
  40. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/mcp/state-transfer/fastagent.secrets.yaml.example +0 -0
  41. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/mcp/vision-examples/cat.png +0 -0
  42. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/mcp/vision-examples/example1.py +0 -0
  43. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/mcp/vision-examples/example2.py +0 -0
  44. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/mcp/vision-examples/example3.py +0 -0
  45. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/mcp/vision-examples/fastagent.config.yaml +0 -0
  46. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/otel/agent.py +0 -0
  47. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/otel/agent2.py +0 -0
  48. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/otel/docker-compose.yaml +0 -0
  49. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/otel/fastagent.config.yaml +0 -0
  50. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/researcher/fastagent.config.yaml +0 -0
  51. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/researcher/researcher-eval.py +0 -0
  52. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/researcher/researcher-imp.py +0 -0
  53. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/researcher/researcher.py +0 -0
  54. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/tensorzero/.env.sample +0 -0
  55. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/tensorzero/Makefile +0 -0
  56. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/tensorzero/README.md +0 -0
  57. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/tensorzero/agent.py +0 -0
  58. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/tensorzero/demo_images/clam.jpg +0 -0
  59. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/tensorzero/demo_images/crab.png +0 -0
  60. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/tensorzero/demo_images/shrimp.png +0 -0
  61. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/tensorzero/docker-compose.yml +0 -0
  62. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/tensorzero/fastagent.config.yaml +0 -0
  63. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/tensorzero/image_demo.py +0 -0
  64. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/tensorzero/mcp_server/Dockerfile +0 -0
  65. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/tensorzero/mcp_server/entrypoint.sh +0 -0
  66. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/tensorzero/mcp_server/mcp_server.py +0 -0
  67. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/tensorzero/mcp_server/pyproject.toml +0 -0
  68. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/tensorzero/simple_agent.py +0 -0
  69. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/tensorzero/tensorzero_config/system_schema.json +0 -0
  70. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/tensorzero/tensorzero_config/system_template.minijinja +0 -0
  71. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/tensorzero/tensorzero_config/tensorzero.toml +0 -0
  72. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/workflows/chaining.py +0 -0
  73. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/workflows/evaluator.py +0 -0
  74. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/workflows/fastagent.config.yaml +0 -0
  75. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/workflows/graded_report.md +0 -0
  76. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/workflows/human_input.py +0 -0
  77. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/workflows/orchestrator.py +0 -0
  78. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/workflows/parallel.py +0 -0
  79. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/workflows/router.py +0 -0
  80. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/workflows/short_story.md +0 -0
  81. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/examples/workflows/short_story.txt +0 -0
  82. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/hatch_build.py +0 -0
  83. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/__init__.py +0 -0
  84. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/agents/__init__.py +0 -0
  85. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/agents/agent.py +0 -0
  86. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/agents/base_agent.py +0 -0
  87. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/agents/workflow/__init__.py +0 -0
  88. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/agents/workflow/chain_agent.py +0 -0
  89. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/agents/workflow/evaluator_optimizer.py +0 -0
  90. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/agents/workflow/iterative_planner.py +0 -0
  91. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/agents/workflow/orchestrator_agent.py +0 -0
  92. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/agents/workflow/orchestrator_models.py +0 -0
  93. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/agents/workflow/orchestrator_prompts.py +0 -0
  94. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/agents/workflow/parallel_agent.py +0 -0
  95. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/agents/workflow/router_agent.py +0 -0
  96. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/app.py +0 -0
  97. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/cli/__init__.py +0 -0
  98. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/cli/__main__.py +0 -0
  99. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/cli/commands/check_config.py +0 -0
  100. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/cli/commands/go.py +0 -0
  101. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/cli/commands/quickstart.py +0 -0
  102. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/cli/commands/server_helpers.py +0 -0
  103. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/cli/commands/setup.py +0 -0
  104. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/cli/commands/url_parser.py +0 -0
  105. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/cli/constants.py +0 -0
  106. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/cli/main.py +0 -0
  107. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/cli/terminal.py +0 -0
  108. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/console.py +0 -0
  109. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/context.py +0 -0
  110. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/context_dependent.py +0 -0
  111. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/core/__init__.py +0 -0
  112. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/core/agent_app.py +0 -0
  113. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/core/agent_types.py +0 -0
  114. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/core/direct_decorators.py +0 -0
  115. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/core/direct_factory.py +0 -0
  116. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/core/enhanced_prompt.py +0 -0
  117. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/core/error_handling.py +0 -0
  118. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/core/exceptions.py +0 -0
  119. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/core/fastagent.py +0 -0
  120. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/core/interactive_prompt.py +0 -0
  121. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/core/mcp_content.py +0 -0
  122. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/core/mermaid_utils.py +0 -0
  123. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/core/prompt.py +0 -0
  124. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/core/request_params.py +0 -0
  125. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/core/usage_display.py +0 -0
  126. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/core/validation.py +0 -0
  127. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/event_progress.py +0 -0
  128. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/executor/__init__.py +0 -0
  129. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/executor/executor.py +0 -0
  130. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/executor/task_registry.py +0 -0
  131. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/executor/workflow_signal.py +0 -0
  132. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/human_input/__init__.py +0 -0
  133. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/human_input/elicitation_forms.py +0 -0
  134. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/human_input/elicitation_handler.py +0 -0
  135. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/human_input/elicitation_state.py +0 -0
  136. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/human_input/form_fields.py +0 -0
  137. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/human_input/handler.py +0 -0
  138. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/human_input/simple_form.py +0 -0
  139. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/human_input/types.py +0 -0
  140. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/__init__.py +0 -0
  141. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/augmented_llm_passthrough.py +0 -0
  142. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/augmented_llm_playback.py +0 -0
  143. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/augmented_llm_silent.py +0 -0
  144. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/augmented_llm_slow.py +0 -0
  145. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/memory.py +0 -0
  146. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/model_database.py +0 -0
  147. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/model_factory.py +0 -0
  148. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/prompt_utils.py +0 -0
  149. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/provider_key_manager.py +0 -0
  150. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/provider_types.py +0 -0
  151. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/providers/__init__.py +0 -0
  152. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/providers/anthropic_utils.py +0 -0
  153. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/providers/augmented_llm_aliyun.py +0 -0
  154. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/providers/augmented_llm_azure.py +0 -0
  155. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/providers/augmented_llm_deepseek.py +0 -0
  156. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/providers/augmented_llm_generic.py +0 -0
  157. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/providers/augmented_llm_google_oai.py +0 -0
  158. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/providers/augmented_llm_groq.py +0 -0
  159. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/providers/augmented_llm_openrouter.py +0 -0
  160. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/providers/augmented_llm_tensorzero_openai.py +0 -0
  161. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/providers/augmented_llm_xai.py +0 -0
  162. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/providers/google_converter.py +0 -0
  163. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/providers/multipart_converter_anthropic.py +0 -0
  164. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/providers/multipart_converter_openai.py +0 -0
  165. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/providers/openai_multipart.py +0 -0
  166. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/providers/openai_utils.py +0 -0
  167. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/providers/sampling_converter_anthropic.py +0 -0
  168. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/providers/sampling_converter_openai.py +0 -0
  169. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/sampling_converter.py +0 -0
  170. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/sampling_format_converter.py +0 -0
  171. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/llm/usage_tracking.py +0 -0
  172. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/logging/__init__.py +0 -0
  173. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/logging/events.py +0 -0
  174. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/logging/json_serializer.py +0 -0
  175. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/logging/listeners.py +0 -0
  176. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/logging/logger.py +0 -0
  177. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/logging/rich_progress.py +0 -0
  178. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/logging/transport.py +0 -0
  179. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/__init__.py +0 -0
  180. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/common.py +0 -0
  181. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/elicitation_factory.py +0 -0
  182. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/elicitation_handlers.py +0 -0
  183. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/gen_client.py +0 -0
  184. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/helpers/__init__.py +0 -0
  185. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/helpers/content_helpers.py +0 -0
  186. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/helpers/server_config_helpers.py +0 -0
  187. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/hf_auth.py +0 -0
  188. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/interfaces.py +0 -0
  189. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/logger_textio.py +0 -0
  190. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/mcp_agent_client_session.py +0 -0
  191. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/mcp_aggregator.py +0 -0
  192. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/mcp_connection_manager.py +0 -0
  193. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/mime_utils.py +0 -0
  194. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/prompt_message_multipart.py +0 -0
  195. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/prompt_render.py +0 -0
  196. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/prompt_serialization.py +0 -0
  197. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/prompts/__init__.py +0 -0
  198. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/prompts/__main__.py +0 -0
  199. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/prompts/prompt_constants.py +0 -0
  200. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/prompts/prompt_helpers.py +0 -0
  201. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/prompts/prompt_load.py +0 -0
  202. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/prompts/prompt_server.py +0 -0
  203. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/prompts/prompt_template.py +0 -0
  204. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/resource_utils.py +0 -0
  205. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp/sampling.py +0 -0
  206. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp_server/__init__.py +0 -0
  207. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp_server/agent_server.py +0 -0
  208. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/mcp_server_registry.py +0 -0
  209. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/progress_display.py +0 -0
  210. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/py.typed +0 -0
  211. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/data-analysis/analysis-campaign.py +0 -0
  212. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/data-analysis/analysis.py +0 -0
  213. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/data-analysis/fastagent.config.yaml +0 -0
  214. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/data-analysis/mount-point/WA_Fn-UseC_-HR-Employee-Attrition.csv +0 -0
  215. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/mcp/elicitations/elicitation_account_server.py +0 -0
  216. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/mcp/elicitations/elicitation_game_server.py +0 -0
  217. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/mcp/elicitations/fastagent.config.yaml +0 -0
  218. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/mcp/elicitations/fastagent.secrets.yaml.example +0 -0
  219. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/mcp/elicitations/forms_demo.py +0 -0
  220. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/mcp/elicitations/game_character.py +0 -0
  221. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/mcp/elicitations/game_character_handler.py +0 -0
  222. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/mcp/elicitations/tool_call.py +0 -0
  223. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/mcp/state-transfer/agent_one.py +0 -0
  224. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/mcp/state-transfer/agent_two.py +0 -0
  225. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/mcp/state-transfer/fastagent.config.yaml +0 -0
  226. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/mcp/state-transfer/fastagent.secrets.yaml.example +0 -0
  227. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/researcher/fastagent.config.yaml +0 -0
  228. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/researcher/researcher-eval.py +0 -0
  229. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/researcher/researcher-imp.py +0 -0
  230. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/researcher/researcher.py +0 -0
  231. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/tensorzero/.env.sample +0 -0
  232. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/tensorzero/Makefile +0 -0
  233. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/tensorzero/README.md +0 -0
  234. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/tensorzero/agent.py +0 -0
  235. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/tensorzero/demo_images/clam.jpg +0 -0
  236. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/tensorzero/demo_images/crab.png +0 -0
  237. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/tensorzero/demo_images/shrimp.png +0 -0
  238. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/tensorzero/docker-compose.yml +0 -0
  239. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/tensorzero/fastagent.config.yaml +0 -0
  240. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/tensorzero/image_demo.py +0 -0
  241. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/tensorzero/mcp_server/.python-version +0 -0
  242. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/tensorzero/mcp_server/Dockerfile +0 -0
  243. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/tensorzero/mcp_server/entrypoint.sh +0 -0
  244. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/tensorzero/mcp_server/mcp_server.py +0 -0
  245. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/tensorzero/mcp_server/pyproject.toml +0 -0
  246. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/tensorzero/simple_agent.py +0 -0
  247. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/tensorzero/tensorzero_config/system_schema.json +0 -0
  248. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/tensorzero/tensorzero_config/system_template.minijinja +0 -0
  249. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/tensorzero/tensorzero_config/tensorzero.toml +0 -0
  250. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/workflows/chaining.py +0 -0
  251. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/workflows/evaluator.py +0 -0
  252. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/workflows/fastagent.config.yaml +0 -0
  253. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/workflows/graded_report.md +0 -0
  254. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/workflows/human_input.py +0 -0
  255. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/workflows/orchestrator.py +0 -0
  256. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/workflows/parallel.py +0 -0
  257. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/workflows/router.py +0 -0
  258. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/workflows/short_story.md +0 -0
  259. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/resources/examples/workflows/short_story.txt +0 -0
  260. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/tools/tool_definition.py +0 -0
  261. {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.2.58}/src/mcp_agent/ui/console_display.py +0 -0
  262. {fast_agent_mcp-0.2.57 → 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.57
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.57"
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
 
@@ -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
 
@@ -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
 
@@ -101,6 +101,7 @@ class AugmentedLLM(ContextDependent, AugmentedLLMProtocol, Generic[MessageParamT
101
101
  PARAM_USE_HISTORY = "use_history"
102
102
  PARAM_MAX_ITERATIONS = "max_iterations"
103
103
  PARAM_TEMPLATE_VARS = "template_vars"
104
+ PARAM_MCP_METADATA = "mcp_metadata"
104
105
 
105
106
  # Base set of fields that should always be excluded
106
107
  BASE_EXCLUDE_FIELDS = {PARAM_METADATA}
@@ -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: