fast-agent-mcp 0.3.8__tar.gz → 0.3.9__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 (298) hide show
  1. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/PKG-INFO +5 -5
  2. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/README.md +1 -1
  3. {fast_agent_mcp-0.3.8/src/fast_agent/resources → fast_agent_mcp-0.3.9}/examples/data-analysis/analysis.py +7 -3
  4. fast_agent_mcp-0.3.9/examples/openapi/agent.py +25 -0
  5. fast_agent_mcp-0.3.9/examples/openapi/fastagent.config.yaml +44 -0
  6. fast_agent_mcp-0.3.9/examples/openapi/openapi_mcp_server.py +136 -0
  7. fast_agent_mcp-0.3.9/examples/openapi/petstore.yaml +839 -0
  8. fast_agent_mcp-0.3.9/examples/openapi/pyproject.toml +23 -0
  9. fast_agent_mcp-0.3.9/examples/openapi/run-as-server.sh +5 -0
  10. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/pyproject.toml +4 -4
  11. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/agents/llm_agent.py +24 -0
  12. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/agents/mcp_agent.py +7 -1
  13. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/core/direct_factory.py +20 -8
  14. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/llm/provider/anthropic/llm_anthropic.py +107 -62
  15. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/llm/provider/anthropic/multipart_converter_anthropic.py +4 -3
  16. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/llm/provider/google/google_converter.py +8 -41
  17. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/llm/provider/openai/llm_openai.py +3 -3
  18. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/mcp/mcp_agent_client_session.py +45 -2
  19. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/mcp/mcp_aggregator.py +282 -5
  20. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/mcp/mcp_connection_manager.py +86 -10
  21. fast_agent_mcp-0.3.9/src/fast_agent/mcp/stdio_tracking_simple.py +59 -0
  22. fast_agent_mcp-0.3.9/src/fast_agent/mcp/streamable_http_tracking.py +309 -0
  23. fast_agent_mcp-0.3.9/src/fast_agent/mcp/transport_tracking.py +598 -0
  24. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9/src/fast_agent/resources}/examples/data-analysis/analysis.py +7 -3
  25. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/ui/console_display.py +22 -1
  26. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/ui/enhanced_prompt.py +21 -1
  27. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/ui/interactive_prompt.py +5 -0
  28. fast_agent_mcp-0.3.9/src/fast_agent/ui/mcp_display.py +636 -0
  29. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/.gitignore +0 -0
  30. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/LICENSE +0 -0
  31. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/a2a/agent_executor.py +0 -0
  32. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/a2a/server.py +0 -0
  33. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/azure-openai/fastagent.config.yaml +0 -0
  34. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/bedrock/fast-agent.config.yaml +0 -0
  35. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/custom-agents/agent.py +0 -0
  36. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/custom-agents/fastagent.config.yaml +0 -0
  37. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/data-analysis/analysis-campaign.py +0 -0
  38. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/data-analysis/fastagent.config.yaml +0 -0
  39. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/data-analysis/mount-point/WA_Fn-UseC_-HR-Employee-Attrition.csv +0 -0
  40. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/fastapi/fastapi-advanced.py +0 -0
  41. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/fastapi/fastapi-simple.py +0 -0
  42. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/fastapi/pyproject.toml +0 -0
  43. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/fastapi/readme.md +0 -0
  44. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/mcp/elicitations/elicitation_account_server.py +0 -0
  45. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/mcp/elicitations/elicitation_forms_server.py +0 -0
  46. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/mcp/elicitations/elicitation_game_server.py +0 -0
  47. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/mcp/elicitations/fastagent.config.yaml +0 -0
  48. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/mcp/elicitations/fastagent.secrets.yaml.example +0 -0
  49. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/mcp/elicitations/forms_demo.py +0 -0
  50. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/mcp/elicitations/game_character.py +0 -0
  51. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/mcp/elicitations/game_character_handler.py +0 -0
  52. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/mcp/elicitations/tool_call.py +0 -0
  53. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/mcp/mcp-filtering/fastagent.config.yaml +0 -0
  54. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/mcp/mcp-filtering/fastagent.secrets.yaml.example +0 -0
  55. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/mcp/mcp-filtering/mcp_server.py +0 -0
  56. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/mcp/mcp-filtering/test_mcp_filtering.py +0 -0
  57. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/mcp/state-transfer/agent_one.py +0 -0
  58. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/mcp/state-transfer/agent_two.py +0 -0
  59. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/mcp/state-transfer/fastagent.config.yaml +0 -0
  60. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/mcp/state-transfer/fastagent.secrets.yaml.example +0 -0
  61. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/mcp/vision-examples/cat.png +0 -0
  62. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/mcp/vision-examples/example1.py +0 -0
  63. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/mcp/vision-examples/example2.py +0 -0
  64. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/mcp/vision-examples/example3.py +0 -0
  65. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/mcp/vision-examples/fastagent.config.yaml +0 -0
  66. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/new-api/display_check.py +0 -0
  67. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/new-api/simple_llm.py +0 -0
  68. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/new-api/simple_llm_advanced.py +0 -0
  69. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/new-api/simple_mcp.py +0 -0
  70. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/otel/agent.py +0 -0
  71. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/otel/agent2.py +0 -0
  72. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/otel/docker-compose.yaml +0 -0
  73. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/otel/fastagent.config.yaml +0 -0
  74. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/researcher/fastagent.config.yaml +0 -0
  75. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/researcher/researcher-eval.py +0 -0
  76. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/researcher/researcher-imp.py +0 -0
  77. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/researcher/researcher.py +0 -0
  78. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/setup/.gitignore +0 -0
  79. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/setup/agent.py +0 -0
  80. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/setup/fastagent.config.yaml +0 -0
  81. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/setup/fastagent.secrets.yaml.example +0 -0
  82. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/setup/pyproject.toml.tmpl +0 -0
  83. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/tensorzero/.env.sample +0 -0
  84. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/tensorzero/Makefile +0 -0
  85. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/tensorzero/README.md +0 -0
  86. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/tensorzero/agent.py +0 -0
  87. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/tensorzero/demo_images/clam.jpg +0 -0
  88. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/tensorzero/demo_images/crab.png +0 -0
  89. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/tensorzero/demo_images/shrimp.png +0 -0
  90. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/tensorzero/docker-compose.yml +0 -0
  91. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/tensorzero/fastagent.config.yaml +0 -0
  92. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/tensorzero/image_demo.py +0 -0
  93. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/tensorzero/mcp_server/Dockerfile +0 -0
  94. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/tensorzero/mcp_server/entrypoint.sh +0 -0
  95. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/tensorzero/mcp_server/mcp_server.py +0 -0
  96. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/tensorzero/mcp_server/pyproject.toml +0 -0
  97. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/tensorzero/simple_agent.py +0 -0
  98. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/tensorzero/tensorzero_config/system_schema.json +0 -0
  99. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/tensorzero/tensorzero_config/system_template.minijinja +0 -0
  100. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/tensorzero/tensorzero_config/tensorzero.toml +0 -0
  101. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/workflows/chaining.py +0 -0
  102. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/workflows/evaluator.py +0 -0
  103. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/workflows/fastagent.config.yaml +0 -0
  104. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/workflows/graded_report.md +0 -0
  105. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/workflows/human_input.py +0 -0
  106. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/workflows/orchestrator.py +0 -0
  107. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/workflows/parallel.py +0 -0
  108. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/workflows/router.py +0 -0
  109. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/workflows/short_story.md +0 -0
  110. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/examples/workflows/short_story.txt +0 -0
  111. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/hatch_build.py +0 -0
  112. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/__init__.py +0 -0
  113. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/agents/__init__.py +0 -0
  114. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/agents/agent_types.py +0 -0
  115. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/agents/llm_decorator.py +0 -0
  116. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/agents/tool_agent.py +0 -0
  117. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/agents/workflow/chain_agent.py +0 -0
  118. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/agents/workflow/evaluator_optimizer.py +0 -0
  119. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/agents/workflow/iterative_planner.py +0 -0
  120. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/agents/workflow/orchestrator_models.py +0 -0
  121. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/agents/workflow/orchestrator_prompts.py +0 -0
  122. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/agents/workflow/parallel_agent.py +0 -0
  123. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/agents/workflow/router_agent.py +0 -0
  124. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/cli/__init__.py +0 -0
  125. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/cli/__main__.py +0 -0
  126. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/cli/commands/auth.py +0 -0
  127. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/cli/commands/check_config.py +0 -0
  128. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/cli/commands/go.py +0 -0
  129. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/cli/commands/quickstart.py +0 -0
  130. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/cli/commands/server_helpers.py +0 -0
  131. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/cli/commands/setup.py +0 -0
  132. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/cli/commands/url_parser.py +0 -0
  133. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/cli/constants.py +0 -0
  134. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/cli/main.py +0 -0
  135. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/cli/terminal.py +0 -0
  136. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/config.py +0 -0
  137. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/constants.py +0 -0
  138. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/context.py +0 -0
  139. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/context_dependent.py +0 -0
  140. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/core/__init__.py +0 -0
  141. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/core/agent_app.py +0 -0
  142. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/core/core_app.py +0 -0
  143. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/core/direct_decorators.py +0 -0
  144. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/core/error_handling.py +0 -0
  145. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/core/exceptions.py +0 -0
  146. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/core/executor/__init__.py +0 -0
  147. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/core/executor/executor.py +0 -0
  148. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/core/executor/task_registry.py +0 -0
  149. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/core/executor/workflow_signal.py +0 -0
  150. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/core/fastagent.py +0 -0
  151. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/core/logging/__init__.py +0 -0
  152. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/core/logging/events.py +0 -0
  153. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/core/logging/json_serializer.py +0 -0
  154. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/core/logging/listeners.py +0 -0
  155. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/core/logging/logger.py +0 -0
  156. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/core/logging/transport.py +0 -0
  157. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/core/prompt.py +0 -0
  158. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/core/validation.py +0 -0
  159. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/event_progress.py +0 -0
  160. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/history/history_exporter.py +0 -0
  161. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/human_input/__init__.py +0 -0
  162. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/human_input/elicitation_handler.py +0 -0
  163. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/human_input/elicitation_state.py +0 -0
  164. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/human_input/form_fields.py +0 -0
  165. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/human_input/simple_form.py +0 -0
  166. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/human_input/types.py +0 -0
  167. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/interfaces.py +0 -0
  168. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/llm/__init__.py +0 -0
  169. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/llm/fastagent_llm.py +0 -0
  170. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/llm/internal/passthrough.py +0 -0
  171. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/llm/internal/playback.py +0 -0
  172. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/llm/internal/silent.py +0 -0
  173. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/llm/internal/slow.py +0 -0
  174. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/llm/memory.py +0 -0
  175. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/llm/model_database.py +0 -0
  176. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/llm/model_factory.py +0 -0
  177. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/llm/model_info.py +0 -0
  178. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/llm/prompt_utils.py +0 -0
  179. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/llm/provider/anthropic/anthropic_utils.py +0 -0
  180. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/llm/provider/bedrock/bedrock_utils.py +0 -0
  181. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/llm/provider/bedrock/llm_bedrock.py +0 -0
  182. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/llm/provider/google/llm_google_native.py +0 -0
  183. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/llm/provider/openai/llm_aliyun.py +0 -0
  184. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/llm/provider/openai/llm_azure.py +0 -0
  185. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/llm/provider/openai/llm_deepseek.py +0 -0
  186. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/llm/provider/openai/llm_generic.py +0 -0
  187. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/llm/provider/openai/llm_google_oai.py +0 -0
  188. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/llm/provider/openai/llm_groq.py +0 -0
  189. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/llm/provider/openai/llm_openrouter.py +0 -0
  190. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/llm/provider/openai/llm_tensorzero_openai.py +0 -0
  191. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/llm/provider/openai/llm_xai.py +0 -0
  192. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/llm/provider/openai/multipart_converter_openai.py +0 -0
  193. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/llm/provider/openai/openai_multipart.py +0 -0
  194. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/llm/provider/openai/openai_utils.py +0 -0
  195. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/llm/provider_key_manager.py +0 -0
  196. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/llm/provider_types.py +0 -0
  197. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/llm/request_params.py +0 -0
  198. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/llm/sampling_converter.py +0 -0
  199. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/llm/usage_tracking.py +0 -0
  200. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/mcp/__init__.py +0 -0
  201. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/mcp/common.py +0 -0
  202. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/mcp/elicitation_factory.py +0 -0
  203. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/mcp/elicitation_handlers.py +0 -0
  204. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/mcp/gen_client.py +0 -0
  205. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/mcp/helpers/__init__.py +0 -0
  206. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/mcp/helpers/content_helpers.py +0 -0
  207. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/mcp/helpers/server_config_helpers.py +0 -0
  208. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/mcp/hf_auth.py +0 -0
  209. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/mcp/interfaces.py +0 -0
  210. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/mcp/logger_textio.py +0 -0
  211. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/mcp/mcp_content.py +0 -0
  212. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/mcp/mime_utils.py +0 -0
  213. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/mcp/oauth_client.py +0 -0
  214. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/mcp/prompt.py +0 -0
  215. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/mcp/prompt_message_extended.py +0 -0
  216. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/mcp/prompt_render.py +0 -0
  217. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/mcp/prompt_serialization.py +0 -0
  218. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/mcp/prompts/__init__.py +0 -0
  219. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/mcp/prompts/__main__.py +0 -0
  220. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/mcp/prompts/prompt_constants.py +0 -0
  221. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/mcp/prompts/prompt_helpers.py +0 -0
  222. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/mcp/prompts/prompt_load.py +0 -0
  223. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/mcp/prompts/prompt_server.py +0 -0
  224. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/mcp/prompts/prompt_template.py +0 -0
  225. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/mcp/resource_utils.py +0 -0
  226. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/mcp/sampling.py +0 -0
  227. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/mcp/server/__init__.py +0 -0
  228. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/mcp/server/agent_server.py +0 -0
  229. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/mcp/ui_agent.py +0 -0
  230. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/mcp/ui_mixin.py +0 -0
  231. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/mcp_server_registry.py +0 -0
  232. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/py.typed +0 -0
  233. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/examples/data-analysis/analysis-campaign.py +0 -0
  234. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/examples/data-analysis/fastagent.config.yaml +0 -0
  235. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/examples/data-analysis/mount-point/WA_Fn-UseC_-HR-Employee-Attrition.csv +0 -0
  236. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/examples/mcp/elicitations/elicitation_account_server.py +0 -0
  237. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/examples/mcp/elicitations/elicitation_forms_server.py +0 -0
  238. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/examples/mcp/elicitations/elicitation_game_server.py +0 -0
  239. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/examples/mcp/elicitations/fastagent.config.yaml +0 -0
  240. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/examples/mcp/elicitations/fastagent.secrets.yaml.example +0 -0
  241. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/examples/mcp/elicitations/forms_demo.py +0 -0
  242. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/examples/mcp/elicitations/game_character.py +0 -0
  243. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/examples/mcp/elicitations/game_character_handler.py +0 -0
  244. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/examples/mcp/elicitations/tool_call.py +0 -0
  245. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/examples/mcp/state-transfer/agent_one.py +0 -0
  246. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/examples/mcp/state-transfer/agent_two.py +0 -0
  247. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/examples/mcp/state-transfer/fastagent.config.yaml +0 -0
  248. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/examples/mcp/state-transfer/fastagent.secrets.yaml.example +0 -0
  249. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/examples/researcher/fastagent.config.yaml +0 -0
  250. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/examples/researcher/researcher-eval.py +0 -0
  251. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/examples/researcher/researcher-imp.py +0 -0
  252. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/examples/researcher/researcher.py +0 -0
  253. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/examples/tensorzero/.env.sample +0 -0
  254. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/examples/tensorzero/Makefile +0 -0
  255. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/examples/tensorzero/README.md +0 -0
  256. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/examples/tensorzero/agent.py +0 -0
  257. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/examples/tensorzero/demo_images/clam.jpg +0 -0
  258. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/examples/tensorzero/demo_images/crab.png +0 -0
  259. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/examples/tensorzero/demo_images/shrimp.png +0 -0
  260. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/examples/tensorzero/docker-compose.yml +0 -0
  261. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/examples/tensorzero/fastagent.config.yaml +0 -0
  262. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/examples/tensorzero/image_demo.py +0 -0
  263. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/examples/tensorzero/mcp_server/.python-version +0 -0
  264. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/examples/tensorzero/mcp_server/Dockerfile +0 -0
  265. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/examples/tensorzero/mcp_server/entrypoint.sh +0 -0
  266. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/examples/tensorzero/mcp_server/mcp_server.py +0 -0
  267. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/examples/tensorzero/mcp_server/pyproject.toml +0 -0
  268. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/examples/tensorzero/simple_agent.py +0 -0
  269. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/examples/tensorzero/tensorzero_config/system_schema.json +0 -0
  270. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/examples/tensorzero/tensorzero_config/system_template.minijinja +0 -0
  271. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/examples/tensorzero/tensorzero_config/tensorzero.toml +0 -0
  272. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/examples/workflows/chaining.py +0 -0
  273. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/examples/workflows/evaluator.py +0 -0
  274. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/examples/workflows/fastagent.config.yaml +0 -0
  275. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/examples/workflows/graded_report.md +0 -0
  276. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/examples/workflows/human_input.py +0 -0
  277. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/examples/workflows/orchestrator.py +0 -0
  278. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/examples/workflows/parallel.py +0 -0
  279. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/examples/workflows/router.py +0 -0
  280. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/examples/workflows/short_story.md +0 -0
  281. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/examples/workflows/short_story.txt +0 -0
  282. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/setup/.gitignore +0 -0
  283. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/setup/agent.py +0 -0
  284. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/setup/fastagent.config.yaml +0 -0
  285. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/setup/fastagent.secrets.yaml.example +0 -0
  286. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/resources/setup/pyproject.toml.tmpl +0 -0
  287. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/tools/elicitation.py +0 -0
  288. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/types/__init__.py +0 -0
  289. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/types/llm_stop_reason.py +0 -0
  290. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/ui/__init__.py +0 -0
  291. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/ui/console.py +0 -0
  292. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/ui/elicitation_form.py +0 -0
  293. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/ui/elicitation_style.py +0 -0
  294. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/ui/mcp_ui_utils.py +0 -0
  295. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/ui/mermaid_utils.py +0 -0
  296. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/ui/progress_display.py +0 -0
  297. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/src/fast_agent/ui/rich_progress.py +0 -0
  298. {fast_agent_mcp-0.3.8 → fast_agent_mcp-0.3.9}/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.8
3
+ Version: 0.3.9
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
@@ -219,15 +219,15 @@ 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
221
  Requires-Dist: keyring>=24.3.1
222
- Requires-Dist: mcp==1.14.0
223
- Requires-Dist: openai>=1.108.0
222
+ Requires-Dist: mcp==1.15.0
223
+ Requires-Dist: openai>=1.109.1
224
224
  Requires-Dist: opentelemetry-distro>=0.55b0
225
225
  Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.7.0
226
226
  Requires-Dist: opentelemetry-instrumentation-anthropic>=0.43.1; python_version >= '3.10' and python_version < '4.0'
227
227
  Requires-Dist: opentelemetry-instrumentation-google-genai>=0.3b0
228
228
  Requires-Dist: opentelemetry-instrumentation-mcp>=0.43.1; python_version >= '3.10' and python_version < '4.0'
229
229
  Requires-Dist: opentelemetry-instrumentation-openai>=0.43.1; python_version >= '3.10' and python_version < '4.0'
230
- Requires-Dist: prompt-toolkit>=3.0.51
230
+ Requires-Dist: prompt-toolkit>=3.0.52
231
231
  Requires-Dist: pydantic-settings>=2.7.0
232
232
  Requires-Dist: pydantic>=2.10.4
233
233
  Requires-Dist: pyperclip>=1.9.0
@@ -280,7 +280,7 @@ Start by installing the [uv package manager](https://docs.astral.sh/uv/) for Pyt
280
280
  ```bash
281
281
  uv pip install fast-agent-mcp # install fast-agent!
282
282
  fast-agent go # start an interactive session
283
- fast-agent go https://hf.co/mcp # with a remote MCP
283
+ fast-agent go --url https://hf.co/mcp # with a remote MCP
284
284
  fast-agent go --model=generic.qwen2.5 # use ollama qwen 2.5
285
285
  fast-agent setup # create an example agent and config files
286
286
  uv run agent.py # run your first agent
@@ -41,7 +41,7 @@ Start by installing the [uv package manager](https://docs.astral.sh/uv/) for Pyt
41
41
  ```bash
42
42
  uv pip install fast-agent-mcp # install fast-agent!
43
43
  fast-agent go # start an interactive session
44
- fast-agent go https://hf.co/mcp # with a remote MCP
44
+ fast-agent go --url https://hf.co/mcp # with a remote MCP
45
45
  fast-agent go --model=generic.qwen2.5 # use ollama qwen 2.5
46
46
  fast-agent setup # create an example agent and config files
47
47
  uv run agent.py # run your first agent
@@ -18,18 +18,22 @@ Common analysis packages such as Pandas, Seaborn and Matplotlib are already inst
18
18
  You can add further packages if needed.
19
19
  Data files are accessible from the /mnt/data/ directory (this is the current working directory).
20
20
  Visualisations should be saved as .png files in the current working directory.
21
+
22
+ {{serverInstructions}}
23
+
21
24
  """,
22
25
  servers=["interpreter"],
23
26
  )
24
- @fast.agent(name="another_test", instruction="", servers=["filesystem"])
27
+ # @fast.agent(name="another_test", instruction="", servers=["filesystem"])
25
28
  async def main() -> None:
26
29
  # Use the app's context manager
27
30
  async with fast.run() as agent:
28
- await agent(
31
+ await agent.interactive()
32
+ await agent.data_analysis(
29
33
  "There is a csv file in the current directory. "
30
34
  "Analyse the file, produce a detailed description of the data, and any patterns it contains.",
31
35
  )
32
- await agent(
36
+ await agent.data_analysis(
33
37
  "Consider the data, and how to usefully group it for presentation to a Human. Find insights, using the Python Interpreter as needed.\n"
34
38
  "Use MatPlotLib to produce insightful visualisations. Save them as '.png' files in the current directory. Be sure to run the code and save the files.\n"
35
39
  "Produce a summary with major insights to the data",
@@ -0,0 +1,25 @@
1
+ import asyncio
2
+
3
+ from fast_agent import FastAgent
4
+
5
+ # Create the application
6
+ fast = FastAgent("fast-agent example")
7
+
8
+
9
+ default_instruction = """You are a helpful AI Agent.
10
+
11
+ {{serverInstructions}}
12
+
13
+ The current date is {{currentDate}}."""
14
+
15
+
16
+ # Define the agent
17
+ @fast.agent(instruction=default_instruction,servers=["petstore"])
18
+ async def main():
19
+ # use the --model command line switch or agent arguments to change model
20
+ async with fast.run() as agent:
21
+ await agent.interactive()
22
+
23
+
24
+ if __name__ == "__main__":
25
+ asyncio.run(main())
@@ -0,0 +1,44 @@
1
+ # FastAgent Configuration File
2
+
3
+ # Default Model Configuration:
4
+ #
5
+ # Takes format:
6
+ # <provider>.<model_string>.<reasoning_effort?> (e.g. anthropic.claude-3-5-sonnet-20241022 or openai.o3-mini.low)
7
+ # Accepts aliases for Anthropic Models: haiku, haiku3, sonnet, sonnet35, opus, opus3
8
+ # and OpenAI Models: gpt-4.1, gpt-4.1-mini, o1, o1-mini, o3-mini
9
+ #
10
+ # If not specified, defaults to "gpt-5-mini.low".
11
+ # Can be overriden with a command line switch --model=<model>, or within the Agent constructor.
12
+
13
+ default_model: gpt-5-mini.low
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)
16
+ # mcp_ui_mode: enabled
17
+
18
+ # Logging and Console Configuration:
19
+ logger:
20
+ # level: "debug" | "info" | "warning" | "error"
21
+ # type: "none" | "console" | "file" | "http"
22
+ # path: "/path/to/logfile.jsonl"
23
+
24
+ # Switch the progress display on or off
25
+ progress_display: true
26
+
27
+ # Show chat User/Assistant messages on the console
28
+ show_chat: true
29
+ # Show tool calls on the console
30
+ show_tools: true
31
+ # Truncate long tool responses on the console
32
+ truncate_tools: true
33
+
34
+ # MCP Servers
35
+ mcp:
36
+ servers:
37
+ petstore:
38
+ command: "uv"
39
+ args: ["run","openapi_mcp_server.py","petstore.yaml"]
40
+ filesystem:
41
+ command: "npx"
42
+ args: ["-y", "@modelcontextprotocol/server-filesystem", "."]
43
+ huggingface:
44
+ url: "https://huggingface.co/mcp?login"
@@ -0,0 +1,136 @@
1
+ """OpenAPI MCP server that exposes the provided specification and an API invocation tool."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import argparse
6
+ import logging
7
+ from pathlib import Path
8
+ from typing import Any, Dict
9
+
10
+ import httpx
11
+ import yaml
12
+ from mcp.server.fastmcp import FastMCP
13
+ from pydantic import BaseModel, Field
14
+
15
+
16
+ class ApiCallRequest(BaseModel):
17
+ """Structured request payload for the OpenAPI invocation tool."""
18
+
19
+ method: str = Field(..., description="HTTP method to use, e.g. GET or POST.")
20
+ path: str = Field(..., description="Endpoint path, such as /pets or pets.")
21
+ query: Dict[str, Any] | None = Field(
22
+ default=None, description="Optional query string parameters, keyed by name."
23
+ )
24
+ body: Any | None = Field(default=None, description="Optional JSON request body.")
25
+ headers: Dict[str, str] | None = Field(
26
+ default=None, description="Optional HTTP headers to include with the request."
27
+ )
28
+ timeout: float | None = Field(
29
+ default=30.0, description="Optional request timeout (seconds); defaults to 30."
30
+ )
31
+
32
+
33
+ def load_spec(spec_path: Path) -> tuple[str, str | None]:
34
+ """Return the raw spec text and the first server URL, if any."""
35
+ if not spec_path.exists():
36
+ raise FileNotFoundError(f"OpenAPI specification not found: {spec_path}")
37
+
38
+ spec_text = spec_path.read_text()
39
+ try:
40
+ data = yaml.safe_load(spec_text) or {}
41
+ except yaml.YAMLError as exc:
42
+ raise ValueError(f"Failed to parse OpenAPI specification: {exc}") from exc
43
+
44
+ base_url: str | None = None
45
+ servers = data.get("servers", [])
46
+ for entry in servers:
47
+ if isinstance(entry, dict) and "url" in entry:
48
+ base_url = entry["url"]
49
+ break
50
+
51
+ return spec_text, base_url
52
+
53
+
54
+ def build_server(spec_text: str, base_url: str | None, server_name: str) -> FastMCP:
55
+ instructions = (
56
+ "Here is the API specification you have access to:\n\n"
57
+ f"{spec_text}\n\n"
58
+ "When issuing requests, do not return more than 50 results in a single query."
59
+ )
60
+
61
+ mcp = FastMCP(server_name, instructions=instructions, log_level="INFO")
62
+
63
+ @mcp.tool(
64
+ name="call_openapi_endpoint",
65
+ description=(
66
+ "Invoke an API endpoint from the supplied OpenAPI document. "
67
+ "Provide the HTTP method (GET, POST, etc.), the endpoint path (e.g. /pets), "
68
+ "and optional query parameters, JSON body, or headers."
69
+ ),
70
+ )
71
+ async def call_openapi_endpoint(request: ApiCallRequest) -> Dict[str, Any]:
72
+ if not base_url:
73
+ raise RuntimeError("The OpenAPI specification does not define a server URL to call.")
74
+
75
+ path = request.path if request.path.startswith("/") else f"/{request.path}"
76
+ timeout = request.timeout if request.timeout is not None else 30.0
77
+
78
+ async with httpx.AsyncClient(base_url=base_url, timeout=timeout) as client:
79
+ response = await client.request(
80
+ request.method.upper(),
81
+ path,
82
+ params=request.query,
83
+ json=request.body,
84
+ headers=request.headers,
85
+ )
86
+
87
+ try:
88
+ payload = response.json()
89
+ except ValueError:
90
+ payload = None
91
+
92
+ result: Dict[str, Any] = {
93
+ "status_code": response.status_code,
94
+ "headers": dict(response.headers),
95
+ }
96
+
97
+ if isinstance(payload, list):
98
+ limited_payload = payload[:50]
99
+ result["json"] = limited_payload
100
+ if len(payload) > 50:
101
+ result["truncated"] = True
102
+ result["truncated_count"] = len(payload) - 50
103
+ result["note"] = (
104
+ "Response contained more than 50 items; returning the first 50 to comply with instructions."
105
+ )
106
+ elif payload is not None:
107
+ result["json"] = payload
108
+ else:
109
+ result["text"] = response.text
110
+
111
+ return result
112
+
113
+ return mcp
114
+
115
+
116
+ def main() -> None:
117
+ parser = argparse.ArgumentParser(description="Run an MCP server backed by an OpenAPI specification.")
118
+ parser.add_argument("spec", help="Path to the OpenAPI specification (YAML or JSON).")
119
+ parser.add_argument(
120
+ "--name",
121
+ default="OpenAPI MCP Server",
122
+ help="Optional server name to present to clients (default: OpenAPI MCP Server).",
123
+ )
124
+ args = parser.parse_args()
125
+
126
+ spec_path = Path(args.spec)
127
+ spec_text, base_url = load_spec(spec_path)
128
+
129
+ logging.basicConfig(level=logging.INFO)
130
+
131
+ server = build_server(spec_text, base_url, args.name)
132
+ server.run("stdio")
133
+
134
+
135
+ if __name__ == "__main__":
136
+ main()