fast-agent-mcp 0.2.16__tar.gz → 0.2.18__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.
Files changed (177) hide show
  1. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/.gitignore +1 -0
  2. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/PKG-INFO +6 -7
  3. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/README.md +5 -4
  4. {fast_agent_mcp-0.2.16/src/mcp_agent/resources → fast_agent_mcp-0.2.18}/examples/data-analysis/analysis-campaign.py +2 -2
  5. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/examples/mcp/state-transfer/fastagent.config.yaml +1 -1
  6. fast_agent_mcp-0.2.18/examples/mcp/vision-examples/example1.py +27 -0
  7. fast_agent_mcp-0.2.18/examples/mcp/vision-examples/example2.py +18 -0
  8. fast_agent_mcp-0.2.18/examples/mcp/vision-examples/example3.py +20 -0
  9. fast_agent_mcp-0.2.18/examples/mcp/vision-examples/fastagent.config.yaml +47 -0
  10. {fast_agent_mcp-0.2.16/src/mcp_agent/resources → fast_agent_mcp-0.2.18}/examples/researcher/fastagent.config.yaml +1 -6
  11. {fast_agent_mcp-0.2.16/src/mcp_agent/resources → fast_agent_mcp-0.2.18}/examples/workflows/evaluator.py +1 -1
  12. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/examples/workflows/fastagent.config.yaml +0 -1
  13. {fast_agent_mcp-0.2.16/src/mcp_agent/resources → fast_agent_mcp-0.2.18}/examples/workflows/orchestrator.py +7 -9
  14. {fast_agent_mcp-0.2.16/src/mcp_agent/resources → fast_agent_mcp-0.2.18}/examples/workflows/parallel.py +1 -1
  15. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/pyproject.toml +1 -4
  16. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/agents/base_agent.py +50 -6
  17. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/agents/workflow/orchestrator_agent.py +6 -7
  18. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/agents/workflow/router_agent.py +70 -136
  19. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/app.py +1 -124
  20. fast_agent_mcp-0.2.18/src/mcp_agent/cli/commands/go.py +133 -0
  21. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/cli/commands/setup.py +2 -2
  22. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/cli/main.py +5 -3
  23. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/config.py +16 -13
  24. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/context.py +4 -22
  25. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/core/agent_types.py +2 -2
  26. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/core/direct_decorators.py +2 -2
  27. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/core/direct_factory.py +2 -1
  28. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/core/enhanced_prompt.py +12 -7
  29. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/core/fastagent.py +39 -5
  30. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/core/interactive_prompt.py +6 -2
  31. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/core/request_params.py +5 -1
  32. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/core/validation.py +12 -1
  33. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/executor/workflow_signal.py +0 -2
  34. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/llm/augmented_llm.py +183 -57
  35. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/llm/augmented_llm_passthrough.py +1 -1
  36. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/llm/augmented_llm_playback.py +21 -1
  37. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/llm/memory.py +3 -3
  38. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/llm/model_factory.py +3 -1
  39. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/llm/provider_key_manager.py +1 -0
  40. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/llm/provider_types.py +2 -1
  41. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/llm/providers/augmented_llm_anthropic.py +50 -10
  42. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/llm/providers/augmented_llm_deepseek.py +1 -5
  43. fast_agent_mcp-0.2.18/src/mcp_agent/llm/providers/augmented_llm_google.py +30 -0
  44. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/llm/providers/augmented_llm_openai.py +96 -159
  45. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/llm/providers/multipart_converter_openai.py +10 -27
  46. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/llm/providers/sampling_converter_openai.py +5 -6
  47. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/mcp/interfaces.py +6 -1
  48. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/mcp/mcp_aggregator.py +2 -8
  49. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/mcp/prompt_message_multipart.py +25 -2
  50. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18/src/mcp_agent/resources}/examples/data-analysis/analysis-campaign.py +2 -2
  51. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/resources/examples/in_dev/agent_build.py +1 -1
  52. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/resources/examples/internal/job.py +1 -1
  53. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/resources/examples/mcp/state-transfer/fastagent.config.yaml +1 -1
  54. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/resources/examples/prompting/agent.py +0 -2
  55. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/resources/examples/prompting/fastagent.config.yaml +2 -3
  56. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18/src/mcp_agent/resources}/examples/researcher/fastagent.config.yaml +1 -6
  57. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/resources/examples/workflows/fastagent.config.yaml +0 -1
  58. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18/src/mcp_agent/resources}/examples/workflows/parallel.py +1 -1
  59. fast_agent_mcp-0.2.16/src/mcp_agent/executor/decorator_registry.py +0 -112
  60. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/LICENSE +0 -0
  61. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/examples/data-analysis/analysis.py +0 -0
  62. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/examples/data-analysis/fastagent.config.yaml +0 -0
  63. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/examples/data-analysis/mount-point/WA_Fn-UseC_-HR-Employee-Attrition.csv +0 -0
  64. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/examples/mcp/state-transfer/agent_one.py +0 -0
  65. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/examples/mcp/state-transfer/agent_two.py +0 -0
  66. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/examples/researcher/researcher-eval.py +0 -0
  67. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/examples/researcher/researcher-imp.py +0 -0
  68. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/examples/researcher/researcher.py +0 -0
  69. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/examples/workflows/chaining.py +0 -0
  70. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/examples/workflows/graded_report.md +0 -0
  71. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/examples/workflows/human_input.py +0 -0
  72. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/examples/workflows/router.py +0 -0
  73. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/examples/workflows/short_story.md +0 -0
  74. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/examples/workflows/short_story.txt +0 -0
  75. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/__init__.py +0 -0
  76. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/agents/__init__.py +0 -0
  77. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/agents/agent.py +0 -0
  78. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/agents/workflow/__init__.py +0 -0
  79. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/agents/workflow/chain_agent.py +0 -0
  80. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/agents/workflow/evaluator_optimizer.py +0 -0
  81. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/agents/workflow/orchestrator_models.py +0 -0
  82. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/agents/workflow/orchestrator_prompts.py +0 -0
  83. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/agents/workflow/parallel_agent.py +0 -0
  84. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/cli/__init__.py +0 -0
  85. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/cli/__main__.py +0 -0
  86. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/cli/commands/check_config.py +0 -0
  87. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/cli/commands/quickstart.py +0 -0
  88. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/cli/terminal.py +0 -0
  89. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/console.py +0 -0
  90. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/context_dependent.py +0 -0
  91. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/core/__init__.py +0 -0
  92. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/core/agent_app.py +0 -0
  93. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/core/error_handling.py +0 -0
  94. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/core/exceptions.py +0 -0
  95. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/core/mcp_content.py +0 -0
  96. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/core/prompt.py +0 -0
  97. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/event_progress.py +0 -0
  98. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/executor/__init__.py +0 -0
  99. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/executor/executor.py +0 -0
  100. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/executor/task_registry.py +0 -0
  101. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/human_input/__init__.py +0 -0
  102. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/human_input/handler.py +0 -0
  103. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/human_input/types.py +0 -0
  104. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/llm/__init__.py +0 -0
  105. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/llm/prompt_utils.py +0 -0
  106. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/llm/providers/__init__.py +0 -0
  107. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/llm/providers/anthropic_utils.py +0 -0
  108. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/llm/providers/augmented_llm_generic.py +0 -0
  109. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/llm/providers/augmented_llm_openrouter.py +0 -0
  110. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/llm/providers/multipart_converter_anthropic.py +0 -0
  111. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/llm/providers/openai_multipart.py +0 -0
  112. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/llm/providers/openai_utils.py +0 -0
  113. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/llm/providers/sampling_converter_anthropic.py +0 -0
  114. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/llm/sampling_converter.py +0 -0
  115. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/llm/sampling_format_converter.py +0 -0
  116. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/logging/__init__.py +0 -0
  117. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/logging/events.py +0 -0
  118. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/logging/json_serializer.py +0 -0
  119. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/logging/listeners.py +0 -0
  120. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/logging/logger.py +0 -0
  121. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/logging/rich_progress.py +0 -0
  122. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/logging/tracing.py +0 -0
  123. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/logging/transport.py +0 -0
  124. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/mcp/__init__.py +0 -0
  125. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/mcp/gen_client.py +0 -0
  126. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/mcp/helpers/__init__.py +0 -0
  127. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/mcp/helpers/content_helpers.py +0 -0
  128. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/mcp/logger_textio.py +0 -0
  129. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/mcp/mcp_agent_client_session.py +0 -0
  130. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/mcp/mcp_connection_manager.py +0 -0
  131. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/mcp/mime_utils.py +0 -0
  132. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/mcp/prompt_render.py +0 -0
  133. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/mcp/prompt_serialization.py +0 -0
  134. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/mcp/prompts/__init__.py +0 -0
  135. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/mcp/prompts/__main__.py +0 -0
  136. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/mcp/prompts/prompt_constants.py +0 -0
  137. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/mcp/prompts/prompt_helpers.py +0 -0
  138. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/mcp/prompts/prompt_load.py +0 -0
  139. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/mcp/prompts/prompt_server.py +0 -0
  140. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/mcp/prompts/prompt_template.py +0 -0
  141. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/mcp/resource_utils.py +0 -0
  142. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/mcp/sampling.py +0 -0
  143. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/mcp_server/__init__.py +0 -0
  144. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/mcp_server/agent_server.py +0 -0
  145. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/mcp_server_registry.py +0 -0
  146. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/progress_display.py +0 -0
  147. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/resources/examples/data-analysis/analysis.py +0 -0
  148. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/resources/examples/data-analysis/fastagent.config.yaml +0 -0
  149. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/resources/examples/data-analysis/mount-point/WA_Fn-UseC_-HR-Employee-Attrition.csv +0 -0
  150. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/resources/examples/in_dev/css-LICENSE.txt +0 -0
  151. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/resources/examples/in_dev/slides.py +0 -0
  152. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/resources/examples/internal/agent.py +0 -0
  153. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/resources/examples/internal/fastagent.config.yaml +0 -0
  154. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/resources/examples/internal/history_transfer.py +0 -0
  155. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/resources/examples/internal/prompt_category.py +0 -0
  156. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/resources/examples/internal/prompt_sizing.py +0 -0
  157. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/resources/examples/internal/simple.txt +0 -0
  158. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/resources/examples/internal/sizer.py +0 -0
  159. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/resources/examples/internal/social.py +0 -0
  160. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/resources/examples/mcp/state-transfer/agent_one.py +0 -0
  161. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/resources/examples/mcp/state-transfer/agent_two.py +0 -0
  162. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/resources/examples/mcp/state-transfer/fastagent.secrets.yaml.example +0 -0
  163. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/resources/examples/prompting/__init__.py +0 -0
  164. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/resources/examples/prompting/delimited_prompt.txt +0 -0
  165. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/resources/examples/prompting/image_server.py +0 -0
  166. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/resources/examples/prompting/prompt1.txt +0 -0
  167. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/resources/examples/prompting/work_with_image.py +0 -0
  168. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/resources/examples/researcher/researcher-eval.py +0 -0
  169. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/resources/examples/researcher/researcher-imp.py +0 -0
  170. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/resources/examples/researcher/researcher.py +0 -0
  171. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/resources/examples/workflows/chaining.py +0 -0
  172. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18/src/mcp_agent/resources}/examples/workflows/evaluator.py +0 -0
  173. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/resources/examples/workflows/human_input.py +0 -0
  174. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18/src/mcp_agent/resources}/examples/workflows/orchestrator.py +0 -0
  175. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/resources/examples/workflows/router.py +0 -0
  176. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/resources/examples/workflows/short_story.txt +0 -0
  177. {fast_agent_mcp-0.2.16 → fast_agent_mcp-0.2.18}/src/mcp_agent/ui/console_display.py +0 -0
@@ -194,3 +194,4 @@ tests/e2e/workflow/weather_location.txt
194
194
  tests/integration/prompt-state/multipart.json
195
195
  tests/integration/prompt-state/history.json
196
196
  !tests/integration/api/fastagent.secrets.yaml
197
+ fastagent.jsonl
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fast-agent-mcp
3
- Version: 0.2.16
3
+ Version: 0.2.18
4
4
  Summary: Define, Prompt and Test MCP enabled Agents and Workflows
5
5
  Author-email: Shaun Smith <fastagent@llmindset.co.uk>, Sarmad Qadri <sarmad@lastmileai.dev>
6
6
  License: Apache License
@@ -237,8 +237,6 @@ Requires-Dist: ruff>=0.8.4; extra == 'dev'
237
237
  Requires-Dist: tomli>=2.2.1; extra == 'dev'
238
238
  Provides-Extra: openai
239
239
  Requires-Dist: openai>=1.58.1; extra == 'openai'
240
- Provides-Extra: temporal
241
- Requires-Dist: temporalio>=1.8.0; extra == 'temporal'
242
240
  Description-Content-Type: text/markdown
243
241
 
244
242
  <p align="center">
@@ -255,13 +253,14 @@ Description-Content-Type: text/markdown
255
253
  > [!TIP]
256
254
  > Documentation site is in production here : https://fast-agent.ai. Feel free to feed back what's helpful and what's not. llms.txt link is here: https://fast-agent.ai/llms.txt
257
255
 
258
- **`fast-agent`** enables you to create and interact with sophisticated Agents and Workflows in minutes. It is the first framework with complete, end-to-end tested MCP Feature support including Sampling. Both Anthropic (Haiku, Sonnet, Opus) and OpenAI models (gpt-4o family, o1/o3 family) are supported.
256
+ **`fast-agent`** enables you to create and interact with sophisticated Agents and Workflows in minutes. It is the first framework with complete, end-to-end tested MCP Feature support including Sampling. Both Anthropic (Haiku, Sonnet, Opus) and OpenAI models (gpt-4o/gpt-4.1 family, o1/o3 family) are supported.
259
257
 
260
258
  The simple declarative syntax lets you concentrate on composing your Prompts and MCP Servers to [build effective agents](https://www.anthropic.com/research/building-effective-agents).
261
259
 
262
260
  `fast-agent` is multi-modal, supporting Images and PDFs for both Anthropic and OpenAI endpoints via Prompts, Resources and MCP Tool Call results. The inclusion of passthrough and playback LLMs enable rapid development and test of Python glue-code for your applications.
263
261
 
264
- > [!TIP] > `fast-agent` is now MCP Native! Coming Soon - Full Documentation Site and Further MCP Examples.
262
+ > [!TIP]
263
+ > `fast-agent` is now MCP Native! Coming Soon - Full Documentation Site and Further MCP Examples.
265
264
 
266
265
  ### Agent Application Development
267
266
 
@@ -313,7 +312,7 @@ Or start an interactive chat with the Agent:
313
312
 
314
313
  ```python
315
314
  async with fast.run() as agent:
316
- await agent()
315
+ await agent.interactive()
317
316
  ```
318
317
 
319
318
  Here is the complete `sizer.py` Agent application, with boilerplate code:
@@ -330,7 +329,7 @@ fast = FastAgent("Agent Example")
330
329
  )
331
330
  async def main():
332
331
  async with fast.run() as agent:
333
- await agent()
332
+ await agent.interactive()
334
333
 
335
334
  if __name__ == "__main__":
336
335
  asyncio.run(main())
@@ -12,13 +12,14 @@
12
12
  > [!TIP]
13
13
  > Documentation site is in production here : https://fast-agent.ai. Feel free to feed back what's helpful and what's not. llms.txt link is here: https://fast-agent.ai/llms.txt
14
14
 
15
- **`fast-agent`** enables you to create and interact with sophisticated Agents and Workflows in minutes. It is the first framework with complete, end-to-end tested MCP Feature support including Sampling. Both Anthropic (Haiku, Sonnet, Opus) and OpenAI models (gpt-4o family, o1/o3 family) are supported.
15
+ **`fast-agent`** enables you to create and interact with sophisticated Agents and Workflows in minutes. It is the first framework with complete, end-to-end tested MCP Feature support including Sampling. Both Anthropic (Haiku, Sonnet, Opus) and OpenAI models (gpt-4o/gpt-4.1 family, o1/o3 family) are supported.
16
16
 
17
17
  The simple declarative syntax lets you concentrate on composing your Prompts and MCP Servers to [build effective agents](https://www.anthropic.com/research/building-effective-agents).
18
18
 
19
19
  `fast-agent` is multi-modal, supporting Images and PDFs for both Anthropic and OpenAI endpoints via Prompts, Resources and MCP Tool Call results. The inclusion of passthrough and playback LLMs enable rapid development and test of Python glue-code for your applications.
20
20
 
21
- > [!TIP] > `fast-agent` is now MCP Native! Coming Soon - Full Documentation Site and Further MCP Examples.
21
+ > [!TIP]
22
+ > `fast-agent` is now MCP Native! Coming Soon - Full Documentation Site and Further MCP Examples.
22
23
 
23
24
  ### Agent Application Development
24
25
 
@@ -70,7 +71,7 @@ Or start an interactive chat with the Agent:
70
71
 
71
72
  ```python
72
73
  async with fast.run() as agent:
73
- await agent()
74
+ await agent.interactive()
74
75
  ```
75
76
 
76
77
  Here is the complete `sizer.py` Agent application, with boilerplate code:
@@ -87,7 +88,7 @@ fast = FastAgent("Agent Example")
87
88
  )
88
89
  async def main():
89
90
  async with fast.run() as agent:
90
- await agent()
91
+ await agent.interactive()
91
92
 
92
93
  if __name__ == "__main__":
93
94
  asyncio.run(main())
@@ -33,7 +33,7 @@ Extract key insights that would be compelling for a social media campaign.
33
33
  - Extracted compelling insights suitable for social media promotion
34
34
  """,
35
35
  request_params=RequestParams(maxTokens=8192),
36
- model="gpt-4o",
36
+ model="gpt-4.1",
37
37
  )
38
38
  @fast.evaluator_optimizer(
39
39
  "analysis_tool",
@@ -55,7 +55,7 @@ Extract key insights that would be compelling for a social media campaign.
55
55
  """,
56
56
  servers=["fetch", "brave"], # Using the fetch MCP server for Brave search
57
57
  request_params=RequestParams(temperature=0.3),
58
- model="gpt-4o",
58
+ model="gpt-4.1",
59
59
  )
60
60
  # Social media content generator
61
61
  @fast.agent(
@@ -5,7 +5,7 @@
5
5
  # Check here for current details: https://fast-agent.ai/models/
6
6
 
7
7
  # set the default model for fast-agent below:
8
- default_model: gpt-4o
8
+ default_model: gpt-4.1
9
9
 
10
10
  # Logging and Console Configuration:
11
11
  logger:
@@ -0,0 +1,27 @@
1
+ import asyncio
2
+ from pathlib import Path
3
+
4
+ from mcp_agent.core.fastagent import FastAgent
5
+ from mcp_agent.core.prompt import Prompt
6
+
7
+ # Create the application
8
+ fast = FastAgent("fast-agent example")
9
+
10
+
11
+ # Define the agent
12
+ @fast.agent(instruction="You are a helpful AI Agent", servers=["filesystem"])
13
+ async def main():
14
+ # use the --model command line switch or agent arguments to change model
15
+ async with fast.run() as agent:
16
+ await agent.default.generate(
17
+ [
18
+ Prompt.user(
19
+ Path("cat.png"), "Write a report on the content of the image to 'report.md'"
20
+ )
21
+ ]
22
+ )
23
+ await agent.interactive()
24
+
25
+
26
+ if __name__ == "__main__":
27
+ asyncio.run(main())
@@ -0,0 +1,18 @@
1
+ import asyncio
2
+
3
+ from mcp_agent.core.fastagent import FastAgent
4
+
5
+ # Create the application
6
+ fast = FastAgent("fast-agent example")
7
+
8
+
9
+ # Define the agent
10
+ @fast.agent(instruction="You are a helpful AI Agent", servers=["filesystem"])
11
+ async def main():
12
+ # use the --model command line switch or agent arguments to change model
13
+ async with fast.run() as agent:
14
+ await agent.interactive()
15
+
16
+
17
+ if __name__ == "__main__":
18
+ asyncio.run(main())
@@ -0,0 +1,20 @@
1
+ import asyncio
2
+
3
+ from mcp_agent.core.fastagent import FastAgent
4
+
5
+ # Create the application
6
+ fast = FastAgent("fast-agent example")
7
+
8
+
9
+ # Define the agent
10
+ @fast.agent(instruction="You are a helpful AI Agent", servers=["webcam", "hfspace"])
11
+ async def main():
12
+ async with fast.run() as agent:
13
+ await agent.interactive(
14
+ default_prompt="take an image with the webcam, describe it to flux to "
15
+ "reproduce it and then judge the quality of the result"
16
+ )
17
+
18
+
19
+ if __name__ == "__main__":
20
+ asyncio.run(main())
@@ -0,0 +1,47 @@
1
+ # FastAgent Configuration File
2
+
3
+ # Default Model Configuration:
4
+ #
5
+ # Takes format:
6
+ # <provider>.<model_string>.<reasoning_effort?> (e.g. anthropic.claude-3-5-sonnet-20241022 or openai.o3-mini.low)
7
+ # Accepts aliases for Anthropic Models: haiku, haiku3, sonnet, sonnet35, opus, opus3
8
+ # and OpenAI Models: gpt-4.1, gpt-4.1-mini, o1, o1-mini, o3-mini
9
+ #
10
+ # If not specified, defaults to "haiku".
11
+ # Can be overriden with a command line switch --model=<model>, or within the Agent constructor.
12
+
13
+ default_model: haiku
14
+
15
+ # Logging and Console Configuration:
16
+ logger:
17
+ # level: "debug" | "info" | "warning" | "error"
18
+ # type: "none" | "console" | "file" | "http"
19
+ # path: "/path/to/logfile.jsonl"
20
+
21
+
22
+ # Switch the progress display on or off
23
+ progress_display: true
24
+
25
+ # Show chat User/Assistant messages on the console
26
+ show_chat: true
27
+ # Show tool calls on the console
28
+ show_tools: true
29
+ # Truncate long tool responses on the console
30
+ truncate_tools: true
31
+
32
+ # MCP Servers
33
+ mcp:
34
+ servers:
35
+ fetch:
36
+ command: "uvx"
37
+ args: ["mcp-server-fetch"]
38
+ filesystem:
39
+ command: "npx"
40
+ args: ["-y", "@modelcontextprotocol/server-filesystem", "."]
41
+ webcam:
42
+ command: "npx"
43
+ args: ["-y","@llmindset/mcp-webcam"]
44
+ hfspace:
45
+ command: "npx"
46
+ args: ["-y","@llmindset/mcp-hfspace"]
47
+
@@ -4,7 +4,6 @@
4
4
  #
5
5
  #
6
6
 
7
- execution_engine: asyncio
8
7
  logger:
9
8
  type: console
10
9
  level: error
@@ -53,14 +52,10 @@ mcp:
53
52
  args: ["mcp-server-fetch"]
54
53
  sequential:
55
54
  command: "npx"
56
- args: ["-y","@modelcontextprotocol/server-sequential-thinking"]
57
-
55
+ args: ["-y", "@modelcontextprotocol/server-sequential-thinking"]
58
56
  # webmcp:
59
57
  # command: "node"
60
58
  # args: ["/home/ssmith/.webmcp/server.cjs"]
61
59
  # env:
62
60
  # WEBMCP_SERVER_TOKEN: 96e22896d8143fc1d61fec09208fc5ed
63
61
 
64
-
65
-
66
-
@@ -40,7 +40,7 @@ fast = FastAgent("Evaluator-Optimizer")
40
40
  Summarize your evaluation as a structured response with:
41
41
  - Overall quality rating.
42
42
  - Specific feedback and areas for improvement.""",
43
- model="gpt-4o",
43
+ model="gpt-4.1",
44
44
  )
45
45
  # Define the evaluator-optimizer workflow
46
46
  @fast.evaluator_optimizer(
@@ -3,7 +3,6 @@
3
3
  #
4
4
  #
5
5
 
6
- execution_engine: asyncio
7
6
  logger:
8
7
  type: file
9
8
  level: error
@@ -13,7 +13,7 @@ fast = FastAgent("Orchestrator-Workers")
13
13
  @fast.agent(
14
14
  "author",
15
15
  instruction="""You are to role play a poorly skilled writer,
16
- who makes frequent grammar, punctuations and spelling errors. You enjoy
16
+ who makes frequent grammar, punctuation and spelling errors. You enjoy
17
17
  writing short stories, but the narrative doesn't always make sense""",
18
18
  servers=["filesystem"],
19
19
  )
@@ -25,7 +25,7 @@ fast = FastAgent("Orchestrator-Workers")
25
25
  the closest match to a user's request, make the appropriate tool calls,
26
26
  and return the URI and CONTENTS of the closest match.""",
27
27
  servers=["fetch", "filesystem"],
28
- model="gpt-4o",
28
+ model="gpt-4.1",
29
29
  )
30
30
  @fast.agent(
31
31
  name="writer",
@@ -40,19 +40,17 @@ fast = FastAgent("Orchestrator-Workers")
40
40
  Identify any awkward phrasing or structural issues that could improve clarity.
41
41
  Provide detailed feedback on corrections.""",
42
42
  servers=["fetch"],
43
- model="gpt-4o",
43
+ model="gpt-4.1",
44
44
  )
45
45
  # Define the orchestrator to coordinate the other agents
46
46
  @fast.orchestrator(
47
- name="orchestrate",
48
- agents=["finder", "writer", "proofreader"],
49
- plan_type="full",
47
+ name="orchestrate", agents=["finder", "writer", "proofreader"], plan_type="full", model="sonnet"
50
48
  )
51
49
  async def main() -> None:
52
50
  async with fast.run() as agent:
53
- await agent.author(
54
- "write a 250 word short story about kittens discovering a castle, and save it to short_story.md"
55
- )
51
+ # await agent.author(
52
+ # "write a 250 word short story about kittens discovering a castle, and save it to short_story.md"
53
+ # )
56
54
 
57
55
  # The orchestrator can be used just like any other agent
58
56
  task = """Load the student's short story from short_story.md,
@@ -25,7 +25,7 @@ fast = FastAgent(
25
25
  instruction="""Verify the factual consistency within the story. Identify any contradictions,
26
26
  logical inconsistencies, or inaccuracies in the plot, character actions, or setting.
27
27
  Highlight potential issues with reasoning or coherence.""",
28
- model="gpt-4o",
28
+ model="gpt-4.1",
29
29
  )
30
30
  @fast.agent(
31
31
  name="style_enforcer",
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "fast-agent-mcp"
3
- version = "0.2.16"
3
+ version = "0.2.18"
4
4
  description = "Define, Prompt and Test MCP enabled Agents and Workflows"
5
5
  readme = "README.md"
6
6
  license = { file = "LICENSE" }
@@ -34,9 +34,6 @@ dependencies = [
34
34
  ]
35
35
 
36
36
  [project.optional-dependencies]
37
- temporal = [
38
- "temporalio>=1.8.0",
39
- ]
40
37
  openai = [
41
38
  "openai>=1.58.1",
42
39
  ]
@@ -20,6 +20,7 @@ from typing import (
20
20
  Union,
21
21
  )
22
22
 
23
+ from a2a_types.types import AgentCapabilities, AgentCard, AgentSkill
23
24
  from mcp.types import (
24
25
  CallToolResult,
25
26
  EmbeddedResource,
@@ -58,6 +59,11 @@ if TYPE_CHECKING:
58
59
  from mcp_agent.context import Context
59
60
 
60
61
 
62
+ DEFAULT_CAPABILITIES = AgentCapabilities(
63
+ streaming=False, pushNotifications=False, stateTransitionHistory=False
64
+ )
65
+
66
+
61
67
  class BaseAgent(MCPAggregator, AgentProtocol):
62
68
  """
63
69
  A base Agent class that implements the AgentProtocol interface.
@@ -586,7 +592,7 @@ class BaseAgent(MCPAggregator, AgentProtocol):
586
592
 
587
593
  async def structured(
588
594
  self,
589
- prompt: List[PromptMessageMultipart],
595
+ multipart_messages: List[PromptMessageMultipart],
590
596
  model: Type[ModelT],
591
597
  request_params: RequestParams | None = None,
592
598
  ) -> Tuple[ModelT | None, PromptMessageMultipart]:
@@ -603,7 +609,7 @@ class BaseAgent(MCPAggregator, AgentProtocol):
603
609
  An instance of the specified model, or None if coercion fails
604
610
  """
605
611
  assert self._llm
606
- return await self._llm.structured(prompt, model, request_params)
612
+ return await self._llm.structured(multipart_messages, model, request_params)
607
613
 
608
614
  async def apply_prompt_messages(
609
615
  self, prompts: List[PromptMessageMultipart], request_params: RequestParams | None = None
@@ -626,13 +632,51 @@ class BaseAgent(MCPAggregator, AgentProtocol):
626
632
  def agent_type(self) -> AgentType:
627
633
  """
628
634
  Return the type of this agent.
635
+ """
636
+ return AgentType.BASIC
637
+
638
+ async def agent_card(self) -> AgentCard:
639
+ """
640
+ Return an A2A card describing this Agent
641
+ """
629
642
 
630
- This is used for display purposes in the interactive prompt and other UI elements.
643
+ skills: List[AgentSkill] = []
644
+ tools: ListToolsResult = await self.list_tools()
645
+ for tool in tools.tools:
646
+ skills.append(await self.convert(tool))
631
647
 
632
- Returns:
633
- String representing the agent type
648
+ return AgentCard(
649
+ name=self.name,
650
+ description=self.instruction,
651
+ url=f"fast-agent://agents/{self.name}/",
652
+ version="0.1",
653
+ capabilities=DEFAULT_CAPABILITIES,
654
+ defaultInputModes=["text/plain"],
655
+ defaultOutputModes=["text/plain"],
656
+ provider=None,
657
+ documentationUrl=None,
658
+ authentication=None,
659
+ skills=skills,
660
+ )
661
+
662
+ async def convert(self, tool: Tool) -> AgentSkill:
634
663
  """
635
- return AgentType.BASIC
664
+ Convert a Tool to an AgentSkill.
665
+ """
666
+
667
+ _, tool_without_namespace = await self._parse_resource_name(tool.name, "tool")
668
+ return AgentSkill(
669
+ id=tool.name,
670
+ name=tool_without_namespace,
671
+ description=tool.description,
672
+ tags=["tool"],
673
+ examples=None,
674
+ inputModes=None, # ["text/plain"],
675
+ # cover TextContent | ImageContent ->
676
+ # https://github.com/modelcontextprotocol/modelcontextprotocol/pull/223
677
+ # https://github.com/modelcontextprotocol/modelcontextprotocol/pull/93
678
+ outputModes=None, # ,["text/plain", "image/*"],
679
+ )
636
680
 
637
681
  @property
638
682
  def message_history(self) -> List[PromptMessageMultipart]:
@@ -57,6 +57,7 @@ class OrchestratorAgent(BaseAgent):
57
57
  config: AgentConfig,
58
58
  agents: List[Agent],
59
59
  plan_type: Literal["full", "iterative"] = "full",
60
+ plan_iterations: int = 5,
60
61
  context: Optional[Any] = None,
61
62
  **kwargs,
62
63
  ) -> None:
@@ -83,7 +84,7 @@ class OrchestratorAgent(BaseAgent):
83
84
  agent_name = agent.name
84
85
  self.logger.info(f"Adding agent '{agent_name}' to orchestrator")
85
86
  self.agents[agent_name] = agent
86
-
87
+ self.plan_iterations = plan_iterations
87
88
  # For tracking state during execution
88
89
  self.plan_result: Optional[PlanResult] = None
89
90
 
@@ -186,8 +187,8 @@ class OrchestratorAgent(BaseAgent):
186
187
  """
187
188
  iterations = 0
188
189
  total_steps_executed = 0
189
- max_iterations = request_params.max_iterations
190
- max_steps = getattr(request_params, "max_steps", max_iterations * 5)
190
+ max_iterations = self.plan_iterations
191
+ max_steps = getattr(request_params, "max_steps", max_iterations * 3)
191
192
 
192
193
  # Initialize plan result
193
194
  plan_result = PlanResult(objective=objective, step_results=[])
@@ -414,7 +415,7 @@ class OrchestratorAgent(BaseAgent):
414
415
  plan_status = "Plan Status: Not Started"
415
416
 
416
417
  # Calculate iteration information
417
- max_iterations = request_params.max_iterations
418
+ max_iterations = self.plan_iterations
418
419
  current_iteration = len(plan_result.step_results)
419
420
  current_iteration = min(current_iteration, max_iterations - 1)
420
421
  iterations_remaining = max(0, max_iterations - current_iteration - 1)
@@ -536,9 +537,7 @@ class OrchestratorAgent(BaseAgent):
536
537
  return ""
537
538
 
538
539
  # Get agent instruction or default description
539
- instruction = (
540
- agent.instruction if hasattr(agent, "instruction") else f"Agent '{agent_name}'"
541
- )
540
+ instruction = agent.instruction if agent.instruction else f"Agent '{agent_name}'"
542
541
 
543
542
  # Format with XML tags
544
543
  return f'<fastagent:agent name="{agent_name}">{instruction}</fastagent:agent>'