fast-agent-mcp 0.2.37__tar.gz → 0.2.39__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 (226) hide show
  1. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/PKG-INFO +1 -1
  2. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/pyproject.toml +1 -1
  3. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/cli/commands/quickstart.py +19 -26
  4. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/human_input/elicitation_form.py +1 -1
  5. fast_agent_mcp-0.2.37/examples/mcp/elicitations/README.md +0 -157
  6. fast_agent_mcp-0.2.37/src/mcp_agent/resources/examples/mcp/elicitations/README.md +0 -157
  7. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/.gitignore +0 -0
  8. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/LICENSE +0 -0
  9. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/README.md +0 -0
  10. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/azure-openai/fastagent.config.yaml +0 -0
  11. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/custom-agents/agent.py +0 -0
  12. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/custom-agents/fastagent.config.yaml +0 -0
  13. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/data-analysis/analysis-campaign.py +0 -0
  14. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/data-analysis/analysis.py +0 -0
  15. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/data-analysis/fastagent.config.yaml +0 -0
  16. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/data-analysis/mount-point/WA_Fn-UseC_-HR-Employee-Attrition.csv +0 -0
  17. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/mcp/elicitations/elicitation_account_server.py +0 -0
  18. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/mcp/elicitations/elicitation_forms_server.py +0 -0
  19. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/mcp/elicitations/elicitation_game_server.py +0 -0
  20. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/mcp/elicitations/fastagent.config.yaml +0 -0
  21. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/mcp/elicitations/fastagent.secrets.yaml.example +0 -0
  22. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/mcp/elicitations/forms_demo.py +0 -0
  23. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/mcp/elicitations/game_character.py +0 -0
  24. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/mcp/elicitations/game_character_handler.py +0 -0
  25. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/mcp/elicitations/tool_call.py +0 -0
  26. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/mcp/state-transfer/agent_one.py +0 -0
  27. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/mcp/state-transfer/agent_two.py +0 -0
  28. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/mcp/state-transfer/fastagent.config.yaml +0 -0
  29. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/mcp/state-transfer/fastagent.secrets.yaml.example +0 -0
  30. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/mcp/vision-examples/cat.png +0 -0
  31. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/mcp/vision-examples/example1.py +0 -0
  32. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/mcp/vision-examples/example2.py +0 -0
  33. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/mcp/vision-examples/example3.py +0 -0
  34. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/mcp/vision-examples/fastagent.config.yaml +0 -0
  35. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/otel/agent.py +0 -0
  36. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/otel/agent2.py +0 -0
  37. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/otel/docker-compose.yaml +0 -0
  38. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/otel/fastagent.config.yaml +0 -0
  39. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/researcher/fastagent.config.yaml +0 -0
  40. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/researcher/researcher-eval.py +0 -0
  41. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/researcher/researcher-imp.py +0 -0
  42. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/researcher/researcher.py +0 -0
  43. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/tensorzero/.env.sample +0 -0
  44. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/tensorzero/Makefile +0 -0
  45. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/tensorzero/README.md +0 -0
  46. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/tensorzero/agent.py +0 -0
  47. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/tensorzero/demo_images/clam.jpg +0 -0
  48. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/tensorzero/demo_images/crab.png +0 -0
  49. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/tensorzero/demo_images/shrimp.png +0 -0
  50. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/tensorzero/docker-compose.yml +0 -0
  51. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/tensorzero/fastagent.config.yaml +0 -0
  52. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/tensorzero/image_demo.py +0 -0
  53. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/tensorzero/mcp_server/Dockerfile +0 -0
  54. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/tensorzero/mcp_server/entrypoint.sh +0 -0
  55. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/tensorzero/mcp_server/mcp_server.py +0 -0
  56. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/tensorzero/simple_agent.py +0 -0
  57. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/tensorzero/tensorzero_config/system_schema.json +0 -0
  58. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/tensorzero/tensorzero_config/system_template.minijinja +0 -0
  59. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/tensorzero/tensorzero_config/tensorzero.toml +0 -0
  60. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/workflows/chaining.py +0 -0
  61. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/workflows/evaluator.py +0 -0
  62. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/workflows/fastagent.config.yaml +0 -0
  63. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/workflows/graded_report.md +0 -0
  64. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/workflows/human_input.py +0 -0
  65. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/workflows/orchestrator.py +0 -0
  66. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/workflows/parallel.py +0 -0
  67. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/workflows/router.py +0 -0
  68. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/workflows/short_story.md +0 -0
  69. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/workflows/short_story.txt +0 -0
  70. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/hatch_build.py +0 -0
  71. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/__init__.py +0 -0
  72. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/agents/__init__.py +0 -0
  73. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/agents/agent.py +0 -0
  74. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/agents/base_agent.py +0 -0
  75. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/agents/workflow/__init__.py +0 -0
  76. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/agents/workflow/chain_agent.py +0 -0
  77. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/agents/workflow/evaluator_optimizer.py +0 -0
  78. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/agents/workflow/orchestrator_agent.py +0 -0
  79. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/agents/workflow/orchestrator_models.py +0 -0
  80. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/agents/workflow/orchestrator_prompts.py +0 -0
  81. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/agents/workflow/parallel_agent.py +0 -0
  82. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/agents/workflow/router_agent.py +0 -0
  83. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/app.py +0 -0
  84. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/cli/__init__.py +0 -0
  85. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/cli/__main__.py +0 -0
  86. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/cli/commands/check_config.py +0 -0
  87. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/cli/commands/go.py +0 -0
  88. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/cli/commands/setup.py +0 -0
  89. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/cli/commands/url_parser.py +0 -0
  90. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/cli/main.py +0 -0
  91. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/cli/terminal.py +0 -0
  92. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/config.py +0 -0
  93. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/console.py +0 -0
  94. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/context.py +0 -0
  95. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/context_dependent.py +0 -0
  96. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/core/__init__.py +0 -0
  97. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/core/agent_app.py +0 -0
  98. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/core/agent_types.py +0 -0
  99. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/core/direct_decorators.py +0 -0
  100. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/core/direct_factory.py +0 -0
  101. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/core/enhanced_prompt.py +0 -0
  102. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/core/error_handling.py +0 -0
  103. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/core/exceptions.py +0 -0
  104. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/core/fastagent.py +0 -0
  105. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/core/interactive_prompt.py +0 -0
  106. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/core/mcp_content.py +0 -0
  107. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/core/prompt.py +0 -0
  108. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/core/request_params.py +0 -0
  109. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/core/usage_display.py +0 -0
  110. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/core/validation.py +0 -0
  111. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/event_progress.py +0 -0
  112. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/executor/__init__.py +0 -0
  113. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/executor/executor.py +0 -0
  114. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/executor/task_registry.py +0 -0
  115. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/executor/workflow_signal.py +0 -0
  116. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/human_input/__init__.py +0 -0
  117. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/human_input/elicitation_forms.py +0 -0
  118. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/human_input/elicitation_handler.py +0 -0
  119. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/human_input/elicitation_state.py +0 -0
  120. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/human_input/handler.py +0 -0
  121. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/human_input/types.py +0 -0
  122. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/__init__.py +0 -0
  123. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/augmented_llm.py +0 -0
  124. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/augmented_llm_passthrough.py +0 -0
  125. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/augmented_llm_playback.py +0 -0
  126. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/augmented_llm_slow.py +0 -0
  127. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/memory.py +0 -0
  128. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/model_database.py +0 -0
  129. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/model_factory.py +0 -0
  130. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/prompt_utils.py +0 -0
  131. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/provider_key_manager.py +0 -0
  132. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/provider_types.py +0 -0
  133. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/providers/__init__.py +0 -0
  134. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/providers/anthropic_utils.py +0 -0
  135. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/providers/augmented_llm_aliyun.py +0 -0
  136. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/providers/augmented_llm_anthropic.py +0 -0
  137. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/providers/augmented_llm_azure.py +0 -0
  138. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/providers/augmented_llm_deepseek.py +0 -0
  139. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/providers/augmented_llm_generic.py +0 -0
  140. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/providers/augmented_llm_google_native.py +0 -0
  141. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/providers/augmented_llm_google_oai.py +0 -0
  142. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/providers/augmented_llm_openai.py +0 -0
  143. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/providers/augmented_llm_openrouter.py +0 -0
  144. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/providers/augmented_llm_tensorzero.py +0 -0
  145. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/providers/google_converter.py +0 -0
  146. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/providers/multipart_converter_anthropic.py +0 -0
  147. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/providers/multipart_converter_openai.py +0 -0
  148. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/providers/multipart_converter_tensorzero.py +0 -0
  149. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/providers/openai_multipart.py +0 -0
  150. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/providers/openai_utils.py +0 -0
  151. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/providers/sampling_converter_anthropic.py +0 -0
  152. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/providers/sampling_converter_openai.py +0 -0
  153. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/sampling_converter.py +0 -0
  154. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/sampling_format_converter.py +0 -0
  155. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/usage_tracking.py +0 -0
  156. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/logging/__init__.py +0 -0
  157. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/logging/events.py +0 -0
  158. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/logging/json_serializer.py +0 -0
  159. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/logging/listeners.py +0 -0
  160. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/logging/logger.py +0 -0
  161. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/logging/rich_progress.py +0 -0
  162. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/logging/transport.py +0 -0
  163. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/__init__.py +0 -0
  164. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/common.py +0 -0
  165. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/elicitation_factory.py +0 -0
  166. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/elicitation_handlers.py +0 -0
  167. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/gen_client.py +0 -0
  168. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/helpers/__init__.py +0 -0
  169. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/helpers/content_helpers.py +0 -0
  170. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/helpers/server_config_helpers.py +0 -0
  171. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/hf_auth.py +0 -0
  172. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/interfaces.py +0 -0
  173. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/logger_textio.py +0 -0
  174. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/mcp_agent_client_session.py +0 -0
  175. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/mcp_aggregator.py +0 -0
  176. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/mcp_connection_manager.py +0 -0
  177. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/mime_utils.py +0 -0
  178. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/prompt_message_multipart.py +0 -0
  179. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/prompt_render.py +0 -0
  180. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/prompt_serialization.py +0 -0
  181. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/prompts/__init__.py +0 -0
  182. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/prompts/__main__.py +0 -0
  183. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/prompts/prompt_constants.py +0 -0
  184. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/prompts/prompt_helpers.py +0 -0
  185. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/prompts/prompt_load.py +0 -0
  186. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/prompts/prompt_server.py +0 -0
  187. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/prompts/prompt_template.py +0 -0
  188. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/resource_utils.py +0 -0
  189. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/sampling.py +0 -0
  190. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp_server/__init__.py +0 -0
  191. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp_server/agent_server.py +0 -0
  192. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp_server_registry.py +0 -0
  193. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/progress_display.py +0 -0
  194. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/data-analysis/analysis-campaign.py +0 -0
  195. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/data-analysis/analysis.py +0 -0
  196. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/data-analysis/fastagent.config.yaml +0 -0
  197. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/data-analysis/mount-point/WA_Fn-UseC_-HR-Employee-Attrition.csv +0 -0
  198. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/mcp/elicitations/elicitation_account_server.py +0 -0
  199. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/mcp/elicitations/elicitation_forms_server.py +0 -0
  200. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/mcp/elicitations/elicitation_game_server.py +0 -0
  201. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/mcp/elicitations/fastagent.config.yaml +0 -0
  202. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/mcp/elicitations/fastagent.secrets.yaml.example +0 -0
  203. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/mcp/elicitations/forms_demo.py +0 -0
  204. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/mcp/elicitations/game_character.py +0 -0
  205. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/mcp/elicitations/game_character_handler.py +0 -0
  206. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/mcp/elicitations/tool_call.py +0 -0
  207. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/mcp/state-transfer/agent_one.py +0 -0
  208. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/mcp/state-transfer/agent_two.py +0 -0
  209. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/mcp/state-transfer/fastagent.config.yaml +0 -0
  210. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/mcp/state-transfer/fastagent.secrets.yaml.example +0 -0
  211. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/researcher/fastagent.config.yaml +0 -0
  212. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/researcher/researcher-eval.py +0 -0
  213. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/researcher/researcher-imp.py +0 -0
  214. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/researcher/researcher.py +0 -0
  215. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/workflows/chaining.py +0 -0
  216. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/workflows/evaluator.py +0 -0
  217. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/workflows/fastagent.config.yaml +0 -0
  218. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/workflows/graded_report.md +0 -0
  219. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/workflows/human_input.py +0 -0
  220. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/workflows/orchestrator.py +0 -0
  221. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/workflows/parallel.py +0 -0
  222. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/workflows/router.py +0 -0
  223. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/workflows/short_story.md +0 -0
  224. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/workflows/short_story.txt +0 -0
  225. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/tools/tool_definition.py +0 -0
  226. {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/ui/console_display.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fast-agent-mcp
3
- Version: 0.2.37
3
+ Version: 0.2.39
4
4
  Summary: Define, Prompt and Test MCP enabled Agents and Workflows
5
5
  Author-email: Shaun Smith <fastagent@llmindset.co.uk>
6
6
  License: Apache License
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "fast-agent-mcp"
3
- version = "0.2.37"
3
+ version = "0.2.39"
4
4
  description = "Define, Prompt and Test MCP enabled Agents and Workflows"
5
5
  readme = "README.md"
6
6
  license = { file = "LICENSE" }
@@ -9,7 +9,7 @@ from rich.panel import Panel
9
9
  from rich.table import Table
10
10
 
11
11
  app = typer.Typer(
12
- help="Create example applications",
12
+ help="Create fast-agent quickstarts",
13
13
  no_args_is_help=False, # Allow showing our custom help instead
14
14
  )
15
15
  console = Console()
@@ -64,14 +64,15 @@ EXAMPLE_TYPES = {
64
64
  "Demonstrates collecting structured data with forms, AI-guided workflows,\n"
65
65
  "and custom handlers. Creates examples in an 'elicitations' subdirectory.",
66
66
  "files": [
67
+ "elicitation_account_server.py",
68
+ "elicitation_forms_server.py",
69
+ "elicitation_game_server.py",
70
+ "fastagent.config.yaml",
71
+ "fastagent.secrets.yaml.example",
67
72
  "forms_demo.py",
68
- "account_creation.py",
69
73
  "game_character.py",
70
74
  "game_character_handler.py",
71
- "elicitation_server.py",
72
- "fastagent.config.yaml",
73
- "fastagent.secrets.yaml.example",
74
- "README.md",
75
+ "tool_call.py",
75
76
  ],
76
77
  "create_subdir": True,
77
78
  },
@@ -226,7 +227,7 @@ def copy_example_files(example_type: str, target_dir: Path, force: bool = False)
226
227
 
227
228
  def show_overview() -> None:
228
229
  """Display an overview of available examples in a nicely formatted table."""
229
- console.print("\n[bold cyan]fast-agent Example Applications[/bold cyan]")
230
+ console.print("\n[bold cyan]fast-agent quickstarts[/bold cyan]")
230
231
  console.print("Build agents and compose workflows through practical examples\n")
231
232
 
232
233
  # Create a table for better organization
@@ -236,31 +237,23 @@ def show_overview() -> None:
236
237
  table.add_column("Files")
237
238
 
238
239
  for name, info in EXAMPLE_TYPES.items():
239
- files_list = "\n".join(f"• {f}" for f in info["files"])
240
+ # Just show file count instead of listing all files
241
+ file_count = len(info["files"])
242
+ files_summary = f"{file_count} files"
240
243
  if "mount_point_files" in info:
241
- files_list += "\n[blue]mount-point:[/blue]\n" + "\n".join(
242
- f" {f}" for f in info["mount_point_files"]
243
- )
244
- table.add_row(f"[green]{name}[/green]", info["description"], files_list)
244
+ mount_count = len(info["mount_point_files"])
245
+ files_summary += f"\n+ {mount_count} data files"
246
+ table.add_row(f"[green]{name}[/green]", info["description"], files_summary)
245
247
 
246
248
  console.print(table)
247
249
 
248
250
  # Show usage instructions in a panel
249
251
  usage_text = (
250
- "[bold]Commands:[/bold]\n"
251
- " fastagent quickstart workflow DIR Create workflow examples in DIR\n"
252
- " fastagent quickstart researcher DIR Create researcher example in 'researcher' subdirectory\n"
253
- " fastagent quickstart data-analysis DIR Create data analysis examples in 'data-analysis' subdirectory\n"
254
- " fastagent quickstart state-transfer DIR Create state transfer examples in 'state-transfer' subdirectory\n"
255
- " fastagent quickstart elicitations DIR Create elicitation form examples in 'elicitations' subdirectory\n\n"
252
+ "[bold]Usage:[/bold]\n"
253
+ " [cyan]fast-agent[/cyan] [green]quickstart[/green] [yellow]<name>[/yellow] [dim]\\[directory][/dim]\n\n"
254
+ "[dim]directory optionally overrides the default subdirectory name[/dim]\n\n"
256
255
  "[bold]Options:[/bold]\n"
257
- " --force Overwrite existing files\n\n"
258
- "[bold]Examples:[/bold]\n"
259
- " fastagent quickstart workflow . Create in current directory\n"
260
- " fastagent quickstart researcher . Create in researcher subdirectory\n"
261
- " fastagent quickstart data-analysis . --force Force overwrite files in data-analysis subdirectory\n"
262
- " fastagent quickstart state-transfer . Create state transfer examples\n"
263
- " fastagent quickstart elicitations . Create interactive form examples"
256
+ " [cyan]--force[/cyan] Overwrite existing files"
264
257
  )
265
258
  console.print(Panel(usage_text, title="Usage", border_style="blue"))
266
259
 
@@ -402,6 +395,6 @@ def _show_completion_message(example_type: str, created: list[str]) -> None:
402
395
 
403
396
  @app.callback(invoke_without_command=True)
404
397
  def main(ctx: typer.Context) -> None:
405
- """Create example applications and learn FastAgent patterns."""
398
+ """Quickstart applications for fast-agent."""
406
399
  if ctx.invoked_subcommand is None:
407
400
  show_overview()
@@ -302,7 +302,7 @@ class ElicitationForm:
302
302
  def submit_alt(event):
303
303
  self._accept()
304
304
 
305
- @kb.add("escape")
305
+ @kb.add("escape", eager=True)
306
306
  def cancel(event):
307
307
  self._cancel()
308
308
 
@@ -1,157 +0,0 @@
1
- # Quick Start: MCP Elicitations
2
-
3
- This quickstart demonstrates **fast-agent**'s elicitation feature - a powerful way to collect structured data from users through forms and interactive prompts.
4
-
5
- ## What are Elicitations?
6
-
7
- Elicitations allow MCP servers to request structured input from users through type-safe forms. This enables:
8
- - User preference collection
9
- - Account registration flows
10
- - Configuration wizards
11
- - Interactive feedback forms
12
- - Any scenario requiring structured user input
13
-
14
- ## Examples Included
15
-
16
- ### 1. Forms Demo (`forms_demo.py`)
17
- A showcase of different form types with beautiful rich console output. Uses the passthrough model to display forms directly to users.
18
-
19
- ```bash
20
- uv run forms_demo.py
21
- ```
22
-
23
- This example demonstrates:
24
- - User profile collection
25
- - Preference settings
26
- - Simple yes/no ratings
27
- - Detailed feedback forms
28
-
29
- ### 2. Account Creation Assistant (`account_creation.py`)
30
- An AI-powered account creation workflow where the LLM initiates the account signup process and the user fills out the form.
31
-
32
- ```bash
33
- # Configure your LLM first (edit fastagent.config.yaml)
34
- uv run account_creation.py --model gpt-4o
35
- ```
36
-
37
- This example shows:
38
- - LLM initiating elicitation via tool calls
39
- - User filling out the form (not the LLM)
40
- - Tool call errors when user cancels/declines
41
- - Success handling when form is completed
42
-
43
- ### 3. Game Character Creator (`game_character.py` + `game_character_handler.py`)
44
- A whimsical example with custom elicitation handling, featuring animated dice rolls and visual effects.
45
-
46
- ```bash
47
- uv run game_character.py
48
- ```
49
-
50
- Features:
51
- - Custom elicitation handler (in separate module for clarity)
52
- - Animated progress bars and typewriter effects
53
- - Epic dice roll mechanics with cosmic bonuses
54
- - Interactive character creation with theatrical flair
55
- - Demonstrates proper handler file organization
56
-
57
- ## Getting Started
58
-
59
- 1. **Setup your environment:**
60
- ```bash
61
- # Activate your Python environment
62
- source .venv/bin/activate # or .venv\Scripts\activate on Windows
63
-
64
- # Install dependencies if needed
65
- uv pip install fast-agent-mcp
66
- ```
67
-
68
- 2. **For the account creation example**, rename `fastagent.secrets.yaml.example` to `fastagent.secrets.yaml` and add your API keys.
69
-
70
- 3. **Run an example:**
71
- ```bash
72
- # Try the forms demo first (quiet mode enabled programmatically)
73
- uv run forms_demo.py
74
- ```
75
-
76
- ## How Elicitations Work
77
-
78
- ### Elicitation Modes
79
-
80
- **fast-agent** supports these elicitation modes:
81
-
82
- 1. **`forms`** - Shows forms to users (great with passthrough model)
83
- 2. **`auto_cancel`** - Automatically cancels all elicitations
84
- 3. **`none`** - No elicitation handling
85
- 4. **Custom handler** - Use your own handler function (overrides mode setting)
86
-
87
- Configure modes in `fastagent.config.yaml`:
88
-
89
- ```yaml
90
- mcp:
91
- servers:
92
- my_server:
93
- command: "uv"
94
- args: ["run", "server.py"]
95
- elicitation:
96
- mode: "forms" # or "auto" or "custom"
97
- ```
98
-
99
- ### Creating Your Own Elicitations
100
-
101
- #### Basic Server-Side Elicitation
102
-
103
- ```python
104
- from pydantic import BaseModel, Field
105
-
106
- class UserPrefs(BaseModel):
107
- theme: str = Field(
108
- description="Color theme",
109
- json_schema_extra={
110
- "enum": ["light", "dark"],
111
- "enumNames": ["Light Mode", "Dark Mode"]
112
- }
113
- )
114
- notifications: bool = Field(True, description="Enable notifications?")
115
-
116
- # In your MCP server:
117
- result = await mcp.get_context().elicit(
118
- "Configure your preferences",
119
- schema=UserPrefs
120
- )
121
- ```
122
-
123
- #### Custom Elicitation Handler
124
-
125
- For advanced interactive experiences, create a custom handler:
126
-
127
- ```python
128
- async def my_custom_handler(context, params) -> ElicitResult:
129
- # Your custom logic here - animations, special effects, etc.
130
- content = {"field": "value"}
131
- return ElicitResult(action="accept", content=content)
132
-
133
- # Register with your agent:
134
- @fast.agent(
135
- "my-agent",
136
- servers=["my_server"],
137
- elicitation_handler=my_custom_handler
138
- )
139
- ```
140
-
141
- See `game_character_handler.py` for a complete example with animations and effects.
142
-
143
- ## Next Steps
144
-
145
- - Explore the example code to understand different patterns
146
- - Try modifying the forms in `elicitation_server.py`
147
- - Create your own custom elicitation handlers
148
- - Check the [documentation](https://fast-agent.ai) for advanced features
149
-
150
- ## Tips
151
-
152
- - Use `rich` for beautiful console output
153
- - Test with passthrough model first, then try real LLMs
154
- - Custom handlers enable creative interactions
155
- - Validate user input in your schemas using Pydantic
156
-
157
- Happy form building! 🚀
@@ -1,157 +0,0 @@
1
- # Quick Start: MCP Elicitations
2
-
3
- This quickstart demonstrates **fast-agent**'s elicitation feature - a powerful way to collect structured data from users through forms and interactive prompts.
4
-
5
- ## What are Elicitations?
6
-
7
- Elicitations allow MCP servers to request structured input from users through type-safe forms. This enables:
8
- - User preference collection
9
- - Account registration flows
10
- - Configuration wizards
11
- - Interactive feedback forms
12
- - Any scenario requiring structured user input
13
-
14
- ## Examples Included
15
-
16
- ### 1. Forms Demo (`forms_demo.py`)
17
- A showcase of different form types with beautiful rich console output. Uses the passthrough model to display forms directly to users.
18
-
19
- ```bash
20
- uv run forms_demo.py
21
- ```
22
-
23
- This example demonstrates:
24
- - User profile collection
25
- - Preference settings
26
- - Simple yes/no ratings
27
- - Detailed feedback forms
28
-
29
- ### 2. Account Creation Assistant (`account_creation.py`)
30
- An AI-powered account creation workflow where the LLM initiates the account signup process and the user fills out the form.
31
-
32
- ```bash
33
- # Configure your LLM first (edit fastagent.config.yaml)
34
- uv run account_creation.py --model gpt-4o
35
- ```
36
-
37
- This example shows:
38
- - LLM initiating elicitation via tool calls
39
- - User filling out the form (not the LLM)
40
- - Tool call errors when user cancels/declines
41
- - Success handling when form is completed
42
-
43
- ### 3. Game Character Creator (`game_character.py` + `game_character_handler.py`)
44
- A whimsical example with custom elicitation handling, featuring animated dice rolls and visual effects.
45
-
46
- ```bash
47
- uv run game_character.py
48
- ```
49
-
50
- Features:
51
- - Custom elicitation handler (in separate module for clarity)
52
- - Animated progress bars and typewriter effects
53
- - Epic dice roll mechanics with cosmic bonuses
54
- - Interactive character creation with theatrical flair
55
- - Demonstrates proper handler file organization
56
-
57
- ## Getting Started
58
-
59
- 1. **Setup your environment:**
60
- ```bash
61
- # Activate your Python environment
62
- source .venv/bin/activate # or .venv\Scripts\activate on Windows
63
-
64
- # Install dependencies if needed
65
- uv pip install fast-agent-mcp
66
- ```
67
-
68
- 2. **For the account creation example**, rename `fastagent.secrets.yaml.example` to `fastagent.secrets.yaml` and add your API keys.
69
-
70
- 3. **Run an example:**
71
- ```bash
72
- # Try the forms demo first (quiet mode enabled programmatically)
73
- uv run forms_demo.py
74
- ```
75
-
76
- ## How Elicitations Work
77
-
78
- ### Elicitation Modes
79
-
80
- **fast-agent** supports these elicitation modes:
81
-
82
- 1. **`forms`** - Shows forms to users (great with passthrough model)
83
- 2. **`auto_cancel`** - Automatically cancels all elicitations
84
- 3. **`none`** - No elicitation handling
85
- 4. **Custom handler** - Use your own handler function (overrides mode setting)
86
-
87
- Configure modes in `fastagent.config.yaml`:
88
-
89
- ```yaml
90
- mcp:
91
- servers:
92
- my_server:
93
- command: "uv"
94
- args: ["run", "server.py"]
95
- elicitation:
96
- mode: "forms" # or "auto" or "custom"
97
- ```
98
-
99
- ### Creating Your Own Elicitations
100
-
101
- #### Basic Server-Side Elicitation
102
-
103
- ```python
104
- from pydantic import BaseModel, Field
105
-
106
- class UserPrefs(BaseModel):
107
- theme: str = Field(
108
- description="Color theme",
109
- json_schema_extra={
110
- "enum": ["light", "dark"],
111
- "enumNames": ["Light Mode", "Dark Mode"]
112
- }
113
- )
114
- notifications: bool = Field(True, description="Enable notifications?")
115
-
116
- # In your MCP server:
117
- result = await mcp.get_context().elicit(
118
- "Configure your preferences",
119
- schema=UserPrefs
120
- )
121
- ```
122
-
123
- #### Custom Elicitation Handler
124
-
125
- For advanced interactive experiences, create a custom handler:
126
-
127
- ```python
128
- async def my_custom_handler(context, params) -> ElicitResult:
129
- # Your custom logic here - animations, special effects, etc.
130
- content = {"field": "value"}
131
- return ElicitResult(action="accept", content=content)
132
-
133
- # Register with your agent:
134
- @fast.agent(
135
- "my-agent",
136
- servers=["my_server"],
137
- elicitation_handler=my_custom_handler
138
- )
139
- ```
140
-
141
- See `game_character_handler.py` for a complete example with animations and effects.
142
-
143
- ## Next Steps
144
-
145
- - Explore the example code to understand different patterns
146
- - Try modifying the forms in `elicitation_server.py`
147
- - Create your own custom elicitation handlers
148
- - Check the [documentation](https://fast-agent.ai) for advanced features
149
-
150
- ## Tips
151
-
152
- - Use `rich` for beautiful console output
153
- - Test with passthrough model first, then try real LLMs
154
- - Custom handlers enable creative interactions
155
- - Validate user input in your schemas using Pydantic
156
-
157
- Happy form building! 🚀
File without changes