fast-agent-mcp 0.3.16__tar.gz → 0.3.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.

Potentially problematic release.


This version of fast-agent-mcp might be problematic. Click here for more details.

Files changed (320) hide show
  1. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/PKG-INFO +9 -1
  2. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/README.md +8 -0
  3. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/new-api/textual_markdown_demo.py +4 -7
  4. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/pyproject.toml +1 -1
  5. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/agents/mcp_agent.py +1 -1
  6. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/cli/commands/go.py +78 -36
  7. fast_agent_mcp-0.3.18/src/fast_agent/cli/commands/serve.py +136 -0
  8. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/cli/constants.py +3 -0
  9. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/cli/main.py +5 -3
  10. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/core/fastagent.py +102 -16
  11. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/interfaces.py +4 -0
  12. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/llm/model_database.py +4 -1
  13. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/llm/model_factory.py +4 -2
  14. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/llm/model_info.py +19 -43
  15. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/llm/provider/google/llm_google_native.py +238 -7
  16. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/llm/provider/openai/llm_openai.py +229 -32
  17. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/mcp/server/agent_server.py +175 -41
  18. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/skills/registry.py +17 -9
  19. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/tools/shell_runtime.py +4 -4
  20. fast_agent_mcp-0.3.18/src/fast_agent/ui/console_display.py +1011 -0
  21. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/ui/enhanced_prompt.py +26 -12
  22. fast_agent_mcp-0.3.18/src/fast_agent/ui/markdown_helpers.py +104 -0
  23. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/ui/markdown_truncator.py +103 -45
  24. fast_agent_mcp-0.3.18/src/fast_agent/ui/message_primitives.py +50 -0
  25. fast_agent_mcp-0.3.18/src/fast_agent/ui/streaming.py +638 -0
  26. fast_agent_mcp-0.3.18/src/fast_agent/ui/tool_display.py +417 -0
  27. fast_agent_mcp-0.3.16/src/fast_agent/ui/console_display.py +0 -2227
  28. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/.gitignore +0 -0
  29. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/LICENSE +0 -0
  30. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/a2a/agent_executor.py +0 -0
  31. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/a2a/server.py +0 -0
  32. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/azure-openai/fastagent.config.yaml +0 -0
  33. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/bedrock/fast-agent.config.yaml +0 -0
  34. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/custom-agents/agent.py +0 -0
  35. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/custom-agents/fastagent.config.yaml +0 -0
  36. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/data-analysis/analysis-campaign.py +0 -0
  37. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/data-analysis/analysis.py +0 -0
  38. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/data-analysis/fastagent.config.yaml +0 -0
  39. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/data-analysis/mount-point/WA_Fn-UseC_-HR-Employee-Attrition.csv +0 -0
  40. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/fastapi/fastapi-advanced.py +0 -0
  41. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/fastapi/fastapi-simple.py +0 -0
  42. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/fastapi/pyproject.toml +0 -0
  43. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/fastapi/readme.md +0 -0
  44. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/mcp/elicitations/elicitation_account_server.py +0 -0
  45. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/mcp/elicitations/elicitation_forms_server.py +0 -0
  46. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/mcp/elicitations/elicitation_game_server.py +0 -0
  47. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/mcp/elicitations/fastagent.config.yaml +0 -0
  48. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/mcp/elicitations/fastagent.secrets.yaml.example +0 -0
  49. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/mcp/elicitations/forms_demo.py +0 -0
  50. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/mcp/elicitations/game_character.py +0 -0
  51. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/mcp/elicitations/game_character_handler.py +0 -0
  52. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/mcp/elicitations/tool_call.py +0 -0
  53. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/mcp/mcp-filtering/fastagent.config.yaml +0 -0
  54. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/mcp/mcp-filtering/fastagent.secrets.yaml.example +0 -0
  55. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/mcp/mcp-filtering/mcp_server.py +0 -0
  56. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/mcp/mcp-filtering/test_mcp_filtering.py +0 -0
  57. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/mcp/state-transfer/agent_one.py +0 -0
  58. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/mcp/state-transfer/agent_two.py +0 -0
  59. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/mcp/state-transfer/fastagent.config.yaml +0 -0
  60. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/mcp/state-transfer/fastagent.secrets.yaml.example +0 -0
  61. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/mcp/vision-examples/cat.png +0 -0
  62. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/mcp/vision-examples/example1.py +0 -0
  63. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/mcp/vision-examples/example2.py +0 -0
  64. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/mcp/vision-examples/example3.py +0 -0
  65. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/mcp/vision-examples/fastagent.config.yaml +0 -0
  66. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/new-api/display_check.py +0 -0
  67. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/new-api/fastagent.config.yaml +0 -0
  68. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/new-api/simple_llm.py +0 -0
  69. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/new-api/simple_llm_advanced.py +0 -0
  70. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/new-api/simple_mcp.py +0 -0
  71. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/openapi/agent.py +0 -0
  72. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/openapi/fastagent.config.yaml +0 -0
  73. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/openapi/openapi_mcp_server.py +0 -0
  74. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/openapi/petstore.yaml +0 -0
  75. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/openapi/pyproject.toml +0 -0
  76. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/openapi/run-as-server.sh +0 -0
  77. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/otel/agent.py +0 -0
  78. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/otel/agent2.py +0 -0
  79. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/otel/docker-compose.yaml +0 -0
  80. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/otel/fastagent.config.yaml +0 -0
  81. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/researcher/fastagent.config.yaml +0 -0
  82. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/researcher/researcher-eval.py +0 -0
  83. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/researcher/researcher-imp.py +0 -0
  84. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/researcher/researcher.py +0 -0
  85. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/setup/.gitignore +0 -0
  86. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/setup/agent.py +0 -0
  87. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/setup/fastagent.config.yaml +0 -0
  88. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/setup/fastagent.secrets.yaml.example +0 -0
  89. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/setup/pyproject.toml.tmpl +0 -0
  90. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/tensorzero/.env.sample +0 -0
  91. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/tensorzero/Makefile +0 -0
  92. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/tensorzero/README.md +0 -0
  93. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/tensorzero/agent.py +0 -0
  94. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/tensorzero/demo_images/clam.jpg +0 -0
  95. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/tensorzero/demo_images/crab.png +0 -0
  96. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/tensorzero/demo_images/shrimp.png +0 -0
  97. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/tensorzero/docker-compose.yml +0 -0
  98. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/tensorzero/fastagent.config.yaml +0 -0
  99. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/tensorzero/image_demo.py +0 -0
  100. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/tensorzero/mcp_server/Dockerfile +0 -0
  101. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/tensorzero/mcp_server/entrypoint.sh +0 -0
  102. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/tensorzero/mcp_server/mcp_server.py +0 -0
  103. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/tensorzero/mcp_server/pyproject.toml +0 -0
  104. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/tensorzero/simple_agent.py +0 -0
  105. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/tensorzero/tensorzero_config/system_schema.json +0 -0
  106. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/tensorzero/tensorzero_config/system_template.minijinja +0 -0
  107. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/tensorzero/tensorzero_config/tensorzero.toml +0 -0
  108. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/tool-use-agent/agent.py +0 -0
  109. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/tool-use-agent/fastagent.config.yaml +0 -0
  110. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/workflows/chaining.py +0 -0
  111. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/workflows/evaluator.py +0 -0
  112. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/workflows/fastagent.config.yaml +0 -0
  113. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/workflows/graded_report.md +0 -0
  114. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/workflows/human_input.py +0 -0
  115. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/workflows/orchestrator.py +0 -0
  116. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/workflows/parallel.py +0 -0
  117. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/workflows/router.py +0 -0
  118. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/workflows/short_story.md +0 -0
  119. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/examples/workflows/short_story.txt +0 -0
  120. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/hatch_build.py +0 -0
  121. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/__init__.py +0 -0
  122. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/agents/__init__.py +0 -0
  123. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/agents/agent_types.py +0 -0
  124. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/agents/llm_agent.py +0 -0
  125. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/agents/llm_decorator.py +0 -0
  126. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/agents/tool_agent.py +0 -0
  127. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/agents/workflow/chain_agent.py +0 -0
  128. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/agents/workflow/evaluator_optimizer.py +0 -0
  129. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/agents/workflow/iterative_planner.py +0 -0
  130. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/agents/workflow/orchestrator_models.py +0 -0
  131. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/agents/workflow/orchestrator_prompts.py +0 -0
  132. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/agents/workflow/parallel_agent.py +0 -0
  133. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/agents/workflow/router_agent.py +0 -0
  134. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/cli/__init__.py +0 -0
  135. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/cli/__main__.py +0 -0
  136. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/cli/commands/auth.py +0 -0
  137. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/cli/commands/check_config.py +0 -0
  138. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/cli/commands/quickstart.py +0 -0
  139. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/cli/commands/server_helpers.py +0 -0
  140. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/cli/commands/setup.py +0 -0
  141. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/cli/commands/url_parser.py +0 -0
  142. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/cli/terminal.py +0 -0
  143. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/config.py +0 -0
  144. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/constants.py +0 -0
  145. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/context.py +0 -0
  146. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/context_dependent.py +0 -0
  147. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/core/__init__.py +0 -0
  148. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/core/agent_app.py +0 -0
  149. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/core/core_app.py +0 -0
  150. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/core/direct_decorators.py +0 -0
  151. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/core/direct_factory.py +0 -0
  152. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/core/error_handling.py +0 -0
  153. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/core/exceptions.py +0 -0
  154. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/core/executor/__init__.py +0 -0
  155. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/core/executor/executor.py +0 -0
  156. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/core/executor/task_registry.py +0 -0
  157. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/core/executor/workflow_signal.py +0 -0
  158. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/core/logging/__init__.py +0 -0
  159. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/core/logging/events.py +0 -0
  160. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/core/logging/json_serializer.py +0 -0
  161. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/core/logging/listeners.py +0 -0
  162. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/core/logging/logger.py +0 -0
  163. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/core/logging/transport.py +0 -0
  164. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/core/prompt.py +0 -0
  165. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/core/validation.py +0 -0
  166. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/event_progress.py +0 -0
  167. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/history/history_exporter.py +0 -0
  168. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/human_input/__init__.py +0 -0
  169. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/human_input/elicitation_handler.py +0 -0
  170. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/human_input/elicitation_state.py +0 -0
  171. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/human_input/form_fields.py +0 -0
  172. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/human_input/simple_form.py +0 -0
  173. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/human_input/types.py +0 -0
  174. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/llm/__init__.py +0 -0
  175. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/llm/fastagent_llm.py +0 -0
  176. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/llm/internal/passthrough.py +0 -0
  177. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/llm/internal/playback.py +0 -0
  178. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/llm/internal/silent.py +0 -0
  179. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/llm/internal/slow.py +0 -0
  180. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/llm/memory.py +0 -0
  181. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/llm/prompt_utils.py +0 -0
  182. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/llm/provider/anthropic/anthropic_utils.py +0 -0
  183. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/llm/provider/anthropic/llm_anthropic.py +0 -0
  184. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/llm/provider/anthropic/multipart_converter_anthropic.py +0 -0
  185. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/llm/provider/bedrock/bedrock_utils.py +0 -0
  186. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/llm/provider/bedrock/llm_bedrock.py +0 -0
  187. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/llm/provider/google/google_converter.py +0 -0
  188. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/llm/provider/openai/llm_aliyun.py +0 -0
  189. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/llm/provider/openai/llm_azure.py +0 -0
  190. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/llm/provider/openai/llm_deepseek.py +0 -0
  191. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/llm/provider/openai/llm_generic.py +0 -0
  192. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/llm/provider/openai/llm_google_oai.py +0 -0
  193. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/llm/provider/openai/llm_groq.py +0 -0
  194. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/llm/provider/openai/llm_openrouter.py +0 -0
  195. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/llm/provider/openai/llm_tensorzero_openai.py +0 -0
  196. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/llm/provider/openai/llm_xai.py +0 -0
  197. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/llm/provider/openai/multipart_converter_openai.py +0 -0
  198. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/llm/provider/openai/openai_multipart.py +0 -0
  199. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/llm/provider/openai/openai_utils.py +0 -0
  200. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/llm/provider/openai/responses.py +0 -0
  201. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/llm/provider_key_manager.py +0 -0
  202. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/llm/provider_types.py +0 -0
  203. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/llm/request_params.py +0 -0
  204. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/llm/sampling_converter.py +0 -0
  205. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/llm/usage_tracking.py +0 -0
  206. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/mcp/__init__.py +0 -0
  207. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/mcp/common.py +0 -0
  208. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/mcp/elicitation_factory.py +0 -0
  209. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/mcp/elicitation_handlers.py +0 -0
  210. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/mcp/gen_client.py +0 -0
  211. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/mcp/helpers/__init__.py +0 -0
  212. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/mcp/helpers/content_helpers.py +0 -0
  213. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/mcp/helpers/server_config_helpers.py +0 -0
  214. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/mcp/hf_auth.py +0 -0
  215. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/mcp/interfaces.py +0 -0
  216. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/mcp/logger_textio.py +0 -0
  217. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/mcp/mcp_agent_client_session.py +0 -0
  218. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/mcp/mcp_aggregator.py +0 -0
  219. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/mcp/mcp_connection_manager.py +0 -0
  220. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/mcp/mcp_content.py +0 -0
  221. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/mcp/mime_utils.py +0 -0
  222. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/mcp/oauth_client.py +0 -0
  223. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/mcp/prompt.py +0 -0
  224. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/mcp/prompt_message_extended.py +0 -0
  225. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/mcp/prompt_render.py +0 -0
  226. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/mcp/prompt_serialization.py +0 -0
  227. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/mcp/prompts/__init__.py +0 -0
  228. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/mcp/prompts/__main__.py +0 -0
  229. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/mcp/prompts/prompt_constants.py +0 -0
  230. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/mcp/prompts/prompt_helpers.py +0 -0
  231. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/mcp/prompts/prompt_load.py +0 -0
  232. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/mcp/prompts/prompt_server.py +0 -0
  233. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/mcp/prompts/prompt_template.py +0 -0
  234. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/mcp/resource_utils.py +0 -0
  235. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/mcp/sampling.py +0 -0
  236. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/mcp/server/__init__.py +0 -0
  237. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/mcp/skybridge.py +0 -0
  238. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/mcp/sse_tracking.py +0 -0
  239. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/mcp/stdio_tracking_simple.py +0 -0
  240. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/mcp/streamable_http_tracking.py +0 -0
  241. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/mcp/transport_tracking.py +0 -0
  242. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/mcp/types.py +0 -0
  243. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/mcp/ui_agent.py +0 -0
  244. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/mcp/ui_mixin.py +0 -0
  245. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/mcp_server_registry.py +0 -0
  246. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/py.typed +0 -0
  247. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/examples/data-analysis/analysis-campaign.py +0 -0
  248. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/examples/data-analysis/analysis.py +0 -0
  249. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/examples/data-analysis/fastagent.config.yaml +0 -0
  250. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/examples/data-analysis/mount-point/WA_Fn-UseC_-HR-Employee-Attrition.csv +0 -0
  251. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/examples/mcp/elicitations/elicitation_account_server.py +0 -0
  252. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/examples/mcp/elicitations/elicitation_forms_server.py +0 -0
  253. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/examples/mcp/elicitations/elicitation_game_server.py +0 -0
  254. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/examples/mcp/elicitations/fastagent.config.yaml +0 -0
  255. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/examples/mcp/elicitations/fastagent.secrets.yaml.example +0 -0
  256. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/examples/mcp/elicitations/forms_demo.py +0 -0
  257. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/examples/mcp/elicitations/game_character.py +0 -0
  258. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/examples/mcp/elicitations/game_character_handler.py +0 -0
  259. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/examples/mcp/elicitations/tool_call.py +0 -0
  260. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/examples/mcp/state-transfer/agent_one.py +0 -0
  261. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/examples/mcp/state-transfer/agent_two.py +0 -0
  262. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/examples/mcp/state-transfer/fastagent.config.yaml +0 -0
  263. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/examples/mcp/state-transfer/fastagent.secrets.yaml.example +0 -0
  264. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/examples/researcher/fastagent.config.yaml +0 -0
  265. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/examples/researcher/researcher-eval.py +0 -0
  266. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/examples/researcher/researcher-imp.py +0 -0
  267. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/examples/researcher/researcher.py +0 -0
  268. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/examples/tensorzero/.env.sample +0 -0
  269. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/examples/tensorzero/Makefile +0 -0
  270. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/examples/tensorzero/README.md +0 -0
  271. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/examples/tensorzero/agent.py +0 -0
  272. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/examples/tensorzero/demo_images/clam.jpg +0 -0
  273. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/examples/tensorzero/demo_images/crab.png +0 -0
  274. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/examples/tensorzero/demo_images/shrimp.png +0 -0
  275. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/examples/tensorzero/docker-compose.yml +0 -0
  276. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/examples/tensorzero/fastagent.config.yaml +0 -0
  277. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/examples/tensorzero/image_demo.py +0 -0
  278. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/examples/tensorzero/mcp_server/.python-version +0 -0
  279. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/examples/tensorzero/mcp_server/Dockerfile +0 -0
  280. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/examples/tensorzero/mcp_server/entrypoint.sh +0 -0
  281. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/examples/tensorzero/mcp_server/mcp_server.py +0 -0
  282. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/examples/tensorzero/mcp_server/pyproject.toml +0 -0
  283. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/examples/tensorzero/simple_agent.py +0 -0
  284. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/examples/tensorzero/tensorzero_config/system_schema.json +0 -0
  285. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/examples/tensorzero/tensorzero_config/system_template.minijinja +0 -0
  286. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/examples/tensorzero/tensorzero_config/tensorzero.toml +0 -0
  287. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/examples/workflows/chaining.py +0 -0
  288. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/examples/workflows/evaluator.py +0 -0
  289. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/examples/workflows/fastagent.config.yaml +0 -0
  290. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/examples/workflows/graded_report.md +0 -0
  291. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/examples/workflows/human_input.py +0 -0
  292. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/examples/workflows/orchestrator.py +0 -0
  293. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/examples/workflows/parallel.py +0 -0
  294. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/examples/workflows/router.py +0 -0
  295. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/examples/workflows/short_story.md +0 -0
  296. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/examples/workflows/short_story.txt +0 -0
  297. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/setup/.gitignore +0 -0
  298. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/setup/agent.py +0 -0
  299. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/setup/fastagent.config.yaml +0 -0
  300. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/setup/fastagent.secrets.yaml.example +0 -0
  301. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/resources/setup/pyproject.toml.tmpl +0 -0
  302. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/skills/__init__.py +0 -0
  303. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/tools/elicitation.py +0 -0
  304. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/types/__init__.py +0 -0
  305. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/types/llm_stop_reason.py +0 -0
  306. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/ui/__init__.py +0 -0
  307. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/ui/console.py +0 -0
  308. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/ui/elicitation_form.py +0 -0
  309. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/ui/elicitation_style.py +0 -0
  310. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/ui/history_display.py +0 -0
  311. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/ui/interactive_prompt.py +0 -0
  312. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/ui/mcp_display.py +0 -0
  313. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/ui/mcp_ui_utils.py +0 -0
  314. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/ui/mermaid_utils.py +0 -0
  315. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/ui/notification_tracker.py +0 -0
  316. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/ui/plain_text_truncator.py +0 -0
  317. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/ui/progress_display.py +0 -0
  318. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/ui/rich_progress.py +0 -0
  319. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/ui/streaming_buffer.py +0 -0
  320. {fast_agent_mcp-0.3.16 → fast_agent_mcp-0.3.18}/src/fast_agent/ui/usage_display.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fast-agent-mcp
3
- Version: 0.3.16
3
+ Version: 0.3.18
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
@@ -261,6 +261,14 @@ The simple declarative syntax lets you concentrate on composing your Prompts and
261
261
 
262
262
  Model support is comprehensive with native support for Anthropic, OpenAI and Google providers as well as Azure, Ollama, Deepseek and dozens of others via TensorZero. Structured Outputs, PDF and Vision support is simple to use and well tested. Passthrough and Playback LLMs enable rapid development and test of Python glue-code for your applications.
263
263
 
264
+ Recent features include:
265
+ - Agent Skills (SKILL.md)
266
+ - MCP-UI Support |
267
+ - OpenAI Apps SDK (Skybridge)
268
+ - Shell Mode
269
+ - Advanced MCP Transport Diagnsotics
270
+ - MCP Elicitations
271
+
264
272
  <img width="800" alt="MCP Transport Diagnostics" src="https://github.com/user-attachments/assets/e26472de-58d9-4726-8bdd-01eb407414cf" />
265
273
 
266
274
 
@@ -20,6 +20,14 @@ The simple declarative syntax lets you concentrate on composing your Prompts and
20
20
 
21
21
  Model support is comprehensive with native support for Anthropic, OpenAI and Google providers as well as Azure, Ollama, Deepseek and dozens of others via TensorZero. Structured Outputs, PDF and Vision support is simple to use and well tested. Passthrough and Playback LLMs enable rapid development and test of Python glue-code for your applications.
22
22
 
23
+ Recent features include:
24
+ - Agent Skills (SKILL.md)
25
+ - MCP-UI Support |
26
+ - OpenAI Apps SDK (Skybridge)
27
+ - Shell Mode
28
+ - Advanced MCP Transport Diagnsotics
29
+ - MCP Elicitations
30
+
23
31
  <img width="800" alt="MCP Transport Diagnostics" src="https://github.com/user-attachments/assets/e26472de-58d9-4726-8bdd-01eb407414cf" />
24
32
 
25
33
 
@@ -20,12 +20,9 @@ from fast_agent import FastAgent
20
20
  from fast_agent.constants import REASONING
21
21
  from fast_agent.mcp.helpers.content_helpers import get_text
22
22
  from fast_agent.types import PromptMessageExtended
23
- from fast_agent.ui.console_display import (
24
- MESSAGE_CONFIGS,
25
- ConsoleDisplay,
26
- MessageType,
27
- _prepare_markdown_content,
28
- )
23
+ from fast_agent.ui.console_display import ConsoleDisplay
24
+ from fast_agent.ui.markdown_helpers import prepare_markdown_content
25
+ from fast_agent.ui.message_primitives import MESSAGE_CONFIGS, MessageType
29
26
 
30
27
  if TYPE_CHECKING:
31
28
  from mcp.types import CallToolResult
@@ -208,7 +205,7 @@ class ChatDisplay(RichLog):
208
205
  if formatted:
209
206
  segments.append(Markdown(formatted))
210
207
  else:
211
- prepared = _prepare_markdown_content(content, True) if content else ""
208
+ prepared = prepare_markdown_content(content, True) if content else ""
212
209
  if prepared:
213
210
  segments.append(Markdown(prepared))
214
211
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "fast-agent-mcp"
3
- version = "0.3.16"
3
+ version = "0.3.18"
4
4
  description = "Define, Prompt and Test MCP enabled Agents and Workflows"
5
5
  readme = "README.md"
6
6
  license = { file = "LICENSE" }
@@ -157,7 +157,7 @@ class McpAgent(ABC, ToolAgent):
157
157
  if skills_configured:
158
158
  modes.append("skills")
159
159
  if shell_flag_requested:
160
- modes.append("command switch")
160
+ modes.append("switch")
161
161
  self._shell_access_modes = tuple(modes)
162
162
  self._bash_tool = self._shell_runtime.tool
163
163
  if self._shell_runtime_enabled:
@@ -5,6 +5,7 @@ import logging
5
5
  import shlex
6
6
  import sys
7
7
  from pathlib import Path
8
+ from typing import Literal
8
9
 
9
10
  import typer
10
11
 
@@ -23,6 +24,50 @@ app = typer.Typer(
23
24
  default_instruction = DEFAULT_AGENT_INSTRUCTION
24
25
 
25
26
 
27
+ def resolve_instruction_option(instruction: str | None) -> tuple[str, str]:
28
+ """
29
+ Resolve the instruction option (file or URL) to the instruction string and agent name.
30
+ Returns (resolved_instruction, agent_name).
31
+ """
32
+ resolved_instruction = default_instruction
33
+ agent_name = "agent"
34
+
35
+ if instruction:
36
+ try:
37
+ from pathlib import Path
38
+
39
+ from pydantic import AnyUrl
40
+
41
+ from fast_agent.core.direct_decorators import _resolve_instruction
42
+
43
+ if instruction.startswith(("http://", "https://")):
44
+ resolved_instruction = _resolve_instruction(AnyUrl(instruction))
45
+ else:
46
+ resolved_instruction = _resolve_instruction(Path(instruction))
47
+ instruction_path = Path(instruction)
48
+ if instruction_path.exists() and instruction_path.is_file():
49
+ agent_name = instruction_path.stem
50
+ except Exception as e:
51
+ typer.echo(f"Error loading instruction from {instruction}: {e}", err=True)
52
+ raise typer.Exit(1)
53
+
54
+ return resolved_instruction, agent_name
55
+
56
+
57
+ def collect_stdio_commands(npx: str | None, uvx: str | None, stdio: str | None) -> list[str]:
58
+ """Collect STDIO command definitions from convenience options."""
59
+ stdio_commands: list[str] = []
60
+
61
+ if npx:
62
+ stdio_commands.append(f"npx {npx}")
63
+ if uvx:
64
+ stdio_commands.append(f"uvx {uvx}")
65
+ if stdio:
66
+ stdio_commands.append(stdio)
67
+
68
+ return stdio_commands
69
+
70
+
26
71
  def _set_asyncio_exception_handler(loop: asyncio.AbstractEventLoop) -> None:
27
72
  """Attach a detailed exception handler to the provided event loop."""
28
73
 
@@ -72,6 +117,12 @@ async def _run_agent(
72
117
  agent_name: str | None = "agent",
73
118
  skills_directory: Path | None = None,
74
119
  shell_runtime: bool = False,
120
+ mode: Literal["interactive", "serve"] = "interactive",
121
+ transport: str = "http",
122
+ host: str = "0.0.0.0",
123
+ port: int = 8000,
124
+ tool_description: str | None = None,
125
+ instance_scope: str = "shared",
75
126
  ) -> None:
76
127
  """Async implementation to run an interactive agent."""
77
128
  from fast_agent.mcp.prompts.prompt_load import load_prompt
@@ -84,6 +135,8 @@ async def _run_agent(
84
135
  "ignore_unknown_args": True,
85
136
  "parse_cli_args": False, # Don't parse CLI args, we're handling it ourselves
86
137
  }
138
+ if mode == "serve":
139
+ fast_kwargs["quiet"] = True
87
140
  if skills_directory is not None:
88
141
  fast_kwargs["skills_directory"] = skills_directory
89
142
 
@@ -183,7 +236,16 @@ async def _run_agent(
183
236
  await agent.interactive()
184
237
 
185
238
  # Run the agent
186
- await cli_agent()
239
+ if mode == "serve":
240
+ await fast.start_server(
241
+ transport=transport,
242
+ host=host,
243
+ port=port,
244
+ tool_description=tool_description,
245
+ instance_scope=instance_scope,
246
+ )
247
+ else:
248
+ await cli_agent()
187
249
 
188
250
 
189
251
  def run_async_agent(
@@ -200,6 +262,12 @@ def run_async_agent(
200
262
  agent_name: str | None = None,
201
263
  skills_directory: Path | None = None,
202
264
  shell_enabled: bool = False,
265
+ mode: Literal["interactive", "serve"] = "interactive",
266
+ transport: str = "http",
267
+ host: str = "0.0.0.0",
268
+ port: int = 8000,
269
+ tool_description: str | None = None,
270
+ instance_scope: str = "shared",
203
271
  ):
204
272
  """Run the async agent function with proper loop handling."""
205
273
  server_list = servers.split(",") if servers else None
@@ -304,6 +372,12 @@ def run_async_agent(
304
372
  agent_name=agent_name,
305
373
  skills_directory=skills_directory,
306
374
  shell_runtime=shell_enabled,
375
+ mode=mode,
376
+ transport=transport,
377
+ host=host,
378
+ port=port,
379
+ tool_description=tool_description,
380
+ instance_scope=instance_scope,
307
381
  )
308
382
  )
309
383
  finally:
@@ -405,46 +479,13 @@ def go(
405
479
  --stdio Command to run as STDIO MCP server (quoted)
406
480
  """
407
481
  # Collect all stdio commands from convenience options
408
- stdio_commands = []
482
+ stdio_commands = collect_stdio_commands(npx, uvx, stdio)
409
483
  shell_enabled = shell
410
484
 
411
- if npx:
412
- stdio_commands.append(f"npx {npx}")
413
-
414
- if uvx:
415
- stdio_commands.append(f"uvx {uvx}")
416
-
417
- if stdio:
418
- stdio_commands.append(stdio)
419
-
420
485
  # When shell is enabled we don't add an MCP stdio server; handled inside the agent
421
486
 
422
487
  # Resolve instruction from file/URL or use default
423
- resolved_instruction = default_instruction # Default
424
- agent_name = "agent"
425
-
426
- if instruction:
427
- try:
428
- from pathlib import Path
429
-
430
- from pydantic import AnyUrl
431
-
432
- from fast_agent.core.direct_decorators import _resolve_instruction
433
-
434
- # Check if it's a URL
435
- if instruction.startswith(("http://", "https://")):
436
- resolved_instruction = _resolve_instruction(AnyUrl(instruction))
437
- else:
438
- # Treat as file path
439
- resolved_instruction = _resolve_instruction(Path(instruction))
440
- # Extract filename without extension to use as agent name
441
- instruction_path = Path(instruction)
442
- if instruction_path.exists() and instruction_path.is_file():
443
- # Get filename without extension
444
- agent_name = instruction_path.stem
445
- except Exception as e:
446
- typer.echo(f"Error loading instruction from {instruction}: {e}", err=True)
447
- raise typer.Exit(1)
488
+ resolved_instruction, agent_name = resolve_instruction_option(instruction)
448
489
 
449
490
  run_async_agent(
450
491
  name=name,
@@ -460,4 +501,5 @@ def go(
460
501
  agent_name=agent_name,
461
502
  skills_directory=skills_dir,
462
503
  shell_enabled=shell_enabled,
504
+ instance_scope="shared",
463
505
  )
@@ -0,0 +1,136 @@
1
+ """Run FastAgent as an MCP server from the command line."""
2
+
3
+ from enum import Enum
4
+ from pathlib import Path
5
+
6
+ import typer
7
+
8
+ from fast_agent.cli.commands.go import (
9
+ collect_stdio_commands,
10
+ resolve_instruction_option,
11
+ run_async_agent,
12
+ )
13
+
14
+
15
+ class ServeTransport(str, Enum):
16
+ HTTP = "http"
17
+ SSE = "sse"
18
+ STDIO = "stdio"
19
+
20
+
21
+ class InstanceScope(str, Enum):
22
+ SHARED = "shared"
23
+ CONNECTION = "connection"
24
+ REQUEST = "request"
25
+
26
+
27
+ app = typer.Typer(
28
+ help="Run FastAgent as an MCP server without writing an agent.py file",
29
+ context_settings={"allow_extra_args": True, "ignore_unknown_options": True},
30
+ )
31
+
32
+
33
+ @app.callback(invoke_without_command=True, no_args_is_help=False)
34
+ def serve(
35
+ ctx: typer.Context,
36
+ name: str = typer.Option("fast-agent", "--name", help="Name for the MCP server"),
37
+ instruction: str | None = typer.Option(
38
+ None, "--instruction", "-i", help="Path to file or URL containing instruction for the agent"
39
+ ),
40
+ config_path: str | None = typer.Option(None, "--config-path", "-c", help="Path to config file"),
41
+ servers: str | None = typer.Option(
42
+ None, "--servers", help="Comma-separated list of server names to enable from config"
43
+ ),
44
+ urls: str | None = typer.Option(
45
+ None, "--url", help="Comma-separated list of HTTP/SSE URLs to connect to"
46
+ ),
47
+ auth: str | None = typer.Option(
48
+ None, "--auth", help="Bearer token for authorization with URL-based servers"
49
+ ),
50
+ model: str | None = typer.Option(
51
+ None, "--model", "--models", help="Override the default model (e.g., haiku, sonnet, gpt-4)"
52
+ ),
53
+ skills_dir: Path | None = typer.Option(
54
+ None,
55
+ "--skills-dir",
56
+ "--skills",
57
+ help="Override the default skills directory",
58
+ ),
59
+ npx: str | None = typer.Option(
60
+ None, "--npx", help="NPX package and args to run as MCP server (quoted)"
61
+ ),
62
+ uvx: str | None = typer.Option(
63
+ None, "--uvx", help="UVX package and args to run as MCP server (quoted)"
64
+ ),
65
+ stdio: str | None = typer.Option(
66
+ None, "--stdio", help="Command to run as STDIO MCP server (quoted)"
67
+ ),
68
+ description: str | None = typer.Option(
69
+ None,
70
+ "--description",
71
+ "-d",
72
+ help="Description used for the exposed send tool (use {agent} to reference the agent name)",
73
+ ),
74
+ transport: ServeTransport = typer.Option(
75
+ ServeTransport.HTTP,
76
+ "--transport",
77
+ help="Transport protocol to expose (http, sse, stdio)",
78
+ ),
79
+ host: str = typer.Option(
80
+ "0.0.0.0",
81
+ "--host",
82
+ help="Host address to bind when using HTTP or SSE transport",
83
+ ),
84
+ port: int = typer.Option(
85
+ 8000,
86
+ "--port",
87
+ help="Port to use when running as a server with HTTP or SSE transport",
88
+ ),
89
+ shell: bool = typer.Option(
90
+ False,
91
+ "--shell",
92
+ "-x",
93
+ help="Enable a local shell runtime and expose the execute tool (bash or pwsh).",
94
+ ),
95
+ instance_scope: InstanceScope = typer.Option(
96
+ InstanceScope.SHARED,
97
+ "--instance-scope",
98
+ help="Control how MCP clients receive isolated agent instances (shared, connection, request)",
99
+ ),
100
+ ) -> None:
101
+ """
102
+ Run FastAgent as an MCP server.
103
+
104
+ Examples:
105
+ fast-agent serve --model=haiku --instruction=./instruction.md --transport=http --port=8000
106
+ fast-agent serve --url=http://localhost:8001/mcp --auth=YOUR_API_TOKEN
107
+ fast-agent serve --stdio "python my_server.py --debug"
108
+ fast-agent serve --npx "@modelcontextprotocol/server-filesystem /path/to/data"
109
+ fast-agent serve --description "Interact with the {agent} assistant"
110
+ """
111
+ stdio_commands = collect_stdio_commands(npx, uvx, stdio)
112
+ shell_enabled = shell
113
+
114
+ resolved_instruction, agent_name = resolve_instruction_option(instruction)
115
+
116
+ run_async_agent(
117
+ name=name,
118
+ instruction=resolved_instruction,
119
+ config_path=config_path,
120
+ servers=servers,
121
+ urls=urls,
122
+ auth=auth,
123
+ model=model,
124
+ message=None,
125
+ prompt_file=None,
126
+ stdio_commands=stdio_commands,
127
+ agent_name=agent_name,
128
+ skills_directory=skills_dir,
129
+ shell_enabled=shell_enabled,
130
+ mode="serve",
131
+ transport=transport.value,
132
+ host=host,
133
+ port=port,
134
+ tool_description=description,
135
+ instance_scope=instance_scope.value,
136
+ )
@@ -21,11 +21,14 @@ GO_SPECIFIC_OPTIONS = {
21
21
  "-c",
22
22
  "--shell",
23
23
  "-x",
24
+ "--skills",
25
+ "--skills-dir",
24
26
  }
25
27
 
26
28
  # Known subcommands that should not trigger auto-routing
27
29
  KNOWN_SUBCOMMANDS = {
28
30
  "go",
31
+ "serve",
29
32
  "setup",
30
33
  "check",
31
34
  "auth",
@@ -3,17 +3,18 @@
3
3
  import typer
4
4
  from rich.table import Table
5
5
 
6
- from fast_agent.cli.commands import auth, check_config, go, quickstart, setup
6
+ from fast_agent.cli.commands import auth, check_config, go, quickstart, serve, setup
7
7
  from fast_agent.cli.terminal import Application
8
8
  from fast_agent.ui.console import console as shared_console
9
9
 
10
10
  app = typer.Typer(
11
- help="fast-agent - Build effective agents using Model Context Protocol",
11
+ help="Use `fast-agent go --help` for interactive shell arguments and options.",
12
12
  add_completion=False, # We'll add this later when we have more commands
13
13
  )
14
14
 
15
15
  # Subcommands
16
16
  app.add_typer(go.app, name="go", help="Run an interactive agent directly from the command line")
17
+ app.add_typer(serve.app, name="serve", help="Run FastAgent as an MCP server")
17
18
  app.add_typer(setup.app, name="setup", help="Set up a new agent project")
18
19
  app.add_typer(check_config.app, name="check", help="Show or diagnose fast-agent configuration")
19
20
  app.add_typer(auth.app, name="auth", help="Manage OAuth authentication for MCP servers")
@@ -62,7 +63,8 @@ def show_welcome() -> None:
62
63
  table.add_column("Description", header_style="bold bright_white")
63
64
 
64
65
  table.add_row("[bold]go[/bold]", "Start an interactive session")
65
- table.add_row("go --shell", "Start an interactive session with a local shell tool")
66
+ table.add_row("go -x", "Start an interactive session with a local shell tool")
67
+ table.add_row("[bold]serve[/bold]", "Start fast-agent as an MCP server")
66
68
  table.add_row("check", "Show current configuration")
67
69
  table.add_row("auth", "Manage OAuth tokens and keyring")
68
70
  table.add_row("setup", "Create agent template and configuration")
@@ -6,9 +6,11 @@ directly creates Agent instances without proxies.
6
6
 
7
7
  import argparse
8
8
  import asyncio
9
+ import inspect
9
10
  import pathlib
10
11
  import sys
11
12
  from contextlib import asynccontextmanager
13
+ from dataclasses import dataclass
12
14
  from importlib.metadata import version as get_version
13
15
  from pathlib import Path
14
16
  from typing import (
@@ -127,6 +129,9 @@ class FastAgent:
127
129
  Path(skills_directory).expanduser() if skills_directory else None
128
130
  )
129
131
  self._default_skill_manifests: List[SkillManifest] = []
132
+ self._server_instance_factory = None
133
+ self._server_instance_dispose = None
134
+ self._server_managed_instances: List[AgentInstance] = []
130
135
 
131
136
  # --- Wrap argument parsing logic ---
132
137
  if parse_cli_args:
@@ -181,6 +186,12 @@ class FastAgent:
181
186
  default="0.0.0.0",
182
187
  help="Host address to bind to when running as a server with SSE transport",
183
188
  )
189
+ parser.add_argument(
190
+ "--instance-scope",
191
+ choices=["shared", "connection", "request"],
192
+ default="shared",
193
+ help="Control MCP agent instancing behaviour (shared, connection, request)",
194
+ )
184
195
  parser.add_argument(
185
196
  "--skills",
186
197
  help="Path to skills directory to use instead of default .claude/skills",
@@ -500,18 +511,34 @@ class FastAgent:
500
511
  cli_model=cli_model_override, # Use the variable defined above
501
512
  )
502
513
 
503
- # Create all agents in dependency order
504
- active_agents = await create_agents_in_dependency_order(
505
- self.app,
506
- self.agents,
507
- model_factory_func,
508
- )
514
+ managed_instances: list[AgentInstance] = []
515
+ instance_lock = asyncio.Lock()
516
+
517
+ async def instantiate_agent_instance() -> AgentInstance:
518
+ async with instance_lock:
519
+ agents_map = await create_agents_in_dependency_order(
520
+ self.app,
521
+ self.agents,
522
+ model_factory_func,
523
+ )
524
+ validate_provider_keys_post_creation(agents_map)
525
+ instance = AgentInstance(AgentApp(agents_map), agents_map)
526
+ managed_instances.append(instance)
527
+ return instance
528
+
529
+ async def dispose_agent_instance(instance: AgentInstance) -> None:
530
+ async with instance_lock:
531
+ if instance in managed_instances:
532
+ managed_instances.remove(instance)
533
+ await instance.shutdown()
509
534
 
510
- # Validate API keys after agent creation
511
- validate_provider_keys_post_creation(active_agents)
535
+ primary_instance = await instantiate_agent_instance()
536
+ wrapper = primary_instance.app
537
+ active_agents = primary_instance.agents
512
538
 
513
- # Create a wrapper with all agents for simplified access
514
- wrapper = AgentApp(active_agents)
539
+ self._server_instance_factory = instantiate_agent_instance
540
+ self._server_instance_dispose = dispose_agent_instance
541
+ self._server_managed_instances = managed_instances
515
542
 
516
543
  # Disable streaming if parallel agents are present
517
544
  from fast_agent.agents.agent_types import AgentType
@@ -541,9 +568,18 @@ class FastAgent:
541
568
  # Create the MCP server
542
569
  from fast_agent.mcp.server import AgentMCPServer
543
570
 
571
+ tool_description = getattr(self.args, "tool_description", None)
572
+ server_description = getattr(self.args, "server_description", None)
573
+ server_name = getattr(self.args, "server_name", None)
574
+ instance_scope = getattr(self.args, "instance_scope", "shared")
544
575
  mcp_server = AgentMCPServer(
545
- agent_app=wrapper,
546
- server_name=f"{self.name}-MCP-Server",
576
+ primary_instance=primary_instance,
577
+ create_instance=self._server_instance_factory,
578
+ dispose_instance=self._server_instance_dispose,
579
+ instance_scope=instance_scope,
580
+ server_name=server_name or f"{self.name}-MCP-Server",
581
+ server_description=server_description,
582
+ tool_description=tool_description,
547
583
  )
548
584
 
549
585
  # Run the server directly (this is a blocking call)
@@ -647,11 +683,32 @@ class FastAgent:
647
683
  pass
648
684
 
649
685
  # Print usage report before cleanup (show for user exits too)
650
- if active_agents and not had_error and not quiet_mode:
686
+ if (
687
+ getattr(self, "_server_managed_instances", None)
688
+ and not had_error
689
+ and not quiet_mode
690
+ and getattr(self.args, "server", False) is False
691
+ ):
692
+ # Only show usage report for non-server interactive runs
693
+ if managed_instances:
694
+ instance = managed_instances[0]
695
+ self._print_usage_report(instance.agents)
696
+ elif active_agents and not had_error and not quiet_mode:
651
697
  self._print_usage_report(active_agents)
652
698
 
653
699
  # Clean up any active agents (always cleanup, even on errors)
654
- if active_agents:
700
+ if getattr(self, "_server_managed_instances", None) and getattr(
701
+ self, "_server_instance_dispose", None
702
+ ):
703
+ # Dispose any remaining instances
704
+ remaining_instances = list(self._server_managed_instances)
705
+ for instance in remaining_instances:
706
+ try:
707
+ await self._server_instance_dispose(instance)
708
+ except Exception:
709
+ pass
710
+ self._server_managed_instances.clear()
711
+ elif active_agents:
655
712
  for agent in active_agents.values():
656
713
  try:
657
714
  await agent.shutdown()
@@ -790,6 +847,8 @@ class FastAgent:
790
847
  port: int = 8000,
791
848
  server_name: Optional[str] = None,
792
849
  server_description: Optional[str] = None,
850
+ tool_description: Optional[str] = None,
851
+ instance_scope: str = "shared",
793
852
  ) -> None:
794
853
  """
795
854
  Start the application as an MCP server.
@@ -801,7 +860,9 @@ class FastAgent:
801
860
  host: Host address for the server when using SSE
802
861
  port: Port for the server when using SSE
803
862
  server_name: Optional custom name for the MCP server
804
- server_description: Optional description for the MCP server
863
+ server_description: Optional description/instructions for the MCP server
864
+ tool_description: Optional description template for the exposed send tool.
865
+ Use {agent} to reference the agent name.
805
866
  """
806
867
  # This method simply updates the command line arguments and uses run()
807
868
  # to ensure we follow the same initialization path for all operations
@@ -819,6 +880,10 @@ class FastAgent:
819
880
  self.args.transport = transport
820
881
  self.args.host = host
821
882
  self.args.port = port
883
+ self.args.tool_description = tool_description
884
+ self.args.server_description = server_description
885
+ self.args.server_name = server_name
886
+ self.args.instance_scope = instance_scope
822
887
  self.args.quiet = (
823
888
  original_args.quiet if original_args and hasattr(original_args, "quiet") else False
824
889
  )
@@ -842,6 +907,8 @@ class FastAgent:
842
907
  port: int = 8000,
843
908
  server_name: Optional[str] = None,
844
909
  server_description: Optional[str] = None,
910
+ tool_description: Optional[str] = None,
911
+ instance_scope: str = "shared",
845
912
  ) -> None:
846
913
  """
847
914
  Run the application and expose agents through an MCP server.
@@ -853,7 +920,8 @@ class FastAgent:
853
920
  host: Host address for the server when using SSE
854
921
  port: Port for the server when using SSE
855
922
  server_name: Optional custom name for the MCP server
856
- server_description: Optional description for the MCP server
923
+ server_description: Optional description/instructions for the MCP server
924
+ tool_description: Optional description template for the exposed send tool.
857
925
  """
858
926
  await self.start_server(
859
927
  transport=transport,
@@ -861,6 +929,8 @@ class FastAgent:
861
929
  port=port,
862
930
  server_name=server_name,
863
931
  server_description=server_description,
932
+ tool_description=tool_description,
933
+ instance_scope=instance_scope,
864
934
  )
865
935
 
866
936
  async def main(self):
@@ -892,3 +962,19 @@ class FastAgent:
892
962
  # Just check if the flag is set, no action here
893
963
  # The actual server code will be handled by run()
894
964
  return hasattr(self, "args") and self.args.server
965
+ @dataclass
966
+ class AgentInstance:
967
+ app: AgentApp
968
+ agents: Dict[str, "AgentProtocol"]
969
+
970
+ async def shutdown(self) -> None:
971
+ for agent in self.agents.values():
972
+ try:
973
+ shutdown = getattr(agent, "shutdown", None)
974
+ if shutdown is None:
975
+ continue
976
+ result = shutdown()
977
+ if inspect.isawaitable(result):
978
+ await result
979
+ except Exception:
980
+ pass