fast-agent-mcp 0.1.12__tar.gz → 0.2.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (195) hide show
  1. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/.gitignore +2 -0
  2. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/PKG-INFO +3 -4
  3. {fast_agent_mcp-0.1.12/src/mcp_agent/resources → fast_agent_mcp-0.2.0}/examples/data-analysis/analysis-campaign.py +2 -2
  4. {fast_agent_mcp-0.1.12/src/mcp_agent/resources → fast_agent_mcp-0.2.0}/examples/data-analysis/analysis.py +2 -2
  5. {fast_agent_mcp-0.1.12/src/mcp_agent/resources → fast_agent_mcp-0.2.0}/examples/researcher/researcher-eval.py +2 -2
  6. {fast_agent_mcp-0.1.12/src/mcp_agent/resources → fast_agent_mcp-0.2.0}/examples/researcher/researcher-imp.py +4 -5
  7. {fast_agent_mcp-0.1.12/src/mcp_agent/resources → fast_agent_mcp-0.2.0}/examples/researcher/researcher.py +2 -4
  8. {fast_agent_mcp-0.1.12/src/mcp_agent/resources → fast_agent_mcp-0.2.0}/examples/workflows/chaining.py +3 -11
  9. {fast_agent_mcp-0.1.12/src/mcp_agent/resources → fast_agent_mcp-0.2.0}/examples/workflows/evaluator.py +2 -3
  10. fast_agent_mcp-0.2.0/examples/workflows/graded_report.md +89 -0
  11. {fast_agent_mcp-0.1.12/src/mcp_agent/resources → fast_agent_mcp-0.2.0}/examples/workflows/human_input.py +3 -2
  12. {fast_agent_mcp-0.1.12/src/mcp_agent/resources → fast_agent_mcp-0.2.0}/examples/workflows/orchestrator.py +5 -9
  13. {fast_agent_mcp-0.1.12/src/mcp_agent/resources → fast_agent_mcp-0.2.0}/examples/workflows/parallel.py +8 -28
  14. {fast_agent_mcp-0.1.12/src/mcp_agent/resources → fast_agent_mcp-0.2.0}/examples/workflows/router.py +2 -1
  15. fast_agent_mcp-0.2.0/examples/workflows/short_story.md +13 -0
  16. fast_agent_mcp-0.2.0/examples/workflows/short_story.txt +19 -0
  17. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/pyproject.toml +27 -16
  18. fast_agent_mcp-0.2.0/src/mcp_agent/__init__.py +75 -0
  19. fast_agent_mcp-0.2.0/src/mcp_agent/agents/agent.py +96 -0
  20. fast_agent_mcp-0.1.12/src/mcp_agent/agents/agent.py → fast_agent_mcp-0.2.0/src/mcp_agent/agents/base_agent.py +223 -151
  21. fast_agent_mcp-0.2.0/src/mcp_agent/agents/workflow/__init__.py +1 -0
  22. fast_agent_mcp-0.2.0/src/mcp_agent/agents/workflow/chain_agent.py +173 -0
  23. fast_agent_mcp-0.2.0/src/mcp_agent/agents/workflow/evaluator_optimizer.py +362 -0
  24. fast_agent_mcp-0.2.0/src/mcp_agent/agents/workflow/orchestrator_agent.py +591 -0
  25. {fast_agent_mcp-0.1.12/src/mcp_agent/workflows/orchestrator → fast_agent_mcp-0.2.0/src/mcp_agent/agents/workflow}/orchestrator_models.py +11 -21
  26. fast_agent_mcp-0.2.0/src/mcp_agent/agents/workflow/parallel_agent.py +182 -0
  27. fast_agent_mcp-0.2.0/src/mcp_agent/agents/workflow/router_agent.py +307 -0
  28. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/app.py +15 -19
  29. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/cli/commands/bootstrap.py +19 -38
  30. fast_agent_mcp-0.2.0/src/mcp_agent/cli/commands/config.py +11 -0
  31. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/cli/commands/setup.py +7 -14
  32. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/cli/main.py +7 -10
  33. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/cli/terminal.py +3 -3
  34. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/config.py +25 -40
  35. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/context.py +12 -21
  36. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/context_dependent.py +3 -5
  37. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/core/agent_types.py +10 -7
  38. fast_agent_mcp-0.2.0/src/mcp_agent/core/direct_agent_app.py +179 -0
  39. fast_agent_mcp-0.2.0/src/mcp_agent/core/direct_decorators.py +443 -0
  40. fast_agent_mcp-0.2.0/src/mcp_agent/core/direct_factory.py +476 -0
  41. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/core/enhanced_prompt.py +23 -55
  42. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/core/exceptions.py +8 -8
  43. fast_agent_mcp-0.2.0/src/mcp_agent/core/fastagent.py +343 -0
  44. fast_agent_mcp-0.2.0/src/mcp_agent/core/interactive_prompt.py +424 -0
  45. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/core/mcp_content.py +17 -17
  46. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/core/prompt.py +6 -9
  47. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/core/request_params.py +6 -3
  48. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/core/validation.py +92 -18
  49. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/executor/decorator_registry.py +9 -17
  50. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/executor/executor.py +8 -17
  51. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/executor/task_registry.py +2 -4
  52. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/executor/temporal.py +19 -41
  53. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/executor/workflow.py +3 -5
  54. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/executor/workflow_signal.py +15 -21
  55. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/human_input/handler.py +4 -7
  56. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/human_input/types.py +2 -3
  57. fast_agent_mcp-0.2.0/src/mcp_agent/llm/__init__.py +2 -0
  58. fast_agent_mcp-0.2.0/src/mcp_agent/llm/augmented_llm.py +450 -0
  59. fast_agent_mcp-0.2.0/src/mcp_agent/llm/augmented_llm_passthrough.py +162 -0
  60. fast_agent_mcp-0.2.0/src/mcp_agent/llm/augmented_llm_playback.py +83 -0
  61. fast_agent_mcp-0.2.0/src/mcp_agent/llm/memory.py +103 -0
  62. {fast_agent_mcp-0.1.12/src/mcp_agent/workflows → fast_agent_mcp-0.2.0/src/mcp_agent}/llm/model_factory.py +22 -16
  63. {fast_agent_mcp-0.1.12/src/mcp_agent/workflows → fast_agent_mcp-0.2.0/src/mcp_agent}/llm/prompt_utils.py +1 -3
  64. fast_agent_mcp-0.2.0/src/mcp_agent/llm/providers/__init__.py +8 -0
  65. {fast_agent_mcp-0.1.12/src/mcp_agent/workflows/llm → fast_agent_mcp-0.2.0/src/mcp_agent/llm/providers}/anthropic_utils.py +8 -25
  66. {fast_agent_mcp-0.1.12/src/mcp_agent/workflows/llm → fast_agent_mcp-0.2.0/src/mcp_agent/llm/providers}/augmented_llm_anthropic.py +56 -194
  67. fast_agent_mcp-0.2.0/src/mcp_agent/llm/providers/augmented_llm_deepseek.py +53 -0
  68. {fast_agent_mcp-0.1.12/src/mcp_agent/workflows/llm → fast_agent_mcp-0.2.0/src/mcp_agent/llm/providers}/augmented_llm_openai.py +99 -190
  69. {fast_agent_mcp-0.1.12/src/mcp_agent/workflows → fast_agent_mcp-0.2.0/src/mcp_agent}/llm/providers/multipart_converter_anthropic.py +72 -71
  70. {fast_agent_mcp-0.1.12/src/mcp_agent/workflows → fast_agent_mcp-0.2.0/src/mcp_agent}/llm/providers/multipart_converter_openai.py +65 -71
  71. {fast_agent_mcp-0.1.12/src/mcp_agent/workflows → fast_agent_mcp-0.2.0/src/mcp_agent}/llm/providers/openai_multipart.py +16 -44
  72. {fast_agent_mcp-0.1.12/src/mcp_agent/workflows/llm → fast_agent_mcp-0.2.0/src/mcp_agent/llm/providers}/openai_utils.py +4 -4
  73. {fast_agent_mcp-0.1.12/src/mcp_agent/workflows → fast_agent_mcp-0.2.0/src/mcp_agent}/llm/providers/sampling_converter_anthropic.py +9 -11
  74. {fast_agent_mcp-0.1.12/src/mcp_agent/workflows → fast_agent_mcp-0.2.0/src/mcp_agent}/llm/providers/sampling_converter_openai.py +8 -12
  75. {fast_agent_mcp-0.1.12/src/mcp_agent/workflows → fast_agent_mcp-0.2.0/src/mcp_agent}/llm/sampling_converter.py +3 -31
  76. fast_agent_mcp-0.2.0/src/mcp_agent/llm/sampling_format_converter.py +37 -0
  77. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/logging/events.py +1 -5
  78. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/logging/json_serializer.py +7 -6
  79. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/logging/listeners.py +20 -23
  80. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/logging/logger.py +17 -19
  81. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/logging/rich_progress.py +10 -8
  82. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/logging/tracing.py +4 -6
  83. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/logging/transport.py +22 -22
  84. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/mcp/gen_client.py +1 -3
  85. fast_agent_mcp-0.2.0/src/mcp_agent/mcp/interfaces.py +193 -0
  86. fast_agent_mcp-0.2.0/src/mcp_agent/mcp/logger_textio.py +97 -0
  87. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/mcp/mcp_agent_client_session.py +7 -7
  88. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/mcp/mcp_agent_server.py +8 -8
  89. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/mcp/mcp_aggregator.py +102 -143
  90. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/mcp/mcp_connection_manager.py +20 -27
  91. fast_agent_mcp-0.2.0/src/mcp_agent/mcp/prompt_message_multipart.py +116 -0
  92. fast_agent_mcp-0.2.0/src/mcp_agent/mcp/prompt_render.py +77 -0
  93. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/mcp/prompt_serialization.py +30 -48
  94. fast_agent_mcp-0.2.0/src/mcp_agent/mcp/prompts/prompt_constants.py +18 -0
  95. fast_agent_mcp-0.2.0/src/mcp_agent/mcp/prompts/prompt_helpers.py +327 -0
  96. fast_agent_mcp-0.2.0/src/mcp_agent/mcp/prompts/prompt_load.py +109 -0
  97. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/mcp/prompts/prompt_server.py +155 -195
  98. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/mcp/prompts/prompt_template.py +35 -66
  99. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/mcp/resource_utils.py +7 -14
  100. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/mcp/sampling.py +17 -17
  101. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/mcp_server/agent_server.py +13 -17
  102. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/mcp_server_registry.py +13 -22
  103. {fast_agent_mcp-0.1.12/src/mcp_agent/resources/examples/workflows → fast_agent_mcp-0.2.0/src/mcp_agent/resources/examples/in_dev}/agent_build.py +3 -2
  104. fast_agent_mcp-0.2.0/src/mcp_agent/resources/examples/in_dev/slides.py +110 -0
  105. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/resources/examples/internal/agent.py +6 -3
  106. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/resources/examples/internal/fastagent.config.yaml +8 -2
  107. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/resources/examples/internal/job.py +2 -1
  108. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/resources/examples/internal/prompt_category.py +1 -1
  109. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/resources/examples/internal/prompt_sizing.py +3 -5
  110. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/resources/examples/internal/sizer.py +2 -1
  111. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/resources/examples/internal/social.py +2 -1
  112. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/resources/examples/prompting/agent.py +2 -1
  113. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/resources/examples/prompting/image_server.py +4 -8
  114. fast_agent_mcp-0.2.0/src/mcp_agent/resources/examples/prompting/work_with_image.py +19 -0
  115. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/ui/console_display.py +16 -20
  116. fast_agent_mcp-0.1.12/src/mcp_agent/cli/commands/config.py +0 -11
  117. fast_agent_mcp-0.1.12/src/mcp_agent/core/agent_app.py +0 -646
  118. fast_agent_mcp-0.1.12/src/mcp_agent/core/agent_utils.py +0 -71
  119. fast_agent_mcp-0.1.12/src/mcp_agent/core/decorators.py +0 -455
  120. fast_agent_mcp-0.1.12/src/mcp_agent/core/factory.py +0 -463
  121. fast_agent_mcp-0.1.12/src/mcp_agent/core/fastagent.py +0 -569
  122. fast_agent_mcp-0.1.12/src/mcp_agent/core/proxies.py +0 -269
  123. fast_agent_mcp-0.1.12/src/mcp_agent/core/types.py +0 -24
  124. fast_agent_mcp-0.1.12/src/mcp_agent/mcp/__init__.py +0 -0
  125. fast_agent_mcp-0.1.12/src/mcp_agent/mcp/interfaces.py +0 -186
  126. fast_agent_mcp-0.1.12/src/mcp_agent/mcp/prompt_message_multipart.py +0 -64
  127. fast_agent_mcp-0.1.12/src/mcp_agent/mcp/prompts/__init__.py +0 -0
  128. fast_agent_mcp-0.1.12/src/mcp_agent/mcp/stdio.py +0 -111
  129. fast_agent_mcp-0.1.12/src/mcp_agent/resources/examples/mcp_researcher/researcher-eval.py +0 -53
  130. fast_agent_mcp-0.1.12/src/mcp_agent/resources/examples/workflows/sse.py +0 -23
  131. fast_agent_mcp-0.1.12/src/mcp_agent/telemetry/__init__.py +0 -0
  132. fast_agent_mcp-0.1.12/src/mcp_agent/telemetry/usage_tracking.py +0 -18
  133. fast_agent_mcp-0.1.12/src/mcp_agent/workflows/__init__.py +0 -0
  134. fast_agent_mcp-0.1.12/src/mcp_agent/workflows/embedding/__init__.py +0 -0
  135. fast_agent_mcp-0.1.12/src/mcp_agent/workflows/embedding/embedding_base.py +0 -61
  136. fast_agent_mcp-0.1.12/src/mcp_agent/workflows/embedding/embedding_cohere.py +0 -49
  137. fast_agent_mcp-0.1.12/src/mcp_agent/workflows/embedding/embedding_openai.py +0 -46
  138. fast_agent_mcp-0.1.12/src/mcp_agent/workflows/evaluator_optimizer/__init__.py +0 -0
  139. fast_agent_mcp-0.1.12/src/mcp_agent/workflows/evaluator_optimizer/evaluator_optimizer.py +0 -481
  140. fast_agent_mcp-0.1.12/src/mcp_agent/workflows/intent_classifier/__init__.py +0 -0
  141. fast_agent_mcp-0.1.12/src/mcp_agent/workflows/intent_classifier/intent_classifier_base.py +0 -120
  142. fast_agent_mcp-0.1.12/src/mcp_agent/workflows/intent_classifier/intent_classifier_embedding.py +0 -134
  143. fast_agent_mcp-0.1.12/src/mcp_agent/workflows/intent_classifier/intent_classifier_embedding_cohere.py +0 -45
  144. fast_agent_mcp-0.1.12/src/mcp_agent/workflows/intent_classifier/intent_classifier_embedding_openai.py +0 -45
  145. fast_agent_mcp-0.1.12/src/mcp_agent/workflows/intent_classifier/intent_classifier_llm.py +0 -161
  146. fast_agent_mcp-0.1.12/src/mcp_agent/workflows/intent_classifier/intent_classifier_llm_anthropic.py +0 -60
  147. fast_agent_mcp-0.1.12/src/mcp_agent/workflows/intent_classifier/intent_classifier_llm_openai.py +0 -60
  148. fast_agent_mcp-0.1.12/src/mcp_agent/workflows/llm/__init__.py +0 -0
  149. fast_agent_mcp-0.1.12/src/mcp_agent/workflows/llm/augmented_llm.py +0 -753
  150. fast_agent_mcp-0.1.12/src/mcp_agent/workflows/llm/augmented_llm_passthrough.py +0 -241
  151. fast_agent_mcp-0.1.12/src/mcp_agent/workflows/llm/augmented_llm_playback.py +0 -109
  152. fast_agent_mcp-0.1.12/src/mcp_agent/workflows/llm/providers/__init__.py +0 -8
  153. fast_agent_mcp-0.1.12/src/mcp_agent/workflows/llm/sampling_format_converter.py +0 -22
  154. fast_agent_mcp-0.1.12/src/mcp_agent/workflows/orchestrator/__init__.py +0 -0
  155. fast_agent_mcp-0.1.12/src/mcp_agent/workflows/orchestrator/orchestrator.py +0 -578
  156. fast_agent_mcp-0.1.12/src/mcp_agent/workflows/parallel/__init__.py +0 -0
  157. fast_agent_mcp-0.1.12/src/mcp_agent/workflows/parallel/fan_in.py +0 -350
  158. fast_agent_mcp-0.1.12/src/mcp_agent/workflows/parallel/fan_out.py +0 -187
  159. fast_agent_mcp-0.1.12/src/mcp_agent/workflows/parallel/parallel_llm.py +0 -166
  160. fast_agent_mcp-0.1.12/src/mcp_agent/workflows/router/__init__.py +0 -0
  161. fast_agent_mcp-0.1.12/src/mcp_agent/workflows/router/router_base.py +0 -368
  162. fast_agent_mcp-0.1.12/src/mcp_agent/workflows/router/router_embedding.py +0 -240
  163. fast_agent_mcp-0.1.12/src/mcp_agent/workflows/router/router_embedding_cohere.py +0 -59
  164. fast_agent_mcp-0.1.12/src/mcp_agent/workflows/router/router_embedding_openai.py +0 -59
  165. fast_agent_mcp-0.1.12/src/mcp_agent/workflows/router/router_llm.py +0 -320
  166. fast_agent_mcp-0.1.12/src/mcp_agent/workflows/swarm/__init__.py +0 -0
  167. fast_agent_mcp-0.1.12/src/mcp_agent/workflows/swarm/swarm.py +0 -320
  168. fast_agent_mcp-0.1.12/src/mcp_agent/workflows/swarm/swarm_anthropic.py +0 -42
  169. fast_agent_mcp-0.1.12/src/mcp_agent/workflows/swarm/swarm_openai.py +0 -41
  170. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/LICENSE +0 -0
  171. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/README.md +0 -0
  172. {fast_agent_mcp-0.1.12/src/mcp_agent/resources → fast_agent_mcp-0.2.0}/examples/data-analysis/fastagent.config.yaml +0 -0
  173. {fast_agent_mcp-0.1.12/src/mcp_agent/resources → fast_agent_mcp-0.2.0}/examples/data-analysis/mount-point/WA_Fn-UseC_-HR-Employee-Attrition.csv +0 -0
  174. {fast_agent_mcp-0.1.12/src/mcp_agent/resources → fast_agent_mcp-0.2.0}/examples/researcher/fastagent.config.yaml +0 -0
  175. {fast_agent_mcp-0.1.12/src/mcp_agent/resources → fast_agent_mcp-0.2.0}/examples/workflows/fastagent.config.yaml +0 -0
  176. {fast_agent_mcp-0.1.12/src/mcp_agent → fast_agent_mcp-0.2.0/src/mcp_agent/agents}/__init__.py +0 -0
  177. {fast_agent_mcp-0.1.12/src/mcp_agent/workflows/orchestrator → fast_agent_mcp-0.2.0/src/mcp_agent/agents/workflow}/orchestrator_prompts.py +0 -0
  178. {fast_agent_mcp-0.1.12/src/mcp_agent/agents → fast_agent_mcp-0.2.0/src/mcp_agent/cli}/__init__.py +0 -0
  179. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/cli/__main__.py +0 -0
  180. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/console.py +0 -0
  181. {fast_agent_mcp-0.1.12/src/mcp_agent/cli → fast_agent_mcp-0.2.0/src/mcp_agent/core}/__init__.py +0 -0
  182. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/core/error_handling.py +0 -0
  183. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/event_progress.py +0 -0
  184. {fast_agent_mcp-0.1.12/src/mcp_agent/core → fast_agent_mcp-0.2.0/src/mcp_agent/executor}/__init__.py +0 -0
  185. {fast_agent_mcp-0.1.12/src/mcp_agent/eval → fast_agent_mcp-0.2.0/src/mcp_agent/human_input}/__init__.py +0 -0
  186. {fast_agent_mcp-0.1.12/src/mcp_agent/executor → fast_agent_mcp-0.2.0/src/mcp_agent/logging}/__init__.py +0 -0
  187. {fast_agent_mcp-0.1.12/src/mcp_agent/human_input → fast_agent_mcp-0.2.0/src/mcp_agent/mcp}/__init__.py +0 -0
  188. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/mcp/mcp_activity.py +0 -0
  189. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/mcp/mime_utils.py +0 -0
  190. {fast_agent_mcp-0.1.12/src/mcp_agent/logging → fast_agent_mcp-0.2.0/src/mcp_agent/mcp/prompts}/__init__.py +0 -0
  191. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/mcp/prompts/__main__.py +0 -0
  192. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/mcp_server/__init__.py +0 -0
  193. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/progress_display.py +0 -0
  194. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/resources/examples/prompting/__init__.py +0 -0
  195. {fast_agent_mcp-0.1.12 → fast_agent_mcp-0.2.0}/src/mcp_agent/resources/examples/prompting/fastagent.config.yaml +0 -0
@@ -182,3 +182,5 @@ fastagent.secrets.yaml
182
182
  CLAUDE.md
183
183
  example-outputs/
184
184
 
185
+ tests/integration/prompt-state/simple.txt
186
+ tests/integration/workflow/router/fastagent.jsonl
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fast-agent-mcp
3
- Version: 0.1.12
3
+ Version: 0.2.0
4
4
  Summary: Define, Prompt and Test MCP enabled Agents and Workflows
5
5
  Author-email: Shaun Smith <fastagent@llmindset.co.uk>, Sarmad Qadri <sarmad@lastmileai.dev>
6
6
  License: Apache License
@@ -212,7 +212,7 @@ Requires-Python: >=3.10
212
212
  Requires-Dist: aiohttp>=3.11.13
213
213
  Requires-Dist: anthropic>=0.49.0
214
214
  Requires-Dist: fastapi>=0.115.6
215
- Requires-Dist: mcp>=1.5.0
215
+ Requires-Dist: mcp==1.6.0
216
216
  Requires-Dist: numpy>=2.2.1
217
217
  Requires-Dist: openai>=1.63.2
218
218
  Requires-Dist: opentelemetry-distro>=0.50b0
@@ -224,13 +224,12 @@ Requires-Dist: pyyaml>=6.0.2
224
224
  Requires-Dist: rich>=13.9.4
225
225
  Requires-Dist: scikit-learn>=1.6.0
226
226
  Requires-Dist: typer>=0.15.1
227
- Provides-Extra: cohere
228
- Requires-Dist: cohere>=5.13.4; extra == 'cohere'
229
227
  Provides-Extra: dev
230
228
  Requires-Dist: anthropic>=0.42.0; extra == 'dev'
231
229
  Requires-Dist: pre-commit>=4.0.1; extra == 'dev'
232
230
  Requires-Dist: pydantic>=2.10.4; extra == 'dev'
233
231
  Requires-Dist: pytest-asyncio>=0.21.1; extra == 'dev'
232
+ Requires-Dist: pytest-cov; extra == 'dev'
234
233
  Requires-Dist: pytest>=7.4.0; extra == 'dev'
235
234
  Requires-Dist: pyyaml>=6.0.2; extra == 'dev'
236
235
  Requires-Dist: ruff>=0.8.4; extra == 'dev'
@@ -1,7 +1,7 @@
1
1
  import asyncio
2
2
 
3
3
  from mcp_agent.core.fastagent import FastAgent
4
- from mcp_agent.workflows.llm.augmented_llm import RequestParams
4
+ from mcp_agent.llm.augmented_llm import RequestParams
5
5
 
6
6
  # Create the application
7
7
  fast = FastAgent("Data Analysis & Campaign Generator")
@@ -172,7 +172,7 @@ Extract key insights that would be compelling for a social media campaign.
172
172
  request_params=RequestParams(maxTokens=8192),
173
173
  plan_type="full",
174
174
  )
175
- async def main():
175
+ async def main() -> None:
176
176
  # Use the app's context manager
177
177
  print(
178
178
  "WARNING: This workflow will likely run for >10 minutes and consume a lot of tokens. Press Enter to accept the default prompt and proceed"
@@ -1,7 +1,7 @@
1
1
  import asyncio
2
2
 
3
3
  from mcp_agent.core.fastagent import FastAgent
4
- from mcp_agent.workflows.llm.augmented_llm import RequestParams
4
+ from mcp_agent.llm.augmented_llm import RequestParams
5
5
 
6
6
  # Create the application
7
7
  fast = FastAgent("Data Analysis (Roots)")
@@ -23,7 +23,7 @@ Visualisations should be saved as .png files in the current working directory.
23
23
  servers=["interpreter"],
24
24
  request_params=RequestParams(maxTokens=8192),
25
25
  )
26
- async def main():
26
+ async def main() -> None:
27
27
  # Use the app's context manager
28
28
  async with fast.run() as agent:
29
29
  await agent(
@@ -41,12 +41,12 @@ Summarize your evaluation as a structured response with:
41
41
  min_rating="EXCELLENT",
42
42
  name="Researcher_Evaluator",
43
43
  )
44
- async def main():
44
+ async def main() -> None:
45
45
  async with agents.run() as agent:
46
46
  await agent.prompt("Researcher_Evaluator")
47
47
 
48
48
  print("Ask follow up quesions to the Researcher?")
49
- await agent.prompt("Researcher", default="STOP")
49
+ await agent.prompt("Researcher", default_prompt="STOP")
50
50
 
51
51
 
52
52
  if __name__ == "__main__":
@@ -1,4 +1,5 @@
1
1
  import asyncio
2
+
2
3
  from mcp_agent.core.fastagent import FastAgent
3
4
 
4
5
  agents = FastAgent(name="Enhanced Researcher")
@@ -162,7 +163,7 @@ The researcher should be able to understand exactly why they received their rati
162
163
  min_rating="EXCELLENT",
163
164
  name="EnhancedResearcher",
164
165
  )
165
- async def main():
166
+ async def main() -> None:
166
167
  async with agents.run() as agent:
167
168
  # Start with a warm-up to set expectations and explain the research approach
168
169
  await agent.Researcher.send(
@@ -180,10 +181,8 @@ async def main():
180
181
  # Start the main research workflow
181
182
  await agent.prompt("EnhancedResearcher")
182
183
 
183
- print(
184
- "\nWould you like to ask follow-up questions to the Researcher? (Type 'STOP' to end)"
185
- )
186
- await agent.prompt("Researcher", default="STOP")
184
+ print("\nWould you like to ask follow-up questions to the Researcher? (Type 'STOP' to end)")
185
+ await agent.prompt("Researcher", default_prompt="STOP")
187
186
 
188
187
 
189
188
  if __name__ == "__main__":
@@ -1,6 +1,7 @@
1
1
  import asyncio
2
2
 
3
3
  from mcp_agent.core.fastagent import FastAgent
4
+
4
5
  # from rich import print
5
6
 
6
7
  agents = FastAgent(name="Researcher Agent")
@@ -16,7 +17,7 @@ The interpreter has numpy, pandas, matplotlib and seaborn already installed
16
17
  """,
17
18
  servers=["brave", "interpreter", "filesystem", "fetch"],
18
19
  )
19
- async def main():
20
+ async def main() -> None:
20
21
  research_prompt = """
21
22
  Produce an investment report for the company Eutelsat. The final report should be saved in the filesystem in markdown format, and
22
23
  contain at least the following:
@@ -30,9 +31,6 @@ Todays date is 15 February 2025. Include the main data sources consulted in pres
30
31
  async with agents.run() as agent:
31
32
  await agent.prompt()
32
33
 
33
- # await agent.prompt(default="STOP")
34
- # await agent.prompt(default=research_prompt)
35
-
36
34
 
37
35
  if __name__ == "__main__":
38
36
  asyncio.run(main())
@@ -1,4 +1,5 @@
1
1
  import asyncio
2
+
2
3
  from mcp_agent.core.fastagent import FastAgent
3
4
 
4
5
  # Create the application
@@ -21,19 +22,10 @@ fast = FastAgent("Agent Chaining")
21
22
  name="post_writer",
22
23
  sequence=["url_fetcher", "social_media"],
23
24
  )
24
- async def main():
25
+ async def main() -> None:
25
26
  async with fast.run() as agent:
26
27
  # using chain workflow
27
- await agent.post_writer.prompt()
28
-
29
- # calling directly
30
- # await agent.url_fetcher("http://llmindset.co.uk/resources/mcp-hfspace/")
31
- # await agent.social_media(
32
- # await agent.url_fetcher("http://llmindset.co.uk/resources/mcp-hfspace/")
33
- # )
34
-
35
- # agents can also be accessed like dictionaries:
36
- # awwait agent["post_writer"].prompt()
28
+ await agent.post_writer.send("https://llmindset.co.uk")
37
29
 
38
30
 
39
31
  # alternative syntax for above is result = agent["post_writer"].send(message)
@@ -3,6 +3,7 @@ This demonstrates creating an optimizer and evaluator to iteratively improve con
3
3
  """
4
4
 
5
5
  import asyncio
6
+
6
7
  from mcp_agent.core.fastagent import FastAgent
7
8
 
8
9
  # Create the application
@@ -49,7 +50,7 @@ fast = FastAgent("Evaluator-Optimizer")
49
50
  min_rating="EXCELLENT", # Strive for excellence
50
51
  max_refinements=3, # Maximum iterations
51
52
  )
52
- async def main():
53
+ async def main() -> None:
53
54
  async with fast.run() as agent:
54
55
  job_posting = (
55
56
  "Software Engineer at LastMile AI. Responsibilities include developing AI systems, "
@@ -71,8 +72,6 @@ async def main():
71
72
  f"Company information: {company_information}",
72
73
  )
73
74
 
74
- await agent()
75
-
76
75
 
77
76
  if __name__ == "__main__":
78
77
  asyncio.run(main())
@@ -0,0 +1,89 @@
1
+ # Graded Report: "The Kittens Castle Adventure"
2
+
3
+ ## Proofreading Feedback
4
+
5
+ ### Spelling Errors
6
+ 1. "Adventuer" → "Adventure"
7
+ 2. "lil" → "little"
8
+ 3. "name" → "named"
9
+ 4. "threw" → "through"
10
+ 5. "mystirus" → "mysterious"
11
+ 6. "forrest" → "forest"
12
+ 7. "was" → "were"
13
+ 8. "an" → "and"
14
+ 9. "Suddenlee" → "Suddenly"
15
+ 10. "sawd" → "saw"
16
+ 11. "somthing" → "something"
17
+ 12. "chese" → "cheese"
18
+ 13. "windos" → "windows"
19
+ 14. "turrits" → "turrets"
20
+ 15. "tuch" → "touch"
21
+ 16. "clowds" → "clouds"
22
+ 17. "doars" → "doors"
23
+ 18. "enuff" → "enough"
24
+ 19. "elefant" → "elephant"
25
+ 20. "sed" → "said"
26
+ 21. "tale" → "tail"
27
+ 22. "poofy" → "puffy"
28
+ 23. "fowned" → "found"
29
+ 24. "meowed" → added missing period
30
+ 25. "smallist" → "smallest"
31
+ 26. "rond" → "round"
32
+ 27. "climed" → "climbed"
33
+ 28. "slip-slidin" → "slip-sliding"
34
+ 29. "smoth" → "smooth"
35
+ 30. "surfase" → "surface"
36
+ 31. "ful" → "full"
37
+ 32. "dangling" → added missing period
38
+ 33. "JINGEL" → "jingle"
39
+ 34. "paradyse" → "paradise"
40
+ 35. "figur" → "figure"
41
+ 36. "gaurd" → "guard"
42
+ 37. "sumthing" → "something"
43
+ 38. "mor" → "more"
44
+ 39. "hudeld" → "huddled"
45
+ 40. "togethar" → "together"
46
+ 41. "there" → "their"
47
+ 42. "happan" → "happen"
48
+ 43. "amazeing" → "amazing"
49
+
50
+ ### Grammar and Syntax Errors
51
+ 1. Inconsistent verb tenses throughout the story
52
+ 2. Improper use of articles (a/an)
53
+ 3. Missing punctuation
54
+ 4. Lack of subject-verb agreement
55
+ 5. Incorrect capitalization
56
+
57
+ ### Style and Formatting Recommendations
58
+ 1. Use standard capitalization for proper nouns
59
+ 2. Maintain consistent verb tense (past tense recommended)
60
+ 3. Use proper punctuation
61
+ 4. Avoid excessive use of exclamation points
62
+ 5. Use standard spelling for all words
63
+
64
+ ## Factuality and Logical Consistency
65
+ - The story is a fictional narrative about three kittens, so traditional factual constraints do not strictly apply
66
+ - The narrative maintains internal logical consistency
67
+ - The cliffhanger ending leaves room for imagination
68
+
69
+ ## Style Adherence
70
+ ### APA Formatting Guidelines
71
+ - Title should be centered and in title case
72
+ - Use 12-point Times New Roman font (not applicable in markdown)
73
+ - Double-spacing recommended (not applicable in markdown)
74
+ - 1-inch margins (not applicable in markdown)
75
+
76
+ ### Recommendations for Improvement
77
+ 1. Proofread and correct all spelling errors
78
+ 2. Maintain consistent grammar and syntax
79
+ 3. Use standard English spelling
80
+ 4. Add more descriptive language
81
+ 5. Develop a more structured narrative arc
82
+
83
+ ## Overall Assessment
84
+ **Writing Quality**: Needs Significant Improvement
85
+ **Creativity**: Excellent
86
+ **Potential**: High
87
+
88
+ ### Suggested Revision
89
+ Revise the text to correct spelling, grammar, and syntax while preserving the original creative narrative and imaginative elements.
@@ -3,6 +3,7 @@ Agent which demonstrates Human Input tool
3
3
  """
4
4
 
5
5
  import asyncio
6
+
6
7
  from mcp_agent.core.fastagent import FastAgent
7
8
 
8
9
  # Create the application
@@ -14,11 +15,11 @@ fast = FastAgent("Human Input")
14
15
  instruction="An AI agent that assists with basic tasks. Request Human Input when needed.",
15
16
  human_input=True,
16
17
  )
17
- async def main():
18
+ async def main() -> None:
18
19
  async with fast.run() as agent:
19
20
  # this usually causes the LLM to request the Human Input Tool
20
21
  await agent("print the next number in the sequence")
21
- await agent.prompt(default="STOP")
22
+ await agent.prompt(default_prompt="STOP")
22
23
 
23
24
 
24
25
  if __name__ == "__main__":
@@ -3,6 +3,7 @@ This demonstrates creating multiple agents and an orchestrator to coordinate the
3
3
  """
4
4
 
5
5
  import asyncio
6
+
6
7
  from mcp_agent.core.fastagent import FastAgent
7
8
 
8
9
  # Create the application
@@ -45,28 +46,23 @@ fast = FastAgent("Orchestrator-Workers")
45
46
  @fast.orchestrator(
46
47
  name="orchestrate",
47
48
  agents=["finder", "writer", "proofreader"],
48
- plan_type="iterative",
49
+ plan_type="full",
49
50
  )
50
- async def main():
51
+ async def main() -> None:
51
52
  async with fast.run() as agent:
52
- await agent()
53
53
  await agent.author(
54
54
  "write a 250 word short story about kittens discovering a castle, and save it to short_story.md"
55
55
  )
56
56
 
57
57
  # The orchestrator can be used just like any other agent
58
- task = (
59
- """Load the student's short story from short_story.md,
58
+ task = """Load the student's short story from short_story.md,
60
59
  and generate a report with feedback across proofreading,
61
60
  factuality/logical consistency and style adherence. Use the style rules from
62
61
  https://apastyle.apa.org/learn/quick-guide-on-formatting and
63
62
  https://apastyle.apa.org/learn/quick-guide-on-references.
64
- Write the graded report to graded_report.md in the same directory as short_story.md""",
65
- )
63
+ Write the graded report to graded_report.md in the same directory as short_story.md"""
66
64
 
67
- # Send the task
68
65
  await agent.orchestrate(task)
69
- await agent()
70
66
 
71
67
 
72
68
  if __name__ == "__main__":
@@ -3,33 +3,15 @@ Parallel Workflow showing Fan Out and Fan In agents, using different models
3
3
  """
4
4
 
5
5
  import asyncio
6
+ from pathlib import Path
7
+
6
8
  from mcp_agent.core.fastagent import FastAgent
9
+ from mcp_agent.core.prompt import Prompt
7
10
 
8
11
  # Create the application
9
12
  fast = FastAgent(
10
13
  "Parallel Workflow",
11
14
  )
12
- SHORT_STORY = """
13
- The Battle of Glimmerwood
14
-
15
- In the heart of Glimmerwood, a mystical forest knowed for its radiant trees, a small village thrived.
16
- The villagers, who were live peacefully, shared their home with the forest's magical creatures,
17
- especially the Glimmerfoxes whose fur shimmer like moonlight.
18
-
19
- One fateful evening, the peace was shaterred when the infamous Dark Marauders attack.
20
- Lead by the cunning Captain Thorn, the bandits aim to steal the precious Glimmerstones which was believed to grant immortality.
21
-
22
- Amidst the choas, a young girl named Elara stood her ground, she rallied the villagers and devised a clever plan.
23
- Using the forests natural defenses they lured the marauders into a trap.
24
- As the bandits aproached the village square, a herd of Glimmerfoxes emerged, blinding them with their dazzling light,
25
- the villagers seized the opportunity to captured the invaders.
26
-
27
- Elara's bravery was celebrated and she was hailed as the "Guardian of Glimmerwood".
28
- The Glimmerstones were secured in a hidden grove protected by an ancient spell.
29
-
30
- However, not all was as it seemed. The Glimmerstones true power was never confirm,
31
- and whispers of a hidden agenda linger among the villagers.
32
- """
33
15
 
34
16
 
35
17
  @fast.agent(
@@ -65,14 +47,12 @@ and whispers of a hidden agenda linger among the villagers.
65
47
  fan_in="grader",
66
48
  name="parallel",
67
49
  )
68
- async def main():
69
- # Use the app's context manager
50
+ async def main() -> None:
70
51
  async with fast.run() as agent:
71
- await agent.parallel(f"student short story submission: {SHORT_STORY}")
72
-
73
- # follow-on prompt to task agent
74
- await agent.style_enforcer.prompt(default_prompt="STOP")
52
+ await agent.parallel.send(
53
+ Prompt.user("Student short story submission", Path("short_story.txt"))
54
+ )
75
55
 
76
56
 
77
57
  if __name__ == "__main__":
78
- asyncio.run(main())
58
+ asyncio.run(main()) # type: ignore
@@ -6,6 +6,7 @@ Demonstrates router's ability to either:
6
6
  """
7
7
 
8
8
  import asyncio
9
+
9
10
  from mcp_agent.core.fastagent import FastAgent
10
11
 
11
12
  # Create the application
@@ -43,7 +44,7 @@ SAMPLE_REQUESTS = [
43
44
  model="sonnet",
44
45
  agents=["code_expert", "general_assistant", "fetcher"],
45
46
  )
46
- async def main():
47
+ async def main() -> None:
47
48
  async with fast.run() as agent:
48
49
  for request in SAMPLE_REQUESTS:
49
50
  await agent.route(request)
@@ -0,0 +1,13 @@
1
+ The Kittens Castle Adventuer
2
+
3
+ One sunny day, three lil kittens name Whiskers, Socks, and Mittens was walkin threw a mystirus forrest. They hadnt never seen such a big forrest before! The trees was tall an spooky, an the ground was coverd in moss an stikks.
4
+
5
+ Suddenlee, thru the trees, they sawd somthing HUUUUGE! It was a castell, but not just eny castell. This castell was made of sparkling chese an glittery windos. The turrits was so high they tuch the clowds, an the doars was big enuff for a elefant to walk threw!
6
+
7
+ "Lookk!" sed Whiskers, his tale all poofy wit exsitement. "We fowned a castell!" Socks meowed loudly an jumped up an down. Mittens, who was the smallist kitten, just stared wit her big rond eyes.
8
+
9
+ They climed up the cheesy walls, slip-slidin on the smoth surfase. Inside, they discoverd rooms ful of soft pillows an dangling strings an shiny things that went JINGEL when they tuch them. It was like a kitten paradyse!
10
+
11
+ But then, a big shadowy figur apeared... was it the castell gaurd? Or sumthing mor mystirus? The kittens hudeld togethar, there lil hearts beating fast. What wud happan next in there amazeing adventuer?
12
+
13
+ THE END??
@@ -0,0 +1,19 @@
1
+ The Battle of Glimmerwood
2
+
3
+ In the heart of Glimmerwood, a mystical forest knowed for its radiant trees, a small village thrived.
4
+ The villagers, who were live peacefully, shared their home with the forest's magical creatures,
5
+ especially the Glimmerfoxes whose fur shimmer like moonlight.
6
+
7
+ One fateful evening, the peace was shaterred when the infamous Dark Marauders attack.
8
+ Lead by the cunning Captain Thorn, the bandits aim to steal the precious Glimmerstones which was believed to grant immortality.
9
+
10
+ Amidst the choas, a young girl named Elara stood her ground, she rallied the villagers and devised a clever plan.
11
+ Using the forests natural defenses they lured the marauders into a trap.
12
+ As the bandits aproached the village square, a herd of Glimmerfoxes emerged, blinding them with their dazzling light,
13
+ the villagers seized the opportunity to captured the invaders.
14
+
15
+ Elara's bravery was celebrated and she was hailed as the "Guardian of Glimmerwood".
16
+ The Glimmerstones were secured in a hidden grove protected by an ancient spell.
17
+
18
+ However, not all was as it seemed. The Glimmerstones true power was never confirm,
19
+ and whispers of a hidden agenda linger among the villagers.
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "fast-agent-mcp"
3
- version = "0.1.12"
3
+ version = "0.2.0"
4
4
  description = "Define, Prompt and Test MCP enabled Agents and Workflows"
5
5
  readme = "README.md"
6
6
  license = { file = "LICENSE" }
@@ -16,7 +16,7 @@ classifiers = [
16
16
  requires-python = ">=3.10"
17
17
  dependencies = [
18
18
  "fastapi>=0.115.6",
19
- "mcp>=1.5.0",
19
+ "mcp==1.6.0",
20
20
  "opentelemetry-distro>=0.50b0",
21
21
  "opentelemetry-exporter-otlp-proto-http>=1.29.0",
22
22
  "pydantic-settings>=2.7.0",
@@ -39,9 +39,6 @@ temporal = [
39
39
  openai = [
40
40
  "openai>=1.58.1",
41
41
  ]
42
- cohere = [
43
- "cohere>=5.13.4",
44
- ]
45
42
  dev = [
46
43
  "anthropic>=0.42.0",
47
44
  "pre-commit>=4.0.1",
@@ -51,6 +48,7 @@ dev = [
51
48
  "tomli>=2.2.1",
52
49
  "pytest>=7.4.0",
53
50
  "pytest-asyncio>=0.21.1",
51
+ "pytest-cov",
54
52
  ]
55
53
 
56
54
  [build-system]
@@ -66,10 +64,14 @@ include = [
66
64
  "src/mcp_agent/**/*.yaml",
67
65
  "src/mcp_agent/**/*.yml",
68
66
  "src/mcp_agent/**/*.csv",
69
- "src/mcp_agent/resources/**/*.py",
70
- "src/mcp_agent/resources/**/*.yaml",
71
- "src/mcp_agent/resources/**/*.yml",
72
- "src/mcp_agent/resources/**/*.csv",
67
+ "examples/**/*.py",
68
+ "examples/**/*.yaml",
69
+ "examples/**/*.yml",
70
+ "examples/**/*.txt",
71
+ "examples/**/*.csv",
72
+ "examples/**/*.md",
73
+ "examples/**/*.css",
74
+ "examples/**/mount-point/*.csv",
73
75
  ]
74
76
 
75
77
  [tool.pytest.ini_options]
@@ -103,12 +105,21 @@ silsila = "mcp_agent.cli.__main__:app"
103
105
  prompt-server = "mcp_agent.mcp.prompts.__main__:main"
104
106
 
105
107
  [tool.setuptools.package-data]
106
- mcp_agent = [
107
- "data/*.json",
108
- "resources/examples/**/*.py",
109
- "resources/examples/**/*.yaml",
110
- "resources/examples/**/*.yml",
111
- "resources/examples/**/*.csv",
112
- "resources/examples/**/mount-point/*.csv"
108
+ mcp_agent = []
109
+
110
+ [tool.ruff]
111
+ line-length = 100
112
+ target-version = "py310"
113
+
114
+ [tool.ruff.lint]
115
+ select = [
116
+ "E", # pycodestyle errors
117
+ "F", # pyflakes
118
+ "I", # isort
119
+ "TCH" # type checking
113
120
  ]
121
+ ignore=["E501"]
114
122
 
123
+ # More lenient settings for existing code
124
+ [tool.ruff.lint.per-file-ignores]
125
+ "tests/*" = ["ANN"] # Don't require type annotations in tests
@@ -0,0 +1,75 @@
1
+ """fast-agent - (fast-agent-mcp) An MCP native agent application framework"""
2
+
3
+ # Import important MCP types
4
+ from mcp.types import (
5
+ CallToolResult,
6
+ EmbeddedResource,
7
+ GetPromptResult,
8
+ ImageContent,
9
+ Prompt,
10
+ PromptMessage,
11
+ ReadResourceResult,
12
+ Role,
13
+ TextContent,
14
+ Tool,
15
+ )
16
+
17
+ # Core agent components
18
+ from mcp_agent.agents.agent import Agent, AgentConfig
19
+ from mcp_agent.core.direct_agent_app import DirectAgentApp
20
+
21
+ # Workflow decorators
22
+ from mcp_agent.core.direct_decorators import (
23
+ agent,
24
+ chain,
25
+ evaluator_optimizer,
26
+ orchestrator,
27
+ parallel,
28
+ router,
29
+ )
30
+
31
+ # FastAgent components
32
+ from mcp_agent.core.fastagent import FastAgent
33
+
34
+ # Request configuration
35
+ from mcp_agent.core.request_params import RequestParams
36
+
37
+ # Core protocol interfaces
38
+ from mcp_agent.mcp.interfaces import AgentProtocol, AugmentedLLMProtocol
39
+ from mcp_agent.mcp.mcp_aggregator import MCPAggregator, MCPCompoundServer
40
+ from mcp_agent.mcp.prompt_message_multipart import PromptMessageMultipart
41
+
42
+ __all__ = [
43
+ # MCP types
44
+ "Prompt",
45
+ "Tool",
46
+ "CallToolResult",
47
+ "TextContent",
48
+ "ImageContent",
49
+ "PromptMessage",
50
+ "GetPromptResult",
51
+ "ReadResourceResult",
52
+ "EmbeddedResource",
53
+ "Role",
54
+ # Core protocols
55
+ "AgentProtocol",
56
+ "AugmentedLLMProtocol",
57
+ # Core agent components
58
+ "Agent",
59
+ "AgentConfig",
60
+ "MCPAggregator",
61
+ "MCPCompoundServer",
62
+ "PromptMessageMultipart",
63
+ # FastAgent components
64
+ "FastAgent",
65
+ "DirectAgentApp",
66
+ # Workflow decorators
67
+ "agent",
68
+ "orchestrator",
69
+ "router",
70
+ "chain",
71
+ "parallel",
72
+ "evaluator_optimizer",
73
+ # Request configuration
74
+ "RequestParams",
75
+ ]