fast-agent-mcp 0.3.3__tar.gz → 0.3.5__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 (287) hide show
  1. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/.gitignore +1 -0
  2. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/PKG-INFO +40 -3
  3. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/README.md +37 -1
  4. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/custom-agents/agent.py +2 -2
  5. {fast_agent_mcp-0.3.3/src/fast_agent/resources → fast_agent_mcp-0.3.5}/examples/data-analysis/analysis-campaign.py +1 -1
  6. {fast_agent_mcp-0.3.3/src/fast_agent/resources → fast_agent_mcp-0.3.5}/examples/data-analysis/analysis.py +1 -1
  7. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/fastapi/fastapi-advanced.py +1 -1
  8. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/fastapi/fastapi-simple.py +1 -1
  9. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/mcp/elicitations/forms_demo.py +1 -1
  10. {fast_agent_mcp-0.3.3/src/fast_agent/resources → fast_agent_mcp-0.3.5}/examples/mcp/elicitations/game_character.py +1 -1
  11. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/mcp/elicitations/tool_call.py +1 -1
  12. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/mcp/mcp-filtering/test_mcp_filtering.py +1 -1
  13. {fast_agent_mcp-0.3.3/src/fast_agent/resources → fast_agent_mcp-0.3.5}/examples/mcp/state-transfer/agent_one.py +1 -1
  14. {fast_agent_mcp-0.3.3/src/fast_agent/resources → fast_agent_mcp-0.3.5}/examples/mcp/state-transfer/agent_two.py +1 -1
  15. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/mcp/vision-examples/example1.py +1 -1
  16. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/mcp/vision-examples/example2.py +1 -1
  17. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/mcp/vision-examples/example3.py +1 -1
  18. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/otel/agent.py +1 -1
  19. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/otel/agent2.py +1 -1
  20. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/researcher/researcher-eval.py +1 -1
  21. {fast_agent_mcp-0.3.3/src/fast_agent/resources → fast_agent_mcp-0.3.5}/examples/researcher/researcher-imp.py +1 -1
  22. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/researcher/researcher.py +1 -1
  23. {fast_agent_mcp-0.3.3/src/fast_agent/resources → fast_agent_mcp-0.3.5/examples}/setup/agent.py +1 -1
  24. {fast_agent_mcp-0.3.3/src/fast_agent/resources → fast_agent_mcp-0.3.5/examples}/setup/fastagent.config.yaml +2 -2
  25. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/tensorzero/agent.py +1 -1
  26. {fast_agent_mcp-0.3.3/src/fast_agent/resources → fast_agent_mcp-0.3.5}/examples/tensorzero/image_demo.py +1 -1
  27. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/tensorzero/simple_agent.py +1 -1
  28. {fast_agent_mcp-0.3.3/src/fast_agent/resources → fast_agent_mcp-0.3.5}/examples/workflows/chaining.py +1 -1
  29. {fast_agent_mcp-0.3.3/src/fast_agent/resources → fast_agent_mcp-0.3.5}/examples/workflows/evaluator.py +1 -1
  30. {fast_agent_mcp-0.3.3/src/fast_agent/resources → fast_agent_mcp-0.3.5}/examples/workflows/human_input.py +1 -1
  31. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/workflows/orchestrator.py +1 -1
  32. {fast_agent_mcp-0.3.3/src/fast_agent/resources → fast_agent_mcp-0.3.5}/examples/workflows/parallel.py +1 -1
  33. {fast_agent_mcp-0.3.3/src/fast_agent/resources → fast_agent_mcp-0.3.5}/examples/workflows/router.py +1 -1
  34. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/pyproject.toml +3 -2
  35. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/__init__.py +6 -3
  36. fast_agent_mcp-0.3.5/src/fast_agent/agents/__init__.py +85 -0
  37. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/cli/__main__.py +8 -5
  38. fast_agent_mcp-0.3.5/src/fast_agent/cli/commands/auth.py +370 -0
  39. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/cli/commands/check_config.py +54 -3
  40. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/cli/commands/go.py +1 -1
  41. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/cli/commands/quickstart.py +3 -1
  42. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/cli/commands/server_helpers.py +10 -2
  43. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/cli/commands/setup.py +3 -2
  44. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/cli/constants.py +1 -1
  45. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/cli/main.py +3 -1
  46. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/config.py +63 -8
  47. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/core/__init__.py +38 -37
  48. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/core/direct_factory.py +1 -1
  49. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/mcp/mcp_connection_manager.py +21 -3
  50. fast_agent_mcp-0.3.5/src/fast_agent/mcp/oauth_client.py +481 -0
  51. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/mcp/ui_agent.py +1 -1
  52. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5/src/fast_agent/resources}/examples/data-analysis/analysis-campaign.py +1 -1
  53. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5/src/fast_agent/resources}/examples/data-analysis/analysis.py +1 -1
  54. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/resources/examples/mcp/elicitations/forms_demo.py +1 -1
  55. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5/src/fast_agent/resources}/examples/mcp/elicitations/game_character.py +1 -1
  56. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/resources/examples/mcp/elicitations/tool_call.py +1 -1
  57. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5/src/fast_agent/resources}/examples/mcp/state-transfer/agent_one.py +1 -1
  58. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5/src/fast_agent/resources}/examples/mcp/state-transfer/agent_two.py +1 -1
  59. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/resources/examples/researcher/researcher-eval.py +1 -1
  60. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5/src/fast_agent/resources}/examples/researcher/researcher-imp.py +1 -1
  61. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/resources/examples/researcher/researcher.py +1 -1
  62. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/resources/examples/tensorzero/agent.py +1 -1
  63. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5/src/fast_agent/resources}/examples/tensorzero/image_demo.py +1 -1
  64. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/resources/examples/tensorzero/simple_agent.py +1 -1
  65. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5/src/fast_agent/resources}/examples/workflows/chaining.py +1 -1
  66. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5/src/fast_agent/resources}/examples/workflows/evaluator.py +1 -1
  67. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5/src/fast_agent/resources}/examples/workflows/human_input.py +1 -1
  68. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/resources/examples/workflows/orchestrator.py +1 -1
  69. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5/src/fast_agent/resources}/examples/workflows/parallel.py +1 -1
  70. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5/src/fast_agent/resources}/examples/workflows/router.py +1 -1
  71. {fast_agent_mcp-0.3.3/examples → fast_agent_mcp-0.3.5/src/fast_agent/resources}/setup/agent.py +1 -1
  72. {fast_agent_mcp-0.3.3/examples → fast_agent_mcp-0.3.5/src/fast_agent/resources}/setup/fastagent.config.yaml +2 -2
  73. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/ui/mcp_ui_utils.py +12 -1
  74. fast_agent_mcp-0.3.3/src/fast_agent/agents/__init__.py +0 -36
  75. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/LICENSE +0 -0
  76. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/azure-openai/fastagent.config.yaml +0 -0
  77. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/bedrock/fast-agent.config.yaml +0 -0
  78. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/custom-agents/fastagent.config.yaml +0 -0
  79. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/data-analysis/fastagent.config.yaml +0 -0
  80. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/data-analysis/mount-point/WA_Fn-UseC_-HR-Employee-Attrition.csv +0 -0
  81. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/fastapi/pyproject.toml +0 -0
  82. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/fastapi/readme.md +0 -0
  83. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/mcp/elicitations/elicitation_account_server.py +0 -0
  84. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/mcp/elicitations/elicitation_forms_server.py +0 -0
  85. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/mcp/elicitations/elicitation_game_server.py +0 -0
  86. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/mcp/elicitations/fastagent.config.yaml +0 -0
  87. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/mcp/elicitations/fastagent.secrets.yaml.example +0 -0
  88. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/mcp/elicitations/game_character_handler.py +0 -0
  89. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/mcp/mcp-filtering/fastagent.config.yaml +0 -0
  90. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/mcp/mcp-filtering/fastagent.secrets.yaml.example +0 -0
  91. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/mcp/mcp-filtering/mcp_server.py +0 -0
  92. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/mcp/state-transfer/fastagent.config.yaml +0 -0
  93. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/mcp/state-transfer/fastagent.secrets.yaml.example +0 -0
  94. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/mcp/vision-examples/cat.png +0 -0
  95. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/mcp/vision-examples/fastagent.config.yaml +0 -0
  96. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/new-api/display_check.py +0 -0
  97. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/new-api/simple_llm.py +0 -0
  98. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/new-api/simple_llm_advanced.py +0 -0
  99. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/new-api/simple_mcp.py +0 -0
  100. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/otel/docker-compose.yaml +0 -0
  101. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/otel/fastagent.config.yaml +0 -0
  102. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/researcher/fastagent.config.yaml +0 -0
  103. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/setup/.gitignore +0 -0
  104. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/setup/fastagent.secrets.yaml.example +0 -0
  105. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/setup/pyproject.toml.tmpl +0 -0
  106. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/tensorzero/.env.sample +0 -0
  107. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/tensorzero/Makefile +0 -0
  108. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/tensorzero/README.md +0 -0
  109. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/tensorzero/demo_images/clam.jpg +0 -0
  110. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/tensorzero/demo_images/crab.png +0 -0
  111. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/tensorzero/demo_images/shrimp.png +0 -0
  112. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/tensorzero/docker-compose.yml +0 -0
  113. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/tensorzero/fastagent.config.yaml +0 -0
  114. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/tensorzero/mcp_server/Dockerfile +0 -0
  115. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/tensorzero/mcp_server/entrypoint.sh +0 -0
  116. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/tensorzero/mcp_server/mcp_server.py +0 -0
  117. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/tensorzero/mcp_server/pyproject.toml +0 -0
  118. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/tensorzero/tensorzero_config/system_schema.json +0 -0
  119. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/tensorzero/tensorzero_config/system_template.minijinja +0 -0
  120. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/tensorzero/tensorzero_config/tensorzero.toml +0 -0
  121. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/workflows/fastagent.config.yaml +0 -0
  122. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/workflows/graded_report.md +0 -0
  123. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/workflows/short_story.md +0 -0
  124. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/examples/workflows/short_story.txt +0 -0
  125. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/hatch_build.py +0 -0
  126. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/agents/agent_types.py +0 -0
  127. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/agents/llm_agent.py +0 -0
  128. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/agents/llm_decorator.py +0 -0
  129. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/agents/mcp_agent.py +0 -0
  130. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/agents/tool_agent.py +0 -0
  131. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/agents/workflow/chain_agent.py +0 -0
  132. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/agents/workflow/evaluator_optimizer.py +0 -0
  133. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/agents/workflow/iterative_planner.py +0 -0
  134. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/agents/workflow/orchestrator_models.py +0 -0
  135. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/agents/workflow/orchestrator_prompts.py +0 -0
  136. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/agents/workflow/parallel_agent.py +0 -0
  137. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/agents/workflow/router_agent.py +0 -0
  138. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/cli/__init__.py +0 -0
  139. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/cli/commands/url_parser.py +0 -0
  140. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/cli/terminal.py +0 -0
  141. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/constants.py +0 -0
  142. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/context.py +0 -0
  143. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/context_dependent.py +0 -0
  144. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/core/agent_app.py +0 -0
  145. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/core/core_app.py +0 -0
  146. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/core/direct_decorators.py +0 -0
  147. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/core/error_handling.py +0 -0
  148. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/core/exceptions.py +0 -0
  149. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/core/executor/__init__.py +0 -0
  150. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/core/executor/executor.py +0 -0
  151. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/core/executor/task_registry.py +0 -0
  152. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/core/executor/workflow_signal.py +0 -0
  153. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/core/fastagent.py +0 -0
  154. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/core/logging/__init__.py +0 -0
  155. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/core/logging/events.py +0 -0
  156. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/core/logging/json_serializer.py +0 -0
  157. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/core/logging/listeners.py +0 -0
  158. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/core/logging/logger.py +0 -0
  159. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/core/logging/transport.py +0 -0
  160. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/core/prompt.py +0 -0
  161. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/core/validation.py +0 -0
  162. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/event_progress.py +0 -0
  163. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/history/history_exporter.py +0 -0
  164. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/human_input/__init__.py +0 -0
  165. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/human_input/elicitation_handler.py +0 -0
  166. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/human_input/elicitation_state.py +0 -0
  167. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/human_input/form_fields.py +0 -0
  168. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/human_input/simple_form.py +0 -0
  169. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/human_input/types.py +0 -0
  170. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/interfaces.py +0 -0
  171. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/llm/__init__.py +0 -0
  172. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/llm/fastagent_llm.py +0 -0
  173. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/llm/internal/passthrough.py +0 -0
  174. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/llm/internal/playback.py +0 -0
  175. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/llm/internal/silent.py +0 -0
  176. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/llm/internal/slow.py +0 -0
  177. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/llm/memory.py +0 -0
  178. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/llm/model_database.py +0 -0
  179. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/llm/model_factory.py +0 -0
  180. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/llm/model_info.py +0 -0
  181. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/llm/prompt_utils.py +0 -0
  182. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/llm/provider/anthropic/anthropic_utils.py +0 -0
  183. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/llm/provider/anthropic/llm_anthropic.py +0 -0
  184. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/llm/provider/anthropic/multipart_converter_anthropic.py +0 -0
  185. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/llm/provider/bedrock/bedrock_utils.py +0 -0
  186. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/llm/provider/bedrock/llm_bedrock.py +0 -0
  187. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/llm/provider/google/google_converter.py +0 -0
  188. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/llm/provider/google/llm_google_native.py +0 -0
  189. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/llm/provider/openai/llm_aliyun.py +0 -0
  190. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/llm/provider/openai/llm_azure.py +0 -0
  191. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/llm/provider/openai/llm_deepseek.py +0 -0
  192. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/llm/provider/openai/llm_generic.py +0 -0
  193. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/llm/provider/openai/llm_google_oai.py +0 -0
  194. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/llm/provider/openai/llm_groq.py +0 -0
  195. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/llm/provider/openai/llm_openai.py +0 -0
  196. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/llm/provider/openai/llm_openrouter.py +0 -0
  197. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/llm/provider/openai/llm_tensorzero_openai.py +0 -0
  198. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/llm/provider/openai/llm_xai.py +0 -0
  199. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/llm/provider/openai/multipart_converter_openai.py +0 -0
  200. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/llm/provider/openai/openai_multipart.py +0 -0
  201. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/llm/provider/openai/openai_utils.py +0 -0
  202. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/llm/provider_key_manager.py +0 -0
  203. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/llm/provider_types.py +0 -0
  204. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/llm/request_params.py +0 -0
  205. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/llm/sampling_converter.py +0 -0
  206. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/llm/usage_tracking.py +0 -0
  207. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/mcp/__init__.py +0 -0
  208. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/mcp/common.py +0 -0
  209. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/mcp/elicitation_factory.py +0 -0
  210. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/mcp/elicitation_handlers.py +0 -0
  211. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/mcp/gen_client.py +0 -0
  212. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/mcp/helpers/__init__.py +0 -0
  213. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/mcp/helpers/content_helpers.py +0 -0
  214. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/mcp/helpers/server_config_helpers.py +0 -0
  215. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/mcp/hf_auth.py +0 -0
  216. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/mcp/interfaces.py +0 -0
  217. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/mcp/logger_textio.py +0 -0
  218. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/mcp/mcp_agent_client_session.py +0 -0
  219. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/mcp/mcp_aggregator.py +0 -0
  220. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/mcp/mcp_content.py +0 -0
  221. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/mcp/mime_utils.py +0 -0
  222. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/mcp/prompt.py +0 -0
  223. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/mcp/prompt_message_extended.py +0 -0
  224. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/mcp/prompt_render.py +0 -0
  225. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/mcp/prompt_serialization.py +0 -0
  226. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/mcp/prompts/__init__.py +0 -0
  227. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/mcp/prompts/__main__.py +0 -0
  228. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/mcp/prompts/prompt_constants.py +0 -0
  229. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/mcp/prompts/prompt_helpers.py +0 -0
  230. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/mcp/prompts/prompt_load.py +0 -0
  231. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/mcp/prompts/prompt_server.py +0 -0
  232. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/mcp/prompts/prompt_template.py +0 -0
  233. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/mcp/resource_utils.py +0 -0
  234. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/mcp/sampling.py +0 -0
  235. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/mcp/server/__init__.py +0 -0
  236. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/mcp/server/agent_server.py +0 -0
  237. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/mcp/ui_mixin.py +0 -0
  238. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/mcp_server_registry.py +0 -0
  239. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/py.typed +0 -0
  240. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/resources/examples/data-analysis/fastagent.config.yaml +0 -0
  241. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/resources/examples/data-analysis/mount-point/WA_Fn-UseC_-HR-Employee-Attrition.csv +0 -0
  242. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/resources/examples/mcp/elicitations/elicitation_account_server.py +0 -0
  243. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/resources/examples/mcp/elicitations/elicitation_forms_server.py +0 -0
  244. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/resources/examples/mcp/elicitations/elicitation_game_server.py +0 -0
  245. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/resources/examples/mcp/elicitations/fastagent.config.yaml +0 -0
  246. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/resources/examples/mcp/elicitations/fastagent.secrets.yaml.example +0 -0
  247. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/resources/examples/mcp/elicitations/game_character_handler.py +0 -0
  248. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/resources/examples/mcp/state-transfer/fastagent.config.yaml +0 -0
  249. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/resources/examples/mcp/state-transfer/fastagent.secrets.yaml.example +0 -0
  250. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/resources/examples/researcher/fastagent.config.yaml +0 -0
  251. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/resources/examples/tensorzero/.env.sample +0 -0
  252. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/resources/examples/tensorzero/Makefile +0 -0
  253. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/resources/examples/tensorzero/README.md +0 -0
  254. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/resources/examples/tensorzero/demo_images/clam.jpg +0 -0
  255. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/resources/examples/tensorzero/demo_images/crab.png +0 -0
  256. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/resources/examples/tensorzero/demo_images/shrimp.png +0 -0
  257. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/resources/examples/tensorzero/docker-compose.yml +0 -0
  258. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/resources/examples/tensorzero/fastagent.config.yaml +0 -0
  259. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/resources/examples/tensorzero/mcp_server/.python-version +0 -0
  260. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/resources/examples/tensorzero/mcp_server/Dockerfile +0 -0
  261. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/resources/examples/tensorzero/mcp_server/entrypoint.sh +0 -0
  262. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/resources/examples/tensorzero/mcp_server/mcp_server.py +0 -0
  263. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/resources/examples/tensorzero/mcp_server/pyproject.toml +0 -0
  264. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/resources/examples/tensorzero/tensorzero_config/system_schema.json +0 -0
  265. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/resources/examples/tensorzero/tensorzero_config/system_template.minijinja +0 -0
  266. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/resources/examples/tensorzero/tensorzero_config/tensorzero.toml +0 -0
  267. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/resources/examples/workflows/fastagent.config.yaml +0 -0
  268. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/resources/examples/workflows/graded_report.md +0 -0
  269. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/resources/examples/workflows/short_story.md +0 -0
  270. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/resources/examples/workflows/short_story.txt +0 -0
  271. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/resources/setup/.gitignore +0 -0
  272. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/resources/setup/fastagent.secrets.yaml.example +0 -0
  273. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/resources/setup/pyproject.toml.tmpl +0 -0
  274. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/tools/elicitation.py +0 -0
  275. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/types/__init__.py +0 -0
  276. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/types/llm_stop_reason.py +0 -0
  277. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/ui/__init__.py +0 -0
  278. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/ui/console.py +0 -0
  279. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/ui/console_display.py +0 -0
  280. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/ui/elicitation_form.py +0 -0
  281. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/ui/elicitation_style.py +0 -0
  282. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/ui/enhanced_prompt.py +0 -0
  283. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/ui/interactive_prompt.py +0 -0
  284. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/ui/mermaid_utils.py +0 -0
  285. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/ui/progress_display.py +0 -0
  286. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/ui/rich_progress.py +0 -0
  287. {fast_agent_mcp-0.3.3 → fast_agent_mcp-0.3.5}/src/fast_agent/ui/usage_display.py +0 -0
@@ -200,3 +200,4 @@ fastagent.jsonl
200
200
 
201
201
  tests/e2e/smoke/base/weather_location.txt
202
202
  tests/integration/roots/fastagent.jsonl
203
+ .fast-agent/
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fast-agent-mcp
3
- Version: 0.3.3
3
+ Version: 0.3.5
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
@@ -208,7 +208,7 @@ License-File: LICENSE
208
208
  Classifier: License :: OSI Approved :: Apache Software License
209
209
  Classifier: Operating System :: OS Independent
210
210
  Classifier: Programming Language :: Python :: 3
211
- Requires-Python: >=3.13.7
211
+ Requires-Python: >=3.13.5
212
212
  Requires-Dist: a2a-sdk>=0.3.0
213
213
  Requires-Dist: aiohttp>=3.11.13
214
214
  Requires-Dist: anthropic>=0.66.0
@@ -218,6 +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.33.0
221
+ Requires-Dist: keyring>=24.3.1
221
222
  Requires-Dist: mcp==1.14.0
222
223
  Requires-Dist: openai>=1.106.1
223
224
  Requires-Dist: opentelemetry-distro>=0.55b0
@@ -321,7 +322,7 @@ Here is the complete `sizer.py` Agent application, with boilerplate code:
321
322
 
322
323
  ```python
323
324
  import asyncio
324
- from fast_agent.core.fastagent import FastAgent
325
+ from fast_agent import FastAgent
325
326
 
326
327
  # Create the application
327
328
  fast = FastAgent("Agent Example")
@@ -380,6 +381,42 @@ uv run workflow/chaining.py --agent post_writer --message "<url>"
380
381
 
381
382
  Add the `--quiet` switch to disable progress and message display and return only the final response - useful for simple automations.
382
383
 
384
+ ## MCP OAuth (v2.1)
385
+
386
+ For SSE and HTTP MCP servers, OAuth is enabled by default with minimal configuration. A local callback server is used to capture the authorization code, with a paste-URL fallback if the port is unavailable.
387
+
388
+ - Minimal per-server settings in `fastagent.config.yaml`:
389
+
390
+ ```yaml
391
+ mcp:
392
+ servers:
393
+ myserver:
394
+ transport: http # or sse
395
+ url: http://localhost:8001/mcp # or /sse for SSE servers
396
+ auth:
397
+ oauth: true # default: true
398
+ redirect_port: 3030 # default: 3030
399
+ redirect_path: /callback # default: /callback
400
+ # scope: "user" # optional; if omitted, server defaults are used
401
+ ```
402
+
403
+ - The OAuth client uses PKCE and in-memory token storage (no tokens written to disk).
404
+ - Token persistence: by default, tokens are stored securely in your OS keychain via `keyring`. If a keychain is unavailable (e.g., headless container), in-memory storage is used for the session.
405
+ - To force in-memory only per server, set:
406
+
407
+ ```yaml
408
+ mcp:
409
+ servers:
410
+ myserver:
411
+ transport: http
412
+ url: http://localhost:8001/mcp
413
+ auth:
414
+ oauth: true
415
+ persist: memory
416
+ ```
417
+
418
+ - To disable OAuth for a specific server , set `auth.oauth: false` for that server.
419
+
383
420
  ## Workflows
384
421
 
385
422
  ### Chain
@@ -83,7 +83,7 @@ Here is the complete `sizer.py` Agent application, with boilerplate code:
83
83
 
84
84
  ```python
85
85
  import asyncio
86
- from fast_agent.core.fastagent import FastAgent
86
+ from fast_agent import FastAgent
87
87
 
88
88
  # Create the application
89
89
  fast = FastAgent("Agent Example")
@@ -142,6 +142,42 @@ uv run workflow/chaining.py --agent post_writer --message "<url>"
142
142
 
143
143
  Add the `--quiet` switch to disable progress and message display and return only the final response - useful for simple automations.
144
144
 
145
+ ## MCP OAuth (v2.1)
146
+
147
+ For SSE and HTTP MCP servers, OAuth is enabled by default with minimal configuration. A local callback server is used to capture the authorization code, with a paste-URL fallback if the port is unavailable.
148
+
149
+ - Minimal per-server settings in `fastagent.config.yaml`:
150
+
151
+ ```yaml
152
+ mcp:
153
+ servers:
154
+ myserver:
155
+ transport: http # or sse
156
+ url: http://localhost:8001/mcp # or /sse for SSE servers
157
+ auth:
158
+ oauth: true # default: true
159
+ redirect_port: 3030 # default: 3030
160
+ redirect_path: /callback # default: /callback
161
+ # scope: "user" # optional; if omitted, server defaults are used
162
+ ```
163
+
164
+ - The OAuth client uses PKCE and in-memory token storage (no tokens written to disk).
165
+ - Token persistence: by default, tokens are stored securely in your OS keychain via `keyring`. If a keychain is unavailable (e.g., headless container), in-memory storage is used for the session.
166
+ - To force in-memory only per server, set:
167
+
168
+ ```yaml
169
+ mcp:
170
+ servers:
171
+ myserver:
172
+ transport: http
173
+ url: http://localhost:8001/mcp
174
+ auth:
175
+ oauth: true
176
+ persist: memory
177
+ ```
178
+
179
+ - To disable OAuth for a specific server , set `auth.oauth: false` for that server.
180
+
145
181
  ## Workflows
146
182
 
147
183
  ### Chain
@@ -1,7 +1,7 @@
1
1
  import asyncio
2
2
 
3
- from fast_agent.agents.mcp_agent import McpAgent
4
- from fast_agent.core.fastagent import FastAgent
3
+ from fast_agent import FastAgent
4
+ from fast_agent.agents import McpAgent
5
5
 
6
6
  # Create the application
7
7
  fast = FastAgent("fast-agent example")
@@ -1,6 +1,6 @@
1
1
  import asyncio
2
2
 
3
- from fast_agent.core.fastagent import FastAgent
3
+ from fast_agent import FastAgent
4
4
  from fast_agent.llm.fastagent_llm import RequestParams
5
5
 
6
6
  # Create the application
@@ -1,6 +1,6 @@
1
1
  import asyncio
2
2
 
3
- from fast_agent.core.fastagent import FastAgent
3
+ from fast_agent import FastAgent
4
4
 
5
5
  # Create the application
6
6
  fast = FastAgent("Data Analysis (Roots)")
@@ -2,8 +2,8 @@ from contextlib import asynccontextmanager
2
2
 
3
3
  from fastapi import Body, FastAPI, HTTPException
4
4
 
5
+ from fast_agent.agents import McpAgent
5
6
  from fast_agent.agents.agent_types import AgentConfig
6
- from fast_agent.agents.mcp_agent import McpAgent
7
7
  from fast_agent.core import Core
8
8
  from fast_agent.core.direct_factory import get_model_factory
9
9
  from fast_agent.mcp import PromptMessageExtended
@@ -3,7 +3,7 @@ from contextlib import asynccontextmanager
3
3
  from fastapi import FastAPI, HTTPException
4
4
  from pydantic import BaseModel
5
5
 
6
- from fast_agent.core.fastagent import FastAgent
6
+ from fast_agent import FastAgent
7
7
 
8
8
  # Create FastAgent without parsing CLI args (plays nice with uvicorn)
9
9
  fast = FastAgent("fast-agent demo", parse_cli_args=False, quiet=True)
@@ -13,7 +13,7 @@ import asyncio
13
13
  from rich.console import Console
14
14
  from rich.panel import Panel
15
15
 
16
- from fast_agent.core.fastagent import FastAgent
16
+ from fast_agent import FastAgent
17
17
  from fast_agent.mcp.helpers.content_helpers import get_resource_text
18
18
 
19
19
  fast = FastAgent("Elicitation Forms Demo", quiet=True)
@@ -14,7 +14,7 @@ from game_character_handler import game_character_elicitation_handler
14
14
  from rich.console import Console
15
15
  from rich.panel import Panel
16
16
 
17
- from fast_agent.core.fastagent import FastAgent
17
+ from fast_agent import FastAgent
18
18
  from fast_agent.mcp.helpers.content_helpers import get_resource_text
19
19
 
20
20
  fast = FastAgent("Game Character Creator", quiet=True)
@@ -1,6 +1,6 @@
1
1
  import asyncio
2
2
 
3
- from fast_agent.core.fastagent import FastAgent
3
+ from fast_agent import FastAgent
4
4
 
5
5
  # Create the application
6
6
  fast = FastAgent("fast-agent example")
@@ -1,7 +1,7 @@
1
1
  import asyncio
2
2
  import sys
3
3
 
4
- from fast_agent.core.fastagent import FastAgent, PromptExitError
4
+ from fast_agent import FastAgent, PromptExitError
5
5
 
6
6
  fast_agent = FastAgent(name="MCP Filtering Demo", parse_cli_args=False, quiet=False)
7
7
 
@@ -1,6 +1,6 @@
1
1
  import asyncio
2
2
 
3
- from fast_agent.core.fastagent import FastAgent
3
+ from fast_agent import FastAgent
4
4
 
5
5
  # Create the application
6
6
  fast = FastAgent("fast-agent agent_one (mcp server)")
@@ -1,6 +1,6 @@
1
1
  import asyncio
2
2
 
3
- from fast_agent.core.fastagent import FastAgent
3
+ from fast_agent import FastAgent
4
4
 
5
5
  # Create the application
6
6
  fast = FastAgent("fast-agent agent_two (mcp client)")
@@ -1,7 +1,7 @@
1
1
  import asyncio
2
2
  from pathlib import Path
3
3
 
4
- from fast_agent.core.fastagent import FastAgent
4
+ from fast_agent import FastAgent
5
5
  from fast_agent.core.prompt import Prompt
6
6
 
7
7
  # Create the application
@@ -1,6 +1,6 @@
1
1
  import asyncio
2
2
 
3
- from fast_agent.core.fastagent import FastAgent
3
+ from fast_agent import FastAgent
4
4
 
5
5
  # Create the application
6
6
  fast = FastAgent("fast-agent example")
@@ -1,6 +1,6 @@
1
1
  import asyncio
2
2
 
3
- from fast_agent.core.fastagent import FastAgent
3
+ from fast_agent import FastAgent
4
4
 
5
5
  # Create the application
6
6
  fast = FastAgent("fast-agent example")
@@ -3,7 +3,7 @@ from typing import Annotated
3
3
 
4
4
  from pydantic import BaseModel, Field
5
5
 
6
- from fast_agent.core.fastagent import FastAgent
6
+ from fast_agent import FastAgent
7
7
  from fast_agent.core.prompt import Prompt
8
8
  from fast_agent.llm.request_params import RequestParams
9
9
 
@@ -3,7 +3,7 @@ from typing import Annotated
3
3
 
4
4
  from pydantic import BaseModel, Field
5
5
 
6
- from fast_agent.core.fastagent import FastAgent
6
+ from fast_agent import FastAgent
7
7
  from fast_agent.core.prompt import Prompt
8
8
  from fast_agent.llm.request_params import RequestParams
9
9
 
@@ -1,6 +1,6 @@
1
1
  import asyncio
2
2
 
3
- from fast_agent.core.fastagent import FastAgent
3
+ from fast_agent import FastAgent
4
4
 
5
5
  agents = FastAgent(name="Researcher Agent (EO)")
6
6
 
@@ -1,6 +1,6 @@
1
1
  import asyncio
2
2
 
3
- from fast_agent.core.fastagent import FastAgent
3
+ from fast_agent import FastAgent
4
4
 
5
5
  agents = FastAgent(name="Enhanced Researcher")
6
6
 
@@ -1,6 +1,6 @@
1
1
  import asyncio
2
2
 
3
- from fast_agent.core.fastagent import FastAgent
3
+ from fast_agent import FastAgent
4
4
 
5
5
  # from rich import print
6
6
 
@@ -1,6 +1,6 @@
1
1
  import asyncio
2
2
 
3
- from fast_agent.core.fastagent import FastAgent
3
+ from fast_agent import FastAgent
4
4
 
5
5
  # Create the application
6
6
  fast = FastAgent("fast-agent example")
@@ -12,6 +12,7 @@
12
12
 
13
13
  default_model: haiku
14
14
  # mcp-ui support: disabled, enabled or auto. "auto" opens the web browser on the asset automatically
15
+ # mcp_ui_output_dir: ".fast-agent/ui" # Where to write MCP-UI HTML files (relative to CWD if not absolute)
15
16
  # mcp_ui_mode: enabled
16
17
 
17
18
  # Logging and Console Configuration:
@@ -40,5 +41,4 @@ mcp:
40
41
  command: "npx"
41
42
  args: ["-y", "@modelcontextprotocol/server-filesystem", "."]
42
43
  huggingface:
43
- transport: "http"
44
- url: "https://huggingface.co/mcp"
44
+ url: "https://huggingface.co/mcp?login"
@@ -1,6 +1,6 @@
1
1
  import asyncio
2
2
 
3
- from fast_agent.core.fastagent import FastAgent
3
+ from fast_agent import FastAgent
4
4
  from fast_agent.llm.request_params import RequestParams
5
5
 
6
6
  # Explicitly provide the path to the config file in the current directory
@@ -6,7 +6,7 @@ from typing import List, Union
6
6
 
7
7
  from mcp.types import ImageContent, TextContent
8
8
 
9
- from fast_agent.core.fastagent import FastAgent
9
+ from fast_agent import FastAgent
10
10
  from fast_agent.core.prompt import Prompt
11
11
  from fast_agent.llm.request_params import RequestParams
12
12
 
@@ -1,6 +1,6 @@
1
1
  import asyncio
2
2
 
3
- from fast_agent.core.fastagent import FastAgent
3
+ from fast_agent import FastAgent
4
4
 
5
5
  CONFIG_FILE = "fastagent.config.yaml"
6
6
  fast = FastAgent("fast-agent example", config_path=CONFIG_FILE, ignore_unknown_args=True)
@@ -1,6 +1,6 @@
1
1
  import asyncio
2
2
 
3
- from fast_agent.core.fastagent import FastAgent
3
+ from fast_agent import FastAgent
4
4
 
5
5
  # Create the application
6
6
  fast = FastAgent("Agent Chaining")
@@ -4,7 +4,7 @@ This demonstrates creating an optimizer and evaluator to iteratively improve con
4
4
 
5
5
  import asyncio
6
6
 
7
- from fast_agent.core.fastagent import FastAgent
7
+ from fast_agent import FastAgent
8
8
 
9
9
  # Create the application
10
10
  fast = FastAgent("Evaluator-Optimizer")
@@ -4,7 +4,7 @@ Agent which demonstrates Human Input tool
4
4
 
5
5
  import asyncio
6
6
 
7
- from fast_agent.core.fastagent import FastAgent
7
+ from fast_agent import FastAgent
8
8
 
9
9
  # Create the application
10
10
  fast = FastAgent("Human Input")
@@ -4,7 +4,7 @@ This demonstrates creating multiple agents and an orchestrator to coordinate the
4
4
 
5
5
  import asyncio
6
6
 
7
- from fast_agent.core.fastagent import FastAgent
7
+ from fast_agent import FastAgent
8
8
 
9
9
  # Create the application
10
10
  fast = FastAgent("Orchestrator-Workers")
@@ -5,7 +5,7 @@ Parallel Workflow showing Fan Out and Fan In agents, using different models
5
5
  import asyncio
6
6
  from pathlib import Path
7
7
 
8
- from fast_agent.core.fastagent import FastAgent
8
+ from fast_agent import FastAgent
9
9
  from fast_agent.core.prompt import Prompt
10
10
 
11
11
  # Create the application
@@ -9,7 +9,7 @@ import asyncio
9
9
 
10
10
  from rich.console import Console
11
11
 
12
- from fast_agent.core.fastagent import FastAgent
12
+ from fast_agent import FastAgent
13
13
 
14
14
  # Create the application
15
15
  fast = FastAgent(
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "fast-agent-mcp"
3
- version = "0.3.3"
3
+ version = "0.3.5"
4
4
  description = "Define, Prompt and Test MCP enabled Agents and Workflows"
5
5
  readme = "README.md"
6
6
  license = { file = "LICENSE" }
@@ -12,7 +12,7 @@ classifiers = [
12
12
  "License :: OSI Approved :: Apache Software License",
13
13
  "Operating System :: OS Independent"
14
14
  ]
15
- requires-python = ">=3.13.7"
15
+ requires-python = ">=3.13.5"
16
16
  dependencies = [
17
17
  "fastapi>=0.115.6",
18
18
  "mcp==1.14.0",
@@ -39,6 +39,7 @@ dependencies = [
39
39
  "a2a-sdk>=0.3.0",
40
40
  "email-validator>=2.2.0",
41
41
  "pyperclip>=1.9.0",
42
+ "keyring>=24.3.1",
42
43
  ]
43
44
 
44
45
  # For Azure OpenAI with DefaultAzureCredential support, install with: pip install fast-agent-mcp[azure]
@@ -1,5 +1,6 @@
1
1
  """fast-agent - An MCP native agent application framework"""
2
- from typing import TYPE_CHECKING as _TYPE_CHECKING
2
+
3
+ from typing import TYPE_CHECKING
3
4
 
4
5
  # Configuration and settings (safe - pure Pydantic models)
5
6
  from fast_agent.config import (
@@ -73,10 +74,12 @@ def __getattr__(name: str):
73
74
 
74
75
  return ToolAgent
75
76
  elif name == "McpAgent":
77
+ # Import directly from submodule to avoid package re-import cycles
76
78
  from fast_agent.agents.mcp_agent import McpAgent
77
79
 
78
80
  return McpAgent
79
81
  elif name == "FastAgent":
82
+ # Import from the canonical implementation to avoid recursive imports
80
83
  from fast_agent.core.fastagent import FastAgent
81
84
 
82
85
  return FastAgent
@@ -85,7 +88,8 @@ def __getattr__(name: str):
85
88
 
86
89
 
87
90
  # Help static analyzers/IDEs resolve symbols and signatures without importing at runtime.
88
- if _TYPE_CHECKING: # pragma: no cover - typing aid only
91
+ if TYPE_CHECKING: # pragma: no cover - typing aid only
92
+ # Provide a concrete import path for type checkers/IDEs
89
93
  from fast_agent.core.fastagent import FastAgent as FastAgent # noqa: F401
90
94
 
91
95
 
@@ -124,7 +128,6 @@ __all__ = [
124
128
  "LlmStopReason",
125
129
  "RequestParams",
126
130
  # Agents (lazy loaded)
127
- "ToolAgentSynchronous",
128
131
  "LlmAgent",
129
132
  "LlmDecorator",
130
133
  "ToolAgent",
@@ -0,0 +1,85 @@
1
+ """
2
+ Fast Agent - Agent implementations and workflow patterns.
3
+
4
+ This module re-exports agent classes with lazy imports to avoid circular
5
+ dependencies during package initialization while preserving a clean API:
6
+
7
+ from fast_agent.agents import McpAgent, ToolAgent, LlmAgent
8
+ """
9
+
10
+ from typing import TYPE_CHECKING
11
+
12
+ from fast_agent.agents.agent_types import AgentConfig
13
+
14
+
15
+ def __getattr__(name: str):
16
+ """Lazily resolve agent classes to avoid import cycles."""
17
+ if name == "LlmAgent":
18
+ from .llm_agent import LlmAgent
19
+
20
+ return LlmAgent
21
+ elif name == "LlmDecorator":
22
+ from .llm_decorator import LlmDecorator
23
+
24
+ return LlmDecorator
25
+ elif name == "ToolAgent":
26
+ from .tool_agent import ToolAgent
27
+
28
+ return ToolAgent
29
+ elif name == "McpAgent":
30
+ from .mcp_agent import McpAgent
31
+
32
+ return McpAgent
33
+ elif name == "ChainAgent":
34
+ from .workflow.chain_agent import ChainAgent
35
+
36
+ return ChainAgent
37
+ elif name == "EvaluatorOptimizerAgent":
38
+ from .workflow.evaluator_optimizer import EvaluatorOptimizerAgent
39
+
40
+ return EvaluatorOptimizerAgent
41
+ elif name == "IterativePlanner":
42
+ from .workflow.iterative_planner import IterativePlanner
43
+
44
+ return IterativePlanner
45
+ elif name == "ParallelAgent":
46
+ from .workflow.parallel_agent import ParallelAgent
47
+
48
+ return ParallelAgent
49
+ elif name == "RouterAgent":
50
+ from .workflow.router_agent import RouterAgent
51
+
52
+ return RouterAgent
53
+ else:
54
+ raise AttributeError(f"module '{__name__}' has no attribute '{name}'")
55
+
56
+
57
+ if TYPE_CHECKING: # pragma: no cover - type checking only
58
+ from .llm_agent import LlmAgent as LlmAgent # noqa: F401
59
+ from .llm_decorator import LlmDecorator as LlmDecorator # noqa: F401
60
+ from .mcp_agent import McpAgent as McpAgent # noqa: F401
61
+ from .tool_agent import ToolAgent as ToolAgent # noqa: F401
62
+ from .workflow.chain_agent import ChainAgent as ChainAgent # noqa: F401
63
+ from .workflow.evaluator_optimizer import (
64
+ EvaluatorOptimizerAgent as EvaluatorOptimizerAgent,
65
+ ) # noqa: F401
66
+ from .workflow.iterative_planner import IterativePlanner as IterativePlanner # noqa: F401
67
+ from .workflow.parallel_agent import ParallelAgent as ParallelAgent # noqa: F401
68
+ from .workflow.router_agent import RouterAgent as RouterAgent # noqa: F401
69
+
70
+
71
+ __all__ = [
72
+ # Core agents
73
+ "LlmAgent",
74
+ "LlmDecorator",
75
+ "ToolAgent",
76
+ "McpAgent",
77
+ # Workflow agents
78
+ "ChainAgent",
79
+ "EvaluatorOptimizerAgent",
80
+ "IterativePlanner",
81
+ "ParallelAgent",
82
+ "RouterAgent",
83
+ # Types
84
+ "AgentConfig",
85
+ ]
@@ -13,14 +13,17 @@ def main():
13
13
  # Check if first arg is not already a subcommand
14
14
  first_arg = sys.argv[1]
15
15
 
16
- if first_arg not in KNOWN_SUBCOMMANDS and any(
17
- arg in sys.argv or any(arg.startswith(opt + "=") for opt in GO_SPECIFIC_OPTIONS)
18
- for arg in sys.argv
19
- ):
16
+ # Only auto-route if any known go-specific options are present
17
+ has_go_options = any(
18
+ (arg in GO_SPECIFIC_OPTIONS) or any(arg.startswith(opt + "=") for opt in GO_SPECIFIC_OPTIONS)
19
+ for arg in sys.argv[1:]
20
+ )
21
+
22
+ if first_arg not in KNOWN_SUBCOMMANDS and has_go_options:
20
23
  # Find where to insert 'go' - before the first go-specific option
21
24
  insert_pos = 1
22
25
  for i, arg in enumerate(sys.argv[1:], 1):
23
- if arg in GO_SPECIFIC_OPTIONS or any(
26
+ if (arg in GO_SPECIFIC_OPTIONS) or any(
24
27
  arg.startswith(opt + "=") for opt in GO_SPECIFIC_OPTIONS
25
28
  ):
26
29
  insert_pos = i