fast-agent-mcp 0.3.4__tar.gz → 0.3.6__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.
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/PKG-INFO +39 -2
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/README.md +36 -0
- {fast_agent_mcp-0.3.4/src/fast_agent/resources → fast_agent_mcp-0.3.6/examples}/setup/.gitignore +6 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/setup/agent.py +8 -1
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/setup/fastagent.config.yaml +1 -2
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/setup/pyproject.toml.tmpl +6 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/pyproject.toml +3 -2
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/agents/llm_agent.py +15 -1
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/agents/mcp_agent.py +73 -1
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/agents/tool_agent.py +10 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/agents/workflow/router_agent.py +10 -2
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/cli/__main__.py +8 -5
- fast_agent_mcp-0.3.6/src/fast_agent/cli/commands/auth.py +393 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/cli/commands/check_config.py +76 -4
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/cli/commands/go.py +8 -2
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/cli/commands/quickstart.py +3 -1
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/cli/commands/server_helpers.py +10 -2
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/cli/commands/setup.py +7 -9
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/cli/constants.py +1 -1
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/cli/main.py +3 -1
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/config.py +63 -9
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/mcp/mcp_aggregator.py +30 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/mcp/mcp_connection_manager.py +41 -4
- fast_agent_mcp-0.3.6/src/fast_agent/mcp/oauth_client.py +509 -0
- {fast_agent_mcp-0.3.4/examples → fast_agent_mcp-0.3.6/src/fast_agent/resources}/setup/.gitignore +6 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/setup/agent.py +8 -1
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/setup/fastagent.config.yaml +1 -2
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/setup/pyproject.toml.tmpl +6 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/ui/console_display.py +48 -31
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/ui/enhanced_prompt.py +8 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/ui/interactive_prompt.py +54 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/.gitignore +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/LICENSE +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/azure-openai/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/bedrock/fast-agent.config.yaml +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/custom-agents/agent.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/custom-agents/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/data-analysis/analysis-campaign.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/data-analysis/analysis.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/data-analysis/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/data-analysis/mount-point/WA_Fn-UseC_-HR-Employee-Attrition.csv +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/fastapi/fastapi-advanced.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/fastapi/fastapi-simple.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/fastapi/pyproject.toml +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/fastapi/readme.md +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/mcp/elicitations/elicitation_account_server.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/mcp/elicitations/elicitation_forms_server.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/mcp/elicitations/elicitation_game_server.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/mcp/elicitations/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/mcp/elicitations/fastagent.secrets.yaml.example +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/mcp/elicitations/forms_demo.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/mcp/elicitations/game_character.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/mcp/elicitations/game_character_handler.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/mcp/elicitations/tool_call.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/mcp/mcp-filtering/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/mcp/mcp-filtering/fastagent.secrets.yaml.example +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/mcp/mcp-filtering/mcp_server.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/mcp/mcp-filtering/test_mcp_filtering.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/mcp/state-transfer/agent_one.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/mcp/state-transfer/agent_two.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/mcp/state-transfer/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/mcp/state-transfer/fastagent.secrets.yaml.example +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/mcp/vision-examples/cat.png +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/mcp/vision-examples/example1.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/mcp/vision-examples/example2.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/mcp/vision-examples/example3.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/mcp/vision-examples/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/new-api/display_check.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/new-api/simple_llm.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/new-api/simple_llm_advanced.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/new-api/simple_mcp.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/otel/agent.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/otel/agent2.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/otel/docker-compose.yaml +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/otel/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/researcher/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/researcher/researcher-eval.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/researcher/researcher-imp.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/researcher/researcher.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/setup/fastagent.secrets.yaml.example +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/tensorzero/.env.sample +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/tensorzero/Makefile +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/tensorzero/README.md +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/tensorzero/agent.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/tensorzero/demo_images/clam.jpg +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/tensorzero/demo_images/crab.png +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/tensorzero/demo_images/shrimp.png +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/tensorzero/docker-compose.yml +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/tensorzero/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/tensorzero/image_demo.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/tensorzero/mcp_server/Dockerfile +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/tensorzero/mcp_server/entrypoint.sh +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/tensorzero/mcp_server/mcp_server.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/tensorzero/mcp_server/pyproject.toml +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/tensorzero/simple_agent.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/tensorzero/tensorzero_config/system_schema.json +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/tensorzero/tensorzero_config/system_template.minijinja +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/tensorzero/tensorzero_config/tensorzero.toml +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/workflows/chaining.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/workflows/evaluator.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/workflows/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/workflows/graded_report.md +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/workflows/human_input.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/workflows/orchestrator.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/workflows/parallel.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/workflows/router.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/workflows/short_story.md +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/examples/workflows/short_story.txt +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/hatch_build.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/__init__.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/agents/__init__.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/agents/agent_types.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/agents/llm_decorator.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/agents/workflow/chain_agent.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/agents/workflow/evaluator_optimizer.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/agents/workflow/iterative_planner.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/agents/workflow/orchestrator_models.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/agents/workflow/orchestrator_prompts.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/agents/workflow/parallel_agent.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/cli/__init__.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/cli/commands/url_parser.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/cli/terminal.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/constants.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/context.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/context_dependent.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/core/__init__.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/core/agent_app.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/core/core_app.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/core/direct_decorators.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/core/direct_factory.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/core/error_handling.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/core/exceptions.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/core/executor/__init__.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/core/executor/executor.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/core/executor/task_registry.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/core/executor/workflow_signal.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/core/fastagent.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/core/logging/__init__.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/core/logging/events.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/core/logging/json_serializer.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/core/logging/listeners.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/core/logging/logger.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/core/logging/transport.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/core/prompt.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/core/validation.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/event_progress.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/history/history_exporter.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/human_input/__init__.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/human_input/elicitation_handler.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/human_input/elicitation_state.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/human_input/form_fields.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/human_input/simple_form.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/human_input/types.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/interfaces.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/llm/__init__.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/llm/fastagent_llm.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/llm/internal/passthrough.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/llm/internal/playback.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/llm/internal/silent.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/llm/internal/slow.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/llm/memory.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/llm/model_database.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/llm/model_factory.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/llm/model_info.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/llm/prompt_utils.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/llm/provider/anthropic/anthropic_utils.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/llm/provider/anthropic/llm_anthropic.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/llm/provider/anthropic/multipart_converter_anthropic.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/llm/provider/bedrock/bedrock_utils.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/llm/provider/bedrock/llm_bedrock.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/llm/provider/google/google_converter.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/llm/provider/google/llm_google_native.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/llm/provider/openai/llm_aliyun.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/llm/provider/openai/llm_azure.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/llm/provider/openai/llm_deepseek.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/llm/provider/openai/llm_generic.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/llm/provider/openai/llm_google_oai.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/llm/provider/openai/llm_groq.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/llm/provider/openai/llm_openai.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/llm/provider/openai/llm_openrouter.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/llm/provider/openai/llm_tensorzero_openai.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/llm/provider/openai/llm_xai.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/llm/provider/openai/multipart_converter_openai.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/llm/provider/openai/openai_multipart.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/llm/provider/openai/openai_utils.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/llm/provider_key_manager.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/llm/provider_types.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/llm/request_params.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/llm/sampling_converter.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/llm/usage_tracking.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/mcp/__init__.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/mcp/common.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/mcp/elicitation_factory.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/mcp/elicitation_handlers.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/mcp/gen_client.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/mcp/helpers/__init__.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/mcp/helpers/content_helpers.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/mcp/helpers/server_config_helpers.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/mcp/hf_auth.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/mcp/interfaces.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/mcp/logger_textio.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/mcp/mcp_agent_client_session.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/mcp/mcp_content.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/mcp/mime_utils.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/mcp/prompt.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/mcp/prompt_message_extended.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/mcp/prompt_render.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/mcp/prompt_serialization.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/mcp/prompts/__init__.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/mcp/prompts/__main__.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/mcp/prompts/prompt_constants.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/mcp/prompts/prompt_helpers.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/mcp/prompts/prompt_load.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/mcp/prompts/prompt_server.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/mcp/prompts/prompt_template.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/mcp/resource_utils.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/mcp/sampling.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/mcp/server/__init__.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/mcp/server/agent_server.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/mcp/ui_agent.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/mcp/ui_mixin.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/mcp_server_registry.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/py.typed +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/examples/data-analysis/analysis-campaign.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/examples/data-analysis/analysis.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/examples/data-analysis/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/examples/data-analysis/mount-point/WA_Fn-UseC_-HR-Employee-Attrition.csv +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/examples/mcp/elicitations/elicitation_account_server.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/examples/mcp/elicitations/elicitation_forms_server.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/examples/mcp/elicitations/elicitation_game_server.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/examples/mcp/elicitations/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/examples/mcp/elicitations/fastagent.secrets.yaml.example +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/examples/mcp/elicitations/forms_demo.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/examples/mcp/elicitations/game_character.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/examples/mcp/elicitations/game_character_handler.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/examples/mcp/elicitations/tool_call.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/examples/mcp/state-transfer/agent_one.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/examples/mcp/state-transfer/agent_two.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/examples/mcp/state-transfer/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/examples/mcp/state-transfer/fastagent.secrets.yaml.example +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/examples/researcher/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/examples/researcher/researcher-eval.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/examples/researcher/researcher-imp.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/examples/researcher/researcher.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/examples/tensorzero/.env.sample +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/examples/tensorzero/Makefile +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/examples/tensorzero/README.md +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/examples/tensorzero/agent.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/examples/tensorzero/demo_images/clam.jpg +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/examples/tensorzero/demo_images/crab.png +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/examples/tensorzero/demo_images/shrimp.png +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/examples/tensorzero/docker-compose.yml +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/examples/tensorzero/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/examples/tensorzero/image_demo.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/examples/tensorzero/mcp_server/.python-version +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/examples/tensorzero/mcp_server/Dockerfile +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/examples/tensorzero/mcp_server/entrypoint.sh +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/examples/tensorzero/mcp_server/mcp_server.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/examples/tensorzero/mcp_server/pyproject.toml +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/examples/tensorzero/simple_agent.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/examples/tensorzero/tensorzero_config/system_schema.json +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/examples/tensorzero/tensorzero_config/system_template.minijinja +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/examples/tensorzero/tensorzero_config/tensorzero.toml +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/examples/workflows/chaining.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/examples/workflows/evaluator.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/examples/workflows/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/examples/workflows/graded_report.md +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/examples/workflows/human_input.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/examples/workflows/orchestrator.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/examples/workflows/parallel.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/examples/workflows/router.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/examples/workflows/short_story.md +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/examples/workflows/short_story.txt +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/resources/setup/fastagent.secrets.yaml.example +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/tools/elicitation.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/types/__init__.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/types/llm_stop_reason.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/ui/__init__.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/ui/console.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/ui/elicitation_form.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/ui/elicitation_style.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/ui/mcp_ui_utils.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/ui/mermaid_utils.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/ui/progress_display.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/ui/rich_progress.py +0 -0
- {fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/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.
|
|
3
|
+
Version: 0.3.6
|
|
4
4
|
Summary: Define, Prompt and Test MCP enabled Agents and Workflows
|
|
5
5
|
Author-email: Shaun Smith <fastagent@llmindset.co.uk>
|
|
6
6
|
License: Apache License
|
|
@@ -208,7 +208,7 @@ License-File: LICENSE
|
|
|
208
208
|
Classifier: License :: OSI Approved :: Apache Software License
|
|
209
209
|
Classifier: Operating System :: OS Independent
|
|
210
210
|
Classifier: Programming Language :: Python :: 3
|
|
211
|
-
Requires-Python: >=3.13.
|
|
211
|
+
Requires-Python: >=3.13.5
|
|
212
212
|
Requires-Dist: a2a-sdk>=0.3.0
|
|
213
213
|
Requires-Dist: aiohttp>=3.11.13
|
|
214
214
|
Requires-Dist: anthropic>=0.66.0
|
|
@@ -218,6 +218,7 @@ Requires-Dist: deprecated>=1.2.18
|
|
|
218
218
|
Requires-Dist: email-validator>=2.2.0
|
|
219
219
|
Requires-Dist: fastapi>=0.115.6
|
|
220
220
|
Requires-Dist: google-genai>=1.33.0
|
|
221
|
+
Requires-Dist: keyring>=24.3.1
|
|
221
222
|
Requires-Dist: mcp==1.14.0
|
|
222
223
|
Requires-Dist: openai>=1.106.1
|
|
223
224
|
Requires-Dist: opentelemetry-distro>=0.55b0
|
|
@@ -380,6 +381,42 @@ uv run workflow/chaining.py --agent post_writer --message "<url>"
|
|
|
380
381
|
|
|
381
382
|
Add the `--quiet` switch to disable progress and message display and return only the final response - useful for simple automations.
|
|
382
383
|
|
|
384
|
+
## MCP OAuth (v2.1)
|
|
385
|
+
|
|
386
|
+
For SSE and HTTP MCP servers, OAuth is enabled by default with minimal configuration. A local callback server is used to capture the authorization code, with a paste-URL fallback if the port is unavailable.
|
|
387
|
+
|
|
388
|
+
- Minimal per-server settings in `fastagent.config.yaml`:
|
|
389
|
+
|
|
390
|
+
```yaml
|
|
391
|
+
mcp:
|
|
392
|
+
servers:
|
|
393
|
+
myserver:
|
|
394
|
+
transport: http # or sse
|
|
395
|
+
url: http://localhost:8001/mcp # or /sse for SSE servers
|
|
396
|
+
auth:
|
|
397
|
+
oauth: true # default: true
|
|
398
|
+
redirect_port: 3030 # default: 3030
|
|
399
|
+
redirect_path: /callback # default: /callback
|
|
400
|
+
# scope: "user" # optional; if omitted, server defaults are used
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
- The OAuth client uses PKCE and in-memory token storage (no tokens written to disk).
|
|
404
|
+
- Token persistence: by default, tokens are stored securely in your OS keychain via `keyring`. If a keychain is unavailable (e.g., headless container), in-memory storage is used for the session.
|
|
405
|
+
- To force in-memory only per server, set:
|
|
406
|
+
|
|
407
|
+
```yaml
|
|
408
|
+
mcp:
|
|
409
|
+
servers:
|
|
410
|
+
myserver:
|
|
411
|
+
transport: http
|
|
412
|
+
url: http://localhost:8001/mcp
|
|
413
|
+
auth:
|
|
414
|
+
oauth: true
|
|
415
|
+
persist: memory
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
- To disable OAuth for a specific server , set `auth.oauth: false` for that server.
|
|
419
|
+
|
|
383
420
|
## Workflows
|
|
384
421
|
|
|
385
422
|
### Chain
|
|
@@ -142,6 +142,42 @@ uv run workflow/chaining.py --agent post_writer --message "<url>"
|
|
|
142
142
|
|
|
143
143
|
Add the `--quiet` switch to disable progress and message display and return only the final response - useful for simple automations.
|
|
144
144
|
|
|
145
|
+
## MCP OAuth (v2.1)
|
|
146
|
+
|
|
147
|
+
For SSE and HTTP MCP servers, OAuth is enabled by default with minimal configuration. A local callback server is used to capture the authorization code, with a paste-URL fallback if the port is unavailable.
|
|
148
|
+
|
|
149
|
+
- Minimal per-server settings in `fastagent.config.yaml`:
|
|
150
|
+
|
|
151
|
+
```yaml
|
|
152
|
+
mcp:
|
|
153
|
+
servers:
|
|
154
|
+
myserver:
|
|
155
|
+
transport: http # or sse
|
|
156
|
+
url: http://localhost:8001/mcp # or /sse for SSE servers
|
|
157
|
+
auth:
|
|
158
|
+
oauth: true # default: true
|
|
159
|
+
redirect_port: 3030 # default: 3030
|
|
160
|
+
redirect_path: /callback # default: /callback
|
|
161
|
+
# scope: "user" # optional; if omitted, server defaults are used
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
- The OAuth client uses PKCE and in-memory token storage (no tokens written to disk).
|
|
165
|
+
- Token persistence: by default, tokens are stored securely in your OS keychain via `keyring`. If a keychain is unavailable (e.g., headless container), in-memory storage is used for the session.
|
|
166
|
+
- To force in-memory only per server, set:
|
|
167
|
+
|
|
168
|
+
```yaml
|
|
169
|
+
mcp:
|
|
170
|
+
servers:
|
|
171
|
+
myserver:
|
|
172
|
+
transport: http
|
|
173
|
+
url: http://localhost:8001/mcp
|
|
174
|
+
auth:
|
|
175
|
+
oauth: true
|
|
176
|
+
persist: memory
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
- To disable OAuth for a specific server , set `auth.oauth: false` for that server.
|
|
180
|
+
|
|
145
181
|
## Workflows
|
|
146
182
|
|
|
147
183
|
### Chain
|
|
@@ -6,8 +6,15 @@ from fast_agent import FastAgent
|
|
|
6
6
|
fast = FastAgent("fast-agent example")
|
|
7
7
|
|
|
8
8
|
|
|
9
|
+
default_instruction = """You are a helpful AI Agent.
|
|
10
|
+
|
|
11
|
+
{{serverInstructions}}
|
|
12
|
+
|
|
13
|
+
The current date is {{currentDate}}."""
|
|
14
|
+
|
|
15
|
+
|
|
9
16
|
# Define the agent
|
|
10
|
-
@fast.agent(instruction=
|
|
17
|
+
@fast.agent(instruction=default_instruction)
|
|
11
18
|
async def main():
|
|
12
19
|
# use the --model command line switch or agent arguments to change model
|
|
13
20
|
async with fast.run() as agent:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "fast-agent-mcp"
|
|
3
|
-
version = "0.3.
|
|
3
|
+
version = "0.3.6"
|
|
4
4
|
description = "Define, Prompt and Test MCP enabled Agents and Workflows"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = { file = "LICENSE" }
|
|
@@ -12,7 +12,7 @@ classifiers = [
|
|
|
12
12
|
"License :: OSI Approved :: Apache Software License",
|
|
13
13
|
"Operating System :: OS Independent"
|
|
14
14
|
]
|
|
15
|
-
requires-python = ">=3.13.
|
|
15
|
+
requires-python = ">=3.13.5"
|
|
16
16
|
dependencies = [
|
|
17
17
|
"fastapi>=0.115.6",
|
|
18
18
|
"mcp==1.14.0",
|
|
@@ -39,6 +39,7 @@ dependencies = [
|
|
|
39
39
|
"a2a-sdk>=0.3.0",
|
|
40
40
|
"email-validator>=2.2.0",
|
|
41
41
|
"pyperclip>=1.9.0",
|
|
42
|
+
"keyring>=24.3.1",
|
|
42
43
|
]
|
|
43
44
|
|
|
44
45
|
# For Azure OpenAI with DefaultAzureCredential support, install with: pip install fast-agent-mcp[azure]
|
|
@@ -137,10 +137,24 @@ class LlmAgent(LlmDecorator):
|
|
|
137
137
|
display_name = name if name is not None else self.name
|
|
138
138
|
display_model = model if model is not None else (self.llm.model_name if self._llm else None)
|
|
139
139
|
|
|
140
|
+
# Convert highlight_items to highlight_index
|
|
141
|
+
highlight_index = None
|
|
142
|
+
if highlight_items and bottom_items:
|
|
143
|
+
if isinstance(highlight_items, str):
|
|
144
|
+
try:
|
|
145
|
+
highlight_index = bottom_items.index(highlight_items)
|
|
146
|
+
except ValueError:
|
|
147
|
+
pass
|
|
148
|
+
elif isinstance(highlight_items, list) and len(highlight_items) > 0:
|
|
149
|
+
try:
|
|
150
|
+
highlight_index = bottom_items.index(highlight_items[0])
|
|
151
|
+
except ValueError:
|
|
152
|
+
pass
|
|
153
|
+
|
|
140
154
|
await self.display.show_assistant_message(
|
|
141
155
|
message_text,
|
|
142
156
|
bottom_items=bottom_items,
|
|
143
|
-
|
|
157
|
+
highlight_index=highlight_index,
|
|
144
158
|
max_item_length=max_item_length,
|
|
145
159
|
name=display_name,
|
|
146
160
|
model=display_model,
|
|
@@ -156,6 +156,9 @@ class McpAgent(ABC, ToolAgent):
|
|
|
156
156
|
"""
|
|
157
157
|
await self.__aenter__()
|
|
158
158
|
|
|
159
|
+
# Apply template substitution to the instruction with server instructions
|
|
160
|
+
await self._apply_instruction_templates()
|
|
161
|
+
|
|
159
162
|
async def shutdown(self) -> None:
|
|
160
163
|
"""
|
|
161
164
|
Shutdown the agent and close all MCP server connections.
|
|
@@ -174,6 +177,67 @@ class McpAgent(ABC, ToolAgent):
|
|
|
174
177
|
self._initialized = value
|
|
175
178
|
self._aggregator.initialized = value
|
|
176
179
|
|
|
180
|
+
async def _apply_instruction_templates(self) -> None:
|
|
181
|
+
"""
|
|
182
|
+
Apply template substitution to the instruction, including server instructions.
|
|
183
|
+
This is called during initialization after servers are connected.
|
|
184
|
+
"""
|
|
185
|
+
if not self.instruction:
|
|
186
|
+
return
|
|
187
|
+
|
|
188
|
+
# Gather server instructions if the template includes {{serverInstructions}}
|
|
189
|
+
if "{{serverInstructions}}" in self.instruction:
|
|
190
|
+
try:
|
|
191
|
+
instructions_data = await self._aggregator.get_server_instructions()
|
|
192
|
+
server_instructions = self._format_server_instructions(instructions_data)
|
|
193
|
+
except Exception as e:
|
|
194
|
+
self.logger.warning(f"Failed to get server instructions: {e}")
|
|
195
|
+
server_instructions = ""
|
|
196
|
+
|
|
197
|
+
# Replace the template variable
|
|
198
|
+
self.instruction = self.instruction.replace("{{serverInstructions}}", server_instructions)
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
# Update default request params to match
|
|
202
|
+
if self._default_request_params:
|
|
203
|
+
self._default_request_params.systemPrompt = self.instruction
|
|
204
|
+
|
|
205
|
+
self.logger.debug(f"Applied instruction templates for agent {self._name}")
|
|
206
|
+
|
|
207
|
+
def _format_server_instructions(self, instructions_data: Dict[str, tuple[str | None, List[str]]]) -> str:
|
|
208
|
+
"""
|
|
209
|
+
Format server instructions with XML tags and tool lists.
|
|
210
|
+
|
|
211
|
+
Args:
|
|
212
|
+
instructions_data: Dict mapping server name to (instructions, tool_names)
|
|
213
|
+
|
|
214
|
+
Returns:
|
|
215
|
+
Formatted string with server instructions
|
|
216
|
+
"""
|
|
217
|
+
if not instructions_data:
|
|
218
|
+
return ""
|
|
219
|
+
|
|
220
|
+
formatted_parts = []
|
|
221
|
+
for server_name, (instructions, tool_names) in instructions_data.items():
|
|
222
|
+
# Skip servers with no instructions
|
|
223
|
+
if instructions is None:
|
|
224
|
+
continue
|
|
225
|
+
|
|
226
|
+
# Format tool names with server prefix
|
|
227
|
+
prefixed_tools = [f"{server_name}-{tool}" for tool in tool_names]
|
|
228
|
+
tools_list = ", ".join(prefixed_tools) if prefixed_tools else "No tools available"
|
|
229
|
+
|
|
230
|
+
formatted_parts.append(
|
|
231
|
+
f"<mcp-server name=\"{server_name}\">\n"
|
|
232
|
+
f"<tools>{tools_list}</tools>\n"
|
|
233
|
+
f"<instructions>\n{instructions}\n</instructions>\n"
|
|
234
|
+
f"</mcp-server>"
|
|
235
|
+
)
|
|
236
|
+
|
|
237
|
+
if formatted_parts:
|
|
238
|
+
return "\n\n".join(formatted_parts)
|
|
239
|
+
return ""
|
|
240
|
+
|
|
177
241
|
async def __call__(
|
|
178
242
|
self,
|
|
179
243
|
message: Union[
|
|
@@ -549,12 +613,20 @@ class McpAgent(ABC, ToolAgent):
|
|
|
549
613
|
namespaced_tool = self._aggregator._namespaced_tool_map.get(tool_name)
|
|
550
614
|
display_tool_name = namespaced_tool.tool.name if namespaced_tool else tool_name
|
|
551
615
|
|
|
616
|
+
# Find the index of the current tool in available_tools for highlighting
|
|
617
|
+
highlight_index = None
|
|
618
|
+
try:
|
|
619
|
+
highlight_index = available_tools.index(display_tool_name)
|
|
620
|
+
except ValueError:
|
|
621
|
+
# Tool not found in list, no highlighting
|
|
622
|
+
pass
|
|
623
|
+
|
|
552
624
|
self.display.show_tool_call(
|
|
553
625
|
name=self._name,
|
|
554
626
|
tool_args=tool_args,
|
|
555
627
|
bottom_items=available_tools,
|
|
556
628
|
tool_name=display_tool_name,
|
|
557
|
-
|
|
629
|
+
highlight_index=highlight_index,
|
|
558
630
|
max_item_length=12,
|
|
559
631
|
)
|
|
560
632
|
|
|
@@ -128,11 +128,21 @@ class ToolAgent(LlmAgent):
|
|
|
128
128
|
for correlation_id, tool_request in request.tool_calls.items():
|
|
129
129
|
tool_name = tool_request.params.name
|
|
130
130
|
tool_args = tool_request.params.arguments or {}
|
|
131
|
+
|
|
132
|
+
# Find the index of the current tool in available_tools for highlighting
|
|
133
|
+
highlight_index = None
|
|
134
|
+
try:
|
|
135
|
+
highlight_index = available_tools.index(tool_name)
|
|
136
|
+
except ValueError:
|
|
137
|
+
# Tool not found in list, no highlighting
|
|
138
|
+
pass
|
|
139
|
+
|
|
131
140
|
self.display.show_tool_call(
|
|
132
141
|
name=self.name,
|
|
133
142
|
tool_args=tool_args,
|
|
134
143
|
bottom_items=available_tools,
|
|
135
144
|
tool_name=tool_name,
|
|
145
|
+
highlight_index=highlight_index,
|
|
136
146
|
max_item_length=12,
|
|
137
147
|
)
|
|
138
148
|
|
{fast_agent_mcp-0.3.4 → fast_agent_mcp-0.3.6}/src/fast_agent/agents/workflow/router_agent.py
RENAMED
|
@@ -300,10 +300,18 @@ class RouterAgent(LlmAgent):
|
|
|
300
300
|
if response.reasoning:
|
|
301
301
|
routing_message += f" ({response.reasoning})"
|
|
302
302
|
|
|
303
|
+
# Convert highlight_items to highlight_index
|
|
304
|
+
agent_keys = list(self.agent_map.keys())
|
|
305
|
+
highlight_index = None
|
|
306
|
+
try:
|
|
307
|
+
highlight_index = agent_keys.index(response.agent)
|
|
308
|
+
except ValueError:
|
|
309
|
+
pass
|
|
310
|
+
|
|
303
311
|
await self.display.show_assistant_message(
|
|
304
312
|
routing_message,
|
|
305
|
-
bottom_items=
|
|
306
|
-
|
|
313
|
+
bottom_items=agent_keys,
|
|
314
|
+
highlight_index=highlight_index,
|
|
307
315
|
name=self.name,
|
|
308
316
|
)
|
|
309
317
|
|
|
@@ -13,14 +13,17 @@ def main():
|
|
|
13
13
|
# Check if first arg is not already a subcommand
|
|
14
14
|
first_arg = sys.argv[1]
|
|
15
15
|
|
|
16
|
-
if
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
# Only auto-route if any known go-specific options are present
|
|
17
|
+
has_go_options = any(
|
|
18
|
+
(arg in GO_SPECIFIC_OPTIONS) or any(arg.startswith(opt + "=") for opt in GO_SPECIFIC_OPTIONS)
|
|
19
|
+
for arg in sys.argv[1:]
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
if first_arg not in KNOWN_SUBCOMMANDS and has_go_options:
|
|
20
23
|
# Find where to insert 'go' - before the first go-specific option
|
|
21
24
|
insert_pos = 1
|
|
22
25
|
for i, arg in enumerate(sys.argv[1:], 1):
|
|
23
|
-
if arg in GO_SPECIFIC_OPTIONS or any(
|
|
26
|
+
if (arg in GO_SPECIFIC_OPTIONS) or any(
|
|
24
27
|
arg.startswith(opt + "=") for opt in GO_SPECIFIC_OPTIONS
|
|
25
28
|
):
|
|
26
29
|
insert_pos = i
|