fast-agent-mcp 0.2.10__tar.gz → 0.2.11__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.
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/.gitignore +2 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/PKG-INFO +7 -6
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/README.md +5 -5
- fast_agent_mcp-0.2.11/examples/mcp/state-transfer/agent_one.py +18 -0
- fast_agent_mcp-0.2.11/examples/mcp/state-transfer/agent_two.py +18 -0
- fast_agent_mcp-0.2.11/examples/mcp/state-transfer/fastagent.config.yaml +27 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/pyproject.toml +7 -2
- fast_agent_mcp-0.2.10/src/mcp_agent/cli/commands/bootstrap.py → fast_agent_mcp-0.2.11/src/mcp_agent/cli/commands/quickstart.py +88 -21
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/cli/commands/setup.py +8 -2
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/cli/main.py +8 -6
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/config.py +3 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/llm/providers/augmented_llm_generic.py +2 -2
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/llm/providers/augmented_llm_openrouter.py +2 -2
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/mcp/mcp_connection_manager.py +5 -1
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/mcp/prompt_serialization.py +62 -37
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/mcp/prompts/prompt_load.py +27 -27
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/mcp/prompts/prompt_server.py +50 -1
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/mcp_server/agent_server.py +6 -20
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/mcp_server_registry.py +5 -1
- fast_agent_mcp-0.2.11/src/mcp_agent/resources/examples/mcp/state-transfer/agent_one.py +18 -0
- fast_agent_mcp-0.2.11/src/mcp_agent/resources/examples/mcp/state-transfer/agent_two.py +18 -0
- fast_agent_mcp-0.2.11/src/mcp_agent/resources/examples/mcp/state-transfer/fastagent.config.yaml +27 -0
- fast_agent_mcp-0.2.11/src/mcp_agent/resources/examples/mcp/state-transfer/fastagent.secrets.yaml.example +14 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/LICENSE +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/examples/data-analysis/analysis-campaign.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/examples/data-analysis/analysis.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/examples/data-analysis/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/examples/data-analysis/mount-point/WA_Fn-UseC_-HR-Employee-Attrition.csv +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/examples/researcher/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/examples/researcher/researcher-eval.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/examples/researcher/researcher-imp.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/examples/researcher/researcher.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/examples/workflows/chaining.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/examples/workflows/evaluator.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/examples/workflows/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/examples/workflows/graded_report.md +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/examples/workflows/human_input.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/examples/workflows/orchestrator.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/examples/workflows/parallel.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/examples/workflows/router.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/examples/workflows/short_story.md +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/examples/workflows/short_story.txt +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/__init__.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/agents/__init__.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/agents/agent.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/agents/base_agent.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/agents/workflow/__init__.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/agents/workflow/chain_agent.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/agents/workflow/evaluator_optimizer.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/agents/workflow/orchestrator_agent.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/agents/workflow/orchestrator_models.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/agents/workflow/orchestrator_prompts.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/agents/workflow/parallel_agent.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/agents/workflow/router_agent.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/app.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/cli/__init__.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/cli/__main__.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/cli/commands/config.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/cli/terminal.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/console.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/context.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/context_dependent.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/core/__init__.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/core/agent_app.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/core/agent_types.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/core/direct_decorators.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/core/direct_factory.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/core/enhanced_prompt.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/core/error_handling.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/core/exceptions.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/core/fastagent.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/core/interactive_prompt.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/core/mcp_content.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/core/prompt.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/core/request_params.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/core/validation.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/event_progress.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/executor/__init__.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/executor/decorator_registry.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/executor/executor.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/executor/task_registry.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/executor/temporal.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/executor/workflow.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/executor/workflow_signal.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/human_input/__init__.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/human_input/handler.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/human_input/types.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/llm/__init__.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/llm/augmented_llm.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/llm/augmented_llm_passthrough.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/llm/augmented_llm_playback.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/llm/memory.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/llm/model_factory.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/llm/prompt_utils.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/llm/providers/__init__.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/llm/providers/anthropic_utils.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/llm/providers/augmented_llm_anthropic.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/llm/providers/augmented_llm_deepseek.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/llm/providers/augmented_llm_openai.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/llm/providers/multipart_converter_anthropic.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/llm/providers/multipart_converter_openai.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/llm/providers/openai_multipart.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/llm/providers/openai_utils.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/llm/providers/sampling_converter_anthropic.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/llm/providers/sampling_converter_openai.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/llm/sampling_converter.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/llm/sampling_format_converter.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/logging/__init__.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/logging/events.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/logging/json_serializer.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/logging/listeners.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/logging/logger.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/logging/rich_progress.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/logging/tracing.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/logging/transport.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/mcp/__init__.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/mcp/gen_client.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/mcp/helpers/__init__.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/mcp/helpers/content_helpers.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/mcp/interfaces.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/mcp/logger_textio.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/mcp/mcp_agent_client_session.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/mcp/mcp_aggregator.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/mcp/mime_utils.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/mcp/prompt_message_multipart.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/mcp/prompt_render.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/mcp/prompts/__init__.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/mcp/prompts/__main__.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/mcp/prompts/prompt_constants.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/mcp/prompts/prompt_helpers.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/mcp/prompts/prompt_template.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/mcp/resource_utils.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/mcp/sampling.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/mcp_server/__init__.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/progress_display.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/resources/examples/data-analysis/analysis-campaign.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/resources/examples/data-analysis/analysis.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/resources/examples/data-analysis/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/resources/examples/data-analysis/mount-point/WA_Fn-UseC_-HR-Employee-Attrition.csv +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/resources/examples/in_dev/agent_build.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/resources/examples/in_dev/css-LICENSE.txt +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/resources/examples/in_dev/slides.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/resources/examples/internal/agent.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/resources/examples/internal/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/resources/examples/internal/history_transfer.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/resources/examples/internal/job.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/resources/examples/internal/prompt_category.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/resources/examples/internal/prompt_sizing.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/resources/examples/internal/simple.txt +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/resources/examples/internal/sizer.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/resources/examples/internal/social.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/resources/examples/prompting/__init__.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/resources/examples/prompting/agent.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/resources/examples/prompting/delimited_prompt.txt +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/resources/examples/prompting/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/resources/examples/prompting/image_server.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/resources/examples/prompting/prompt1.txt +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/resources/examples/prompting/work_with_image.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/resources/examples/researcher/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/resources/examples/researcher/researcher-eval.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/resources/examples/researcher/researcher-imp.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/resources/examples/researcher/researcher.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/resources/examples/workflows/chaining.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/resources/examples/workflows/evaluator.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/resources/examples/workflows/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/resources/examples/workflows/human_input.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/resources/examples/workflows/orchestrator.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/resources/examples/workflows/parallel.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/resources/examples/workflows/router.py +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/resources/examples/workflows/short_story.txt +0 -0
- {fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/ui/console_display.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: fast-agent-mcp
|
3
|
-
Version: 0.2.
|
3
|
+
Version: 0.2.11
|
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
|
@@ -209,6 +209,7 @@ Classifier: License :: OSI Approved :: Apache Software License
|
|
209
209
|
Classifier: Operating System :: OS Independent
|
210
210
|
Classifier: Programming Language :: Python :: 3
|
211
211
|
Requires-Python: >=3.10
|
212
|
+
Requires-Dist: a2a-types>=0.1.0
|
212
213
|
Requires-Dist: aiohttp>=3.11.13
|
213
214
|
Requires-Dist: anthropic>=0.49.0
|
214
215
|
Requires-Dist: fastapi>=0.115.6
|
@@ -252,7 +253,7 @@ Description-Content-Type: text/markdown
|
|
252
253
|
## Overview
|
253
254
|
|
254
255
|
> [!TIP]
|
255
|
-
> Documentation site is in production here : https://fast-agent.ai. Feel free to feed back what's helpful and what's not.
|
256
|
+
> Documentation site is in production here : https://fast-agent.ai. Feel free to feed back what's helpful and what's not. llms.txt link is here: https://fast-agent.ai/llms.txt
|
256
257
|
|
257
258
|
**`fast-agent`** enables you to create and interact with sophisticated Agents and Workflows in minutes. It is the first framework with complete, end-to-end tested MCP Feature support including Sampling. Both Anthropic (Haiku, Sonnet, Opus) and OpenAI models (gpt-4o family, o1/o3 family) are supported.
|
258
259
|
|
@@ -282,10 +283,10 @@ uv pip install fast-agent-mcp # install fast-agent!
|
|
282
283
|
fast-agent setup # create an example agent and config files
|
283
284
|
uv run agent.py # run your first agent
|
284
285
|
uv run agent.py --model=o3-mini.low # specify a model
|
285
|
-
fast-agent
|
286
|
+
fast-agent quickstart workflow # create "building effective agents" examples
|
286
287
|
```
|
287
288
|
|
288
|
-
Other
|
289
|
+
Other quickstart examples include a Researcher Agent (with Evaluator-Optimizer workflow) and Data Analysis Agent (similar to the ChatGPT experience), demonstrating MCP Roots support.
|
289
290
|
|
290
291
|
> [!TIP]
|
291
292
|
> Windows Users - there are a couple of configuration changes needed for the Filesystem and Docker MCP Servers - necessary changes are detailed within the configuration files.
|
@@ -341,7 +342,7 @@ Specify a model with the `--model` switch - for example `uv run sizer.py --model
|
|
341
342
|
|
342
343
|
### Combining Agents and using MCP Servers
|
343
344
|
|
344
|
-
_To generate examples use `fast-agent
|
345
|
+
_To generate examples use `fast-agent quickstart workflow`. This example can be run with `uv run workflow/chaining.py`. fast-agent looks for configuration files in the current directory before checking parent directories recursively._
|
345
346
|
|
346
347
|
Agents can be chained to build a workflow, using MCP Servers defined in the `fastagent.config.yaml` file:
|
347
348
|
|
@@ -463,7 +464,7 @@ async with fast.run() as agent:
|
|
463
464
|
|
464
465
|
When used in a workflow, it returns the last `generator` message as the result.
|
465
466
|
|
466
|
-
See the `evaluator.py` workflow example, or `fast-agent
|
467
|
+
See the `evaluator.py` workflow example, or `fast-agent quickstart researcher` for a more complete example.
|
467
468
|
|
468
469
|
### Router
|
469
470
|
|
@@ -10,7 +10,7 @@
|
|
10
10
|
## Overview
|
11
11
|
|
12
12
|
> [!TIP]
|
13
|
-
> Documentation site is in production here : https://fast-agent.ai. Feel free to feed back what's helpful and what's not.
|
13
|
+
> Documentation site is in production here : https://fast-agent.ai. Feel free to feed back what's helpful and what's not. llms.txt link is here: https://fast-agent.ai/llms.txt
|
14
14
|
|
15
15
|
**`fast-agent`** enables you to create and interact with sophisticated Agents and Workflows in minutes. It is the first framework with complete, end-to-end tested MCP Feature support including Sampling. Both Anthropic (Haiku, Sonnet, Opus) and OpenAI models (gpt-4o family, o1/o3 family) are supported.
|
16
16
|
|
@@ -40,10 +40,10 @@ uv pip install fast-agent-mcp # install fast-agent!
|
|
40
40
|
fast-agent setup # create an example agent and config files
|
41
41
|
uv run agent.py # run your first agent
|
42
42
|
uv run agent.py --model=o3-mini.low # specify a model
|
43
|
-
fast-agent
|
43
|
+
fast-agent quickstart workflow # create "building effective agents" examples
|
44
44
|
```
|
45
45
|
|
46
|
-
Other
|
46
|
+
Other quickstart examples include a Researcher Agent (with Evaluator-Optimizer workflow) and Data Analysis Agent (similar to the ChatGPT experience), demonstrating MCP Roots support.
|
47
47
|
|
48
48
|
> [!TIP]
|
49
49
|
> Windows Users - there are a couple of configuration changes needed for the Filesystem and Docker MCP Servers - necessary changes are detailed within the configuration files.
|
@@ -99,7 +99,7 @@ Specify a model with the `--model` switch - for example `uv run sizer.py --model
|
|
99
99
|
|
100
100
|
### Combining Agents and using MCP Servers
|
101
101
|
|
102
|
-
_To generate examples use `fast-agent
|
102
|
+
_To generate examples use `fast-agent quickstart workflow`. This example can be run with `uv run workflow/chaining.py`. fast-agent looks for configuration files in the current directory before checking parent directories recursively._
|
103
103
|
|
104
104
|
Agents can be chained to build a workflow, using MCP Servers defined in the `fastagent.config.yaml` file:
|
105
105
|
|
@@ -221,7 +221,7 @@ async with fast.run() as agent:
|
|
221
221
|
|
222
222
|
When used in a workflow, it returns the last `generator` message as the result.
|
223
223
|
|
224
|
-
See the `evaluator.py` workflow example, or `fast-agent
|
224
|
+
See the `evaluator.py` workflow example, or `fast-agent quickstart researcher` for a more complete example.
|
225
225
|
|
226
226
|
### Router
|
227
227
|
|
@@ -0,0 +1,18 @@
|
|
1
|
+
import asyncio
|
2
|
+
|
3
|
+
from mcp_agent.core.fastagent import FastAgent
|
4
|
+
|
5
|
+
# Create the application
|
6
|
+
fast = FastAgent("fast-agent agent_one (mcp server)")
|
7
|
+
|
8
|
+
|
9
|
+
# Define the agent
|
10
|
+
@fast.agent(name="agent_one", instruction="You are a helpful AI Agent.")
|
11
|
+
async def main():
|
12
|
+
# use the --model command line switch or agent arguments to change model
|
13
|
+
async with fast.run() as agent:
|
14
|
+
await agent.interactive()
|
15
|
+
|
16
|
+
|
17
|
+
if __name__ == "__main__":
|
18
|
+
asyncio.run(main())
|
@@ -0,0 +1,18 @@
|
|
1
|
+
import asyncio
|
2
|
+
|
3
|
+
from mcp_agent.core.fastagent import FastAgent
|
4
|
+
|
5
|
+
# Create the application
|
6
|
+
fast = FastAgent("fast-agent agent_two (mcp client)")
|
7
|
+
|
8
|
+
|
9
|
+
# Define the agent
|
10
|
+
@fast.agent(name="agent_two", instruction="You are a helpful AI Agent.", servers=["agent_one"])
|
11
|
+
async def main():
|
12
|
+
# use the --model command line switch or agent arguments to change model
|
13
|
+
async with fast.run() as agent:
|
14
|
+
await agent.interactive()
|
15
|
+
|
16
|
+
|
17
|
+
if __name__ == "__main__":
|
18
|
+
asyncio.run(main())
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# Model string takes format:
|
2
|
+
# <provider>.<model_string>.<reasoning_effort?> (e.g. anthropic.claude-3-5-sonnet-20241022 or openai.o3-mini.low)
|
3
|
+
#
|
4
|
+
# Can be overriden with a command line switch --model=<model>, or within the Agent decorator.
|
5
|
+
# Check here for current details: https://fast-agent.ai/models/
|
6
|
+
|
7
|
+
# set the default model for fast-agent below:
|
8
|
+
default_model: gpt-4o
|
9
|
+
|
10
|
+
# Logging and Console Configuration:
|
11
|
+
logger:
|
12
|
+
# Switched off to avoid polluting the console
|
13
|
+
progress_display: false
|
14
|
+
|
15
|
+
# Show chat User/Assistant messages on the console
|
16
|
+
show_chat: true
|
17
|
+
# Show tool calls on the console
|
18
|
+
show_tools: true
|
19
|
+
# Truncate long tool responses on the console
|
20
|
+
truncate_tools: true
|
21
|
+
|
22
|
+
# MCP Servers
|
23
|
+
mcp:
|
24
|
+
servers:
|
25
|
+
agent_one:
|
26
|
+
transport: sse
|
27
|
+
url: http://localhost:8001/sse
|
@@ -1,6 +1,6 @@
|
|
1
1
|
[project]
|
2
2
|
name = "fast-agent-mcp"
|
3
|
-
version = "0.2.
|
3
|
+
version = "0.2.11"
|
4
4
|
description = "Define, Prompt and Test MCP enabled Agents and Workflows"
|
5
5
|
readme = "README.md"
|
6
6
|
license = { file = "LICENSE" }
|
@@ -30,6 +30,7 @@ dependencies = [
|
|
30
30
|
"openai>=1.63.2",
|
31
31
|
"prompt-toolkit>=3.0.50",
|
32
32
|
"aiohttp>=3.11.13",
|
33
|
+
"a2a-types>=0.1.0",
|
33
34
|
]
|
34
35
|
|
35
36
|
[project.optional-dependencies]
|
@@ -65,6 +66,7 @@ include = [
|
|
65
66
|
"src/mcp_agent/**/*.yml",
|
66
67
|
"src/mcp_agent/**/*.csv",
|
67
68
|
"src/mcp_agent/**/*.txt",
|
69
|
+
"src/mcp_agent/**/*.example",
|
68
70
|
"examples/**/*.py",
|
69
71
|
"examples/**/*.yaml",
|
70
72
|
"examples/**/*.yml",
|
@@ -74,6 +76,9 @@ include = [
|
|
74
76
|
"examples/**/*.css",
|
75
77
|
"examples/**/mount-point/*.csv",
|
76
78
|
"examples/workflows/short_story.txt",
|
79
|
+
"examples/mcp/**/*.py",
|
80
|
+
"examples/mcp/**/*.yaml",
|
81
|
+
"examples/mcp/**/*.example",
|
77
82
|
]
|
78
83
|
|
79
84
|
[tool.pytest.ini_options]
|
@@ -97,11 +102,11 @@ dev = [
|
|
97
102
|
"tomli>=2.2.1",
|
98
103
|
"pytest>=7.4.0",
|
99
104
|
"pytest-asyncio>=0.21.1",
|
105
|
+
"pytest-cov>=6.1.1",
|
100
106
|
]
|
101
107
|
|
102
108
|
[project.scripts]
|
103
109
|
fast-agent = "mcp_agent.cli.__main__:app"
|
104
|
-
fast_agent = "mcp_agent.cli.__main__:app"
|
105
110
|
fastagent = "mcp_agent.cli.__main__:app"
|
106
111
|
silsila = "mcp_agent.cli.__main__:app"
|
107
112
|
prompt-server = "mcp_agent.mcp.prompts.__main__:main"
|
@@ -47,6 +47,18 @@ EXAMPLE_TYPES = {
|
|
47
47
|
"mount_point_files": ["WA_Fn-UseC_-HR-Employee-Attrition.csv"],
|
48
48
|
"create_subdir": True,
|
49
49
|
},
|
50
|
+
"state-transfer": {
|
51
|
+
"description": "Example demonstrating state transfer between multiple agents.\n"
|
52
|
+
"Shows how state can be passed between agent runs to maintain context.\n"
|
53
|
+
"Creates examples in a 'state-transfer' subdirectory.",
|
54
|
+
"files": [
|
55
|
+
"agent_one.py",
|
56
|
+
"agent_two.py",
|
57
|
+
"fastagent.config.yaml",
|
58
|
+
"fastagent.secrets.yaml.example",
|
59
|
+
],
|
60
|
+
"create_subdir": True,
|
61
|
+
},
|
50
62
|
}
|
51
63
|
|
52
64
|
|
@@ -75,28 +87,54 @@ def copy_example_files(example_type: str, target_dir: Path, force: bool = False)
|
|
75
87
|
|
76
88
|
try:
|
77
89
|
# First try to find examples in the package resources
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
90
|
+
if example_type == "state-transfer":
|
91
|
+
# The state-transfer example is in the mcp subdirectory
|
92
|
+
source_dir = (
|
93
|
+
files("mcp_agent")
|
94
|
+
.joinpath("resources")
|
95
|
+
.joinpath("examples")
|
96
|
+
.joinpath("mcp")
|
97
|
+
.joinpath("state-transfer")
|
98
|
+
)
|
99
|
+
else:
|
100
|
+
# Other examples are at the top level of examples
|
101
|
+
source_dir = (
|
102
|
+
files("mcp_agent")
|
103
|
+
.joinpath("resources")
|
104
|
+
.joinpath("examples")
|
105
|
+
.joinpath("workflows" if example_type == "workflow" else f"{example_type}")
|
106
|
+
)
|
107
|
+
|
108
|
+
# Check if we found a valid directory
|
84
109
|
if not source_dir.is_dir():
|
110
|
+
console.print(
|
111
|
+
f"[yellow]Resource directory not found: {source_dir}. Falling back to development mode.[/yellow]"
|
112
|
+
)
|
85
113
|
# Fall back to the top-level directory for development mode
|
86
114
|
package_dir = Path(__file__).parent.parent.parent.parent.parent
|
115
|
+
if example_type == "state-transfer":
|
116
|
+
source_dir = package_dir / "examples" / "mcp" / "state-transfer"
|
117
|
+
else:
|
118
|
+
source_dir = (
|
119
|
+
package_dir
|
120
|
+
/ "examples"
|
121
|
+
/ ("workflows" if example_type == "workflow" else f"{example_type}")
|
122
|
+
)
|
123
|
+
console.print(f"[blue]Using development directory: {source_dir}[/blue]")
|
124
|
+
except (ImportError, ModuleNotFoundError, ValueError) as e:
|
125
|
+
console.print(
|
126
|
+
f"[yellow]Error accessing resources: {e}. Falling back to development mode.[/yellow]"
|
127
|
+
)
|
128
|
+
# Fall back to the top-level directory if the resource finding fails
|
129
|
+
package_dir = Path(__file__).parent.parent.parent.parent.parent
|
130
|
+
if example_type == "state-transfer":
|
131
|
+
source_dir = package_dir / "examples" / "mcp" / "state-transfer"
|
132
|
+
else:
|
87
133
|
source_dir = (
|
88
134
|
package_dir
|
89
135
|
/ "examples"
|
90
136
|
/ ("workflows" if example_type == "workflow" else f"{example_type}")
|
91
137
|
)
|
92
|
-
except (ImportError, ModuleNotFoundError, ValueError):
|
93
|
-
# Fall back to the top-level directory if the resource finding fails
|
94
|
-
package_dir = Path(__file__).parent.parent.parent.parent.parent
|
95
|
-
source_dir = (
|
96
|
-
package_dir
|
97
|
-
/ "examples"
|
98
|
-
/ ("workflows" if example_type == "workflow" else f"{example_type}")
|
99
|
-
)
|
100
138
|
|
101
139
|
if not source_dir.exists():
|
102
140
|
console.print(f"[red]Error: Source directory not found: {source_dir}[/red]")
|
@@ -116,7 +154,14 @@ def copy_example_files(example_type: str, target_dir: Path, force: bool = False)
|
|
116
154
|
continue
|
117
155
|
|
118
156
|
shutil.copy2(source, target)
|
119
|
-
|
157
|
+
try:
|
158
|
+
# This can fail in test environments where the target is not relative to target_dir.parent
|
159
|
+
rel_path = str(target.relative_to(target_dir.parent))
|
160
|
+
except ValueError:
|
161
|
+
# Fallback to just the filename
|
162
|
+
rel_path = f"{example_type}/{filename}"
|
163
|
+
|
164
|
+
created.append(rel_path)
|
120
165
|
console.print(f"[green]Created[/green] {created[-1]}")
|
121
166
|
|
122
167
|
except Exception as e:
|
@@ -174,15 +219,17 @@ def show_overview() -> None:
|
|
174
219
|
# Show usage instructions in a panel
|
175
220
|
usage_text = (
|
176
221
|
"[bold]Commands:[/bold]\n"
|
177
|
-
" fastagent
|
178
|
-
" fastagent
|
179
|
-
" fastagent
|
222
|
+
" fastagent quickstart workflow DIR Create workflow examples in DIR\n"
|
223
|
+
" fastagent quickstart researcher DIR Create researcher example in 'researcher' subdirectory\n"
|
224
|
+
" fastagent quickstart data-analysis DIR Create data analysis examples in 'data-analysis' subdirectory\n"
|
225
|
+
" fastagent quickstart state-transfer DIR Create state transfer examples in 'state-transfer' subdirectory\n\n"
|
180
226
|
"[bold]Options:[/bold]\n"
|
181
227
|
" --force Overwrite existing files\n\n"
|
182
228
|
"[bold]Examples:[/bold]\n"
|
183
|
-
" fastagent
|
184
|
-
" fastagent
|
185
|
-
" fastagent
|
229
|
+
" fastagent quickstart workflow . Create in current directory\n"
|
230
|
+
" fastagent quickstart researcher . Create in researcher subdirectory\n"
|
231
|
+
" fastagent quickstart data-analysis . --force Force overwrite files in data-analysis subdirectory\n"
|
232
|
+
" fastagent quickstart state-transfer . Create state transfer examples"
|
186
233
|
)
|
187
234
|
console.print(Panel(usage_text, title="Usage", border_style="blue"))
|
188
235
|
|
@@ -241,6 +288,24 @@ def data_analysis(
|
|
241
288
|
_show_completion_message("data-analysis", created)
|
242
289
|
|
243
290
|
|
291
|
+
@app.command()
|
292
|
+
def state_transfer(
|
293
|
+
directory: Path = typer.Argument(
|
294
|
+
Path("."),
|
295
|
+
help="Directory where state transfer examples will be created (in 'state-transfer' subdirectory)",
|
296
|
+
),
|
297
|
+
force: bool = typer.Option(False, "--force", "-f", help="Force overwrite existing files"),
|
298
|
+
) -> None:
|
299
|
+
"""Create state transfer example showing state passing between agents."""
|
300
|
+
target_dir = directory.resolve()
|
301
|
+
if not target_dir.exists():
|
302
|
+
target_dir.mkdir(parents=True)
|
303
|
+
console.print(f"Created directory: {target_dir}")
|
304
|
+
|
305
|
+
created = copy_example_files("state-transfer", target_dir, force)
|
306
|
+
_show_completion_message("state-transfer", created)
|
307
|
+
|
308
|
+
|
244
309
|
def _show_completion_message(example_type: str, created: list[str]) -> None:
|
245
310
|
"""Show completion message and next steps."""
|
246
311
|
if created:
|
@@ -275,6 +340,8 @@ def _show_completion_message(example_type: str, created: list[str]) -> None:
|
|
275
340
|
console.print(
|
276
341
|
"On Windows platforms, please edit the fastagent.config.yaml and adjust the volume mount point."
|
277
342
|
)
|
343
|
+
elif example_type == "state-transfer":
|
344
|
+
console.print("Check https://fast-agent.ai for quick start walkthroughs")
|
278
345
|
else:
|
279
346
|
console.print("\n[yellow]No files were created.[/yellow]")
|
280
347
|
|
@@ -55,12 +55,18 @@ FASTAGENT_SECRETS_TEMPLATE = """
|
|
55
55
|
# FastAgent Secrets Configuration
|
56
56
|
# WARNING: Keep this file secure and never commit to version control
|
57
57
|
|
58
|
-
# Alternatively set OPENAI_API_KEY
|
58
|
+
# Alternatively set OPENAI_API_KEY, ANTHROPIC_API_KEY or other environment variables.
|
59
|
+
# Keys in the configuration file override environment variables.
|
59
60
|
|
60
61
|
openai:
|
61
62
|
api_key: <your-api-key-here>
|
62
63
|
anthropic:
|
63
64
|
api_key: <your-api-key-here>
|
65
|
+
deepseek:
|
66
|
+
api_key: <your-api-key-here>
|
67
|
+
openrouter:
|
68
|
+
api_key: <your-api-key-here>
|
69
|
+
|
64
70
|
|
65
71
|
# Example of setting an MCP Server environment variable
|
66
72
|
mcp:
|
@@ -116,7 +122,7 @@ import asyncio
|
|
116
122
|
from mcp_agent.core.fastagent import FastAgent
|
117
123
|
|
118
124
|
# Create the application
|
119
|
-
fast = FastAgent("
|
125
|
+
fast = FastAgent("fast-agent example")
|
120
126
|
|
121
127
|
|
122
128
|
# Define the agent
|
@@ -4,7 +4,7 @@ import typer
|
|
4
4
|
from rich.console import Console
|
5
5
|
from rich.table import Table
|
6
6
|
|
7
|
-
from mcp_agent.cli.commands import
|
7
|
+
from mcp_agent.cli.commands import quickstart, setup
|
8
8
|
from mcp_agent.cli.terminal import Application
|
9
9
|
|
10
10
|
app = typer.Typer(
|
@@ -14,7 +14,8 @@ app = typer.Typer(
|
|
14
14
|
|
15
15
|
# Subcommands
|
16
16
|
app.add_typer(setup.app, name="setup", help="Set up a new agent project")
|
17
|
-
app.add_typer(
|
17
|
+
app.add_typer(quickstart.app, name="bootstrap", help="Create example applications")
|
18
|
+
app.add_typer(quickstart.app, name="quickstart", help="Create example applications")
|
18
19
|
|
19
20
|
# Shared application context
|
20
21
|
application = Application()
|
@@ -39,7 +40,7 @@ def show_welcome() -> None:
|
|
39
40
|
table.add_column("Description")
|
40
41
|
|
41
42
|
table.add_row("setup", "Set up a new agent project with configuration files")
|
42
|
-
table.add_row("
|
43
|
+
table.add_row("quickstart", "Create example applications (workflow, researcher, etc.)")
|
43
44
|
# table.add_row("config", "Manage agent configuration settings")
|
44
45
|
|
45
46
|
console.print(table)
|
@@ -48,12 +49,12 @@ def show_welcome() -> None:
|
|
48
49
|
console.print("1. Set up a new project:")
|
49
50
|
console.print(" fastagent setup")
|
50
51
|
console.print("\n2. Create Building Effective Agents workflow examples:")
|
51
|
-
console.print(" fastagent
|
52
|
+
console.print(" fastagent quickstart workflow")
|
52
53
|
console.print("\n3. Explore other examples:")
|
53
|
-
console.print(" fastagent
|
54
|
+
console.print(" fastagent quickstart")
|
54
55
|
|
55
56
|
console.print("\nUse --help with any command for more information")
|
56
|
-
console.print("Example: fastagent
|
57
|
+
console.print("Example: fastagent quickstart --help")
|
57
58
|
|
58
59
|
|
59
60
|
@app.callback(invoke_without_command=True)
|
@@ -74,6 +75,7 @@ def main(
|
|
74
75
|
# Handle version flag
|
75
76
|
if version:
|
76
77
|
from importlib.metadata import version as get_version
|
78
|
+
|
77
79
|
try:
|
78
80
|
app_version = get_version("fast-agent-mcp")
|
79
81
|
except: # noqa: E722
|
@@ -70,6 +70,9 @@ class MCPServerSettings(BaseModel):
|
|
70
70
|
"""The arguments for the server command."""
|
71
71
|
|
72
72
|
read_timeout_seconds: int | None = None
|
73
|
+
"""The timeout in seconds for the session."""
|
74
|
+
|
75
|
+
read_transport_sse_timeout_seconds: int = 300
|
73
76
|
"""The timeout in seconds for the server connection."""
|
74
77
|
|
75
78
|
url: str | None = None
|
{fast_agent_mcp-0.2.10 → fast_agent_mcp-0.2.11}/src/mcp_agent/llm/providers/augmented_llm_generic.py
RENAMED
@@ -40,8 +40,8 @@ class GenericAugmentedLLM(OpenAIAugmentedLLM):
|
|
40
40
|
return api_key or "ollama"
|
41
41
|
|
42
42
|
def _base_url(self) -> str:
|
43
|
-
base_url =
|
43
|
+
base_url = os.getenv("GENERIC_BASE_URL", DEFAULT_OLLAMA_BASE_URL)
|
44
44
|
if self.context.config and self.context.config.generic:
|
45
45
|
base_url = self.context.config.generic.base_url
|
46
46
|
|
47
|
-
return base_url
|
47
|
+
return base_url
|
@@ -4,7 +4,7 @@ from mcp_agent.core.exceptions import ProviderKeyError
|
|
4
4
|
from mcp_agent.core.request_params import RequestParams
|
5
5
|
from mcp_agent.llm.providers.augmented_llm_openai import OpenAIAugmentedLLM
|
6
6
|
|
7
|
-
|
7
|
+
DEFAULT_OPENROUTER_BASE_URL = "https://openrouter.ai/api/v1"
|
8
8
|
# No single default model for OpenRouter, users must specify full path
|
9
9
|
DEFAULT_OPENROUTER_MODEL = None
|
10
10
|
|
@@ -63,7 +63,7 @@ class OpenRouterAugmentedLLM(OpenAIAugmentedLLM):
|
|
63
63
|
|
64
64
|
def _base_url(self) -> str:
|
65
65
|
"""Retrieve the OpenRouter base URL from config or use the default."""
|
66
|
-
base_url = OPENROUTER_BASE_URL # Default
|
66
|
+
base_url = os.getenv("OPENROUTER_BASE_URL", DEFAULT_OPENROUTER_BASE_URL) # Default
|
67
67
|
config = self.context.config
|
68
68
|
|
69
69
|
# Check config file for override
|
@@ -271,7 +271,11 @@ class MCPConnectionManager(ContextDependent):
|
|
271
271
|
logger.debug(f"{server_name}: Creating stdio client with custom error handler")
|
272
272
|
return stdio_client(server_params, errlog=error_handler)
|
273
273
|
elif config.transport == "sse":
|
274
|
-
return sse_client(
|
274
|
+
return sse_client(
|
275
|
+
config.url,
|
276
|
+
config.headers,
|
277
|
+
sse_read_timeout=config.read_transport_sse_timeout_seconds,
|
278
|
+
)
|
275
279
|
else:
|
276
280
|
raise ValueError(f"Unsupported transport: {config.transport}")
|
277
281
|
|