fast-agent-mcp 0.2.37__tar.gz → 0.2.39__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.2.37 → fast_agent_mcp-0.2.39}/PKG-INFO +1 -1
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/pyproject.toml +1 -1
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/cli/commands/quickstart.py +19 -26
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/human_input/elicitation_form.py +1 -1
- fast_agent_mcp-0.2.37/examples/mcp/elicitations/README.md +0 -157
- fast_agent_mcp-0.2.37/src/mcp_agent/resources/examples/mcp/elicitations/README.md +0 -157
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/.gitignore +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/LICENSE +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/README.md +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/azure-openai/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/custom-agents/agent.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/custom-agents/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/data-analysis/analysis-campaign.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/data-analysis/analysis.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/data-analysis/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/data-analysis/mount-point/WA_Fn-UseC_-HR-Employee-Attrition.csv +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/mcp/elicitations/elicitation_account_server.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/mcp/elicitations/elicitation_forms_server.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/mcp/elicitations/elicitation_game_server.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/mcp/elicitations/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/mcp/elicitations/fastagent.secrets.yaml.example +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/mcp/elicitations/forms_demo.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/mcp/elicitations/game_character.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/mcp/elicitations/game_character_handler.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/mcp/elicitations/tool_call.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/mcp/state-transfer/agent_one.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/mcp/state-transfer/agent_two.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/mcp/state-transfer/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/mcp/state-transfer/fastagent.secrets.yaml.example +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/mcp/vision-examples/cat.png +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/mcp/vision-examples/example1.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/mcp/vision-examples/example2.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/mcp/vision-examples/example3.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/mcp/vision-examples/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/otel/agent.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/otel/agent2.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/otel/docker-compose.yaml +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/otel/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/researcher/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/researcher/researcher-eval.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/researcher/researcher-imp.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/researcher/researcher.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/tensorzero/.env.sample +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/tensorzero/Makefile +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/tensorzero/README.md +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/tensorzero/agent.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/tensorzero/demo_images/clam.jpg +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/tensorzero/demo_images/crab.png +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/tensorzero/demo_images/shrimp.png +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/tensorzero/docker-compose.yml +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/tensorzero/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/tensorzero/image_demo.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/tensorzero/mcp_server/Dockerfile +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/tensorzero/mcp_server/entrypoint.sh +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/tensorzero/mcp_server/mcp_server.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/tensorzero/simple_agent.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/tensorzero/tensorzero_config/system_schema.json +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/tensorzero/tensorzero_config/system_template.minijinja +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/tensorzero/tensorzero_config/tensorzero.toml +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/workflows/chaining.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/workflows/evaluator.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/workflows/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/workflows/graded_report.md +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/workflows/human_input.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/workflows/orchestrator.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/workflows/parallel.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/workflows/router.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/workflows/short_story.md +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/workflows/short_story.txt +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/hatch_build.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/__init__.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/agents/__init__.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/agents/agent.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/agents/base_agent.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/agents/workflow/__init__.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/agents/workflow/chain_agent.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/agents/workflow/evaluator_optimizer.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/agents/workflow/orchestrator_agent.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/agents/workflow/orchestrator_models.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/agents/workflow/orchestrator_prompts.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/agents/workflow/parallel_agent.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/agents/workflow/router_agent.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/app.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/cli/__init__.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/cli/__main__.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/cli/commands/check_config.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/cli/commands/go.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/cli/commands/setup.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/cli/commands/url_parser.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/cli/main.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/cli/terminal.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/config.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/console.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/context.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/context_dependent.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/core/__init__.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/core/agent_app.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/core/agent_types.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/core/direct_decorators.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/core/direct_factory.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/core/enhanced_prompt.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/core/error_handling.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/core/exceptions.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/core/fastagent.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/core/interactive_prompt.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/core/mcp_content.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/core/prompt.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/core/request_params.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/core/usage_display.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/core/validation.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/event_progress.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/executor/__init__.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/executor/executor.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/executor/task_registry.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/executor/workflow_signal.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/human_input/__init__.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/human_input/elicitation_forms.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/human_input/elicitation_handler.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/human_input/elicitation_state.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/human_input/handler.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/human_input/types.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/__init__.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/augmented_llm.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/augmented_llm_passthrough.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/augmented_llm_playback.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/augmented_llm_slow.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/memory.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/model_database.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/model_factory.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/prompt_utils.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/provider_key_manager.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/provider_types.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/providers/__init__.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/providers/anthropic_utils.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/providers/augmented_llm_aliyun.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/providers/augmented_llm_anthropic.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/providers/augmented_llm_azure.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/providers/augmented_llm_deepseek.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/providers/augmented_llm_generic.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/providers/augmented_llm_google_native.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/providers/augmented_llm_google_oai.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/providers/augmented_llm_openai.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/providers/augmented_llm_openrouter.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/providers/augmented_llm_tensorzero.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/providers/google_converter.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/providers/multipart_converter_anthropic.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/providers/multipart_converter_openai.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/providers/multipart_converter_tensorzero.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/providers/openai_multipart.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/providers/openai_utils.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/providers/sampling_converter_anthropic.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/providers/sampling_converter_openai.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/sampling_converter.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/sampling_format_converter.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/llm/usage_tracking.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/logging/__init__.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/logging/events.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/logging/json_serializer.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/logging/listeners.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/logging/logger.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/logging/rich_progress.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/logging/transport.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/__init__.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/common.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/elicitation_factory.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/elicitation_handlers.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/gen_client.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/helpers/__init__.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/helpers/content_helpers.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/helpers/server_config_helpers.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/hf_auth.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/interfaces.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/logger_textio.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/mcp_agent_client_session.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/mcp_aggregator.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/mcp_connection_manager.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/mime_utils.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/prompt_message_multipart.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/prompt_render.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/prompt_serialization.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/prompts/__init__.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/prompts/__main__.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/prompts/prompt_constants.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/prompts/prompt_helpers.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/prompts/prompt_load.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/prompts/prompt_server.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/prompts/prompt_template.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/resource_utils.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp/sampling.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp_server/__init__.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp_server/agent_server.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/mcp_server_registry.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/progress_display.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/data-analysis/analysis-campaign.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/data-analysis/analysis.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/data-analysis/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/data-analysis/mount-point/WA_Fn-UseC_-HR-Employee-Attrition.csv +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/mcp/elicitations/elicitation_account_server.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/mcp/elicitations/elicitation_forms_server.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/mcp/elicitations/elicitation_game_server.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/mcp/elicitations/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/mcp/elicitations/fastagent.secrets.yaml.example +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/mcp/elicitations/forms_demo.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/mcp/elicitations/game_character.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/mcp/elicitations/game_character_handler.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/mcp/elicitations/tool_call.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/mcp/state-transfer/agent_one.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/mcp/state-transfer/agent_two.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/mcp/state-transfer/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/mcp/state-transfer/fastagent.secrets.yaml.example +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/researcher/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/researcher/researcher-eval.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/researcher/researcher-imp.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/researcher/researcher.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/workflows/chaining.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/workflows/evaluator.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/workflows/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/workflows/graded_report.md +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/workflows/human_input.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/workflows/orchestrator.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/workflows/parallel.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/workflows/router.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/workflows/short_story.md +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/resources/examples/workflows/short_story.txt +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/tools/tool_definition.py +0 -0
- {fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/ui/console_display.py +0 -0
|
@@ -9,7 +9,7 @@ from rich.panel import Panel
|
|
|
9
9
|
from rich.table import Table
|
|
10
10
|
|
|
11
11
|
app = typer.Typer(
|
|
12
|
-
help="Create
|
|
12
|
+
help="Create fast-agent quickstarts",
|
|
13
13
|
no_args_is_help=False, # Allow showing our custom help instead
|
|
14
14
|
)
|
|
15
15
|
console = Console()
|
|
@@ -64,14 +64,15 @@ EXAMPLE_TYPES = {
|
|
|
64
64
|
"Demonstrates collecting structured data with forms, AI-guided workflows,\n"
|
|
65
65
|
"and custom handlers. Creates examples in an 'elicitations' subdirectory.",
|
|
66
66
|
"files": [
|
|
67
|
+
"elicitation_account_server.py",
|
|
68
|
+
"elicitation_forms_server.py",
|
|
69
|
+
"elicitation_game_server.py",
|
|
70
|
+
"fastagent.config.yaml",
|
|
71
|
+
"fastagent.secrets.yaml.example",
|
|
67
72
|
"forms_demo.py",
|
|
68
|
-
"account_creation.py",
|
|
69
73
|
"game_character.py",
|
|
70
74
|
"game_character_handler.py",
|
|
71
|
-
"
|
|
72
|
-
"fastagent.config.yaml",
|
|
73
|
-
"fastagent.secrets.yaml.example",
|
|
74
|
-
"README.md",
|
|
75
|
+
"tool_call.py",
|
|
75
76
|
],
|
|
76
77
|
"create_subdir": True,
|
|
77
78
|
},
|
|
@@ -226,7 +227,7 @@ def copy_example_files(example_type: str, target_dir: Path, force: bool = False)
|
|
|
226
227
|
|
|
227
228
|
def show_overview() -> None:
|
|
228
229
|
"""Display an overview of available examples in a nicely formatted table."""
|
|
229
|
-
console.print("\n[bold cyan]fast-agent
|
|
230
|
+
console.print("\n[bold cyan]fast-agent quickstarts[/bold cyan]")
|
|
230
231
|
console.print("Build agents and compose workflows through practical examples\n")
|
|
231
232
|
|
|
232
233
|
# Create a table for better organization
|
|
@@ -236,31 +237,23 @@ def show_overview() -> None:
|
|
|
236
237
|
table.add_column("Files")
|
|
237
238
|
|
|
238
239
|
for name, info in EXAMPLE_TYPES.items():
|
|
239
|
-
|
|
240
|
+
# Just show file count instead of listing all files
|
|
241
|
+
file_count = len(info["files"])
|
|
242
|
+
files_summary = f"{file_count} files"
|
|
240
243
|
if "mount_point_files" in info:
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
table.add_row(f"[green]{name}[/green]", info["description"], files_list)
|
|
244
|
+
mount_count = len(info["mount_point_files"])
|
|
245
|
+
files_summary += f"\n+ {mount_count} data files"
|
|
246
|
+
table.add_row(f"[green]{name}[/green]", info["description"], files_summary)
|
|
245
247
|
|
|
246
248
|
console.print(table)
|
|
247
249
|
|
|
248
250
|
# Show usage instructions in a panel
|
|
249
251
|
usage_text = (
|
|
250
|
-
"[bold]
|
|
251
|
-
"
|
|
252
|
-
"
|
|
253
|
-
" fastagent quickstart data-analysis DIR Create data analysis examples in 'data-analysis' subdirectory\n"
|
|
254
|
-
" fastagent quickstart state-transfer DIR Create state transfer examples in 'state-transfer' subdirectory\n"
|
|
255
|
-
" fastagent quickstart elicitations DIR Create elicitation form examples in 'elicitations' subdirectory\n\n"
|
|
252
|
+
"[bold]Usage:[/bold]\n"
|
|
253
|
+
" [cyan]fast-agent[/cyan] [green]quickstart[/green] [yellow]<name>[/yellow] [dim]\\[directory][/dim]\n\n"
|
|
254
|
+
"[dim]directory optionally overrides the default subdirectory name[/dim]\n\n"
|
|
256
255
|
"[bold]Options:[/bold]\n"
|
|
257
|
-
" --force Overwrite existing files
|
|
258
|
-
"[bold]Examples:[/bold]\n"
|
|
259
|
-
" fastagent quickstart workflow . Create in current directory\n"
|
|
260
|
-
" fastagent quickstart researcher . Create in researcher subdirectory\n"
|
|
261
|
-
" fastagent quickstart data-analysis . --force Force overwrite files in data-analysis subdirectory\n"
|
|
262
|
-
" fastagent quickstart state-transfer . Create state transfer examples\n"
|
|
263
|
-
" fastagent quickstart elicitations . Create interactive form examples"
|
|
256
|
+
" [cyan]--force[/cyan] Overwrite existing files"
|
|
264
257
|
)
|
|
265
258
|
console.print(Panel(usage_text, title="Usage", border_style="blue"))
|
|
266
259
|
|
|
@@ -402,6 +395,6 @@ def _show_completion_message(example_type: str, created: list[str]) -> None:
|
|
|
402
395
|
|
|
403
396
|
@app.callback(invoke_without_command=True)
|
|
404
397
|
def main(ctx: typer.Context) -> None:
|
|
405
|
-
"""
|
|
398
|
+
"""Quickstart applications for fast-agent."""
|
|
406
399
|
if ctx.invoked_subcommand is None:
|
|
407
400
|
show_overview()
|
|
@@ -1,157 +0,0 @@
|
|
|
1
|
-
# Quick Start: MCP Elicitations
|
|
2
|
-
|
|
3
|
-
This quickstart demonstrates **fast-agent**'s elicitation feature - a powerful way to collect structured data from users through forms and interactive prompts.
|
|
4
|
-
|
|
5
|
-
## What are Elicitations?
|
|
6
|
-
|
|
7
|
-
Elicitations allow MCP servers to request structured input from users through type-safe forms. This enables:
|
|
8
|
-
- User preference collection
|
|
9
|
-
- Account registration flows
|
|
10
|
-
- Configuration wizards
|
|
11
|
-
- Interactive feedback forms
|
|
12
|
-
- Any scenario requiring structured user input
|
|
13
|
-
|
|
14
|
-
## Examples Included
|
|
15
|
-
|
|
16
|
-
### 1. Forms Demo (`forms_demo.py`)
|
|
17
|
-
A showcase of different form types with beautiful rich console output. Uses the passthrough model to display forms directly to users.
|
|
18
|
-
|
|
19
|
-
```bash
|
|
20
|
-
uv run forms_demo.py
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
This example demonstrates:
|
|
24
|
-
- User profile collection
|
|
25
|
-
- Preference settings
|
|
26
|
-
- Simple yes/no ratings
|
|
27
|
-
- Detailed feedback forms
|
|
28
|
-
|
|
29
|
-
### 2. Account Creation Assistant (`account_creation.py`)
|
|
30
|
-
An AI-powered account creation workflow where the LLM initiates the account signup process and the user fills out the form.
|
|
31
|
-
|
|
32
|
-
```bash
|
|
33
|
-
# Configure your LLM first (edit fastagent.config.yaml)
|
|
34
|
-
uv run account_creation.py --model gpt-4o
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
This example shows:
|
|
38
|
-
- LLM initiating elicitation via tool calls
|
|
39
|
-
- User filling out the form (not the LLM)
|
|
40
|
-
- Tool call errors when user cancels/declines
|
|
41
|
-
- Success handling when form is completed
|
|
42
|
-
|
|
43
|
-
### 3. Game Character Creator (`game_character.py` + `game_character_handler.py`)
|
|
44
|
-
A whimsical example with custom elicitation handling, featuring animated dice rolls and visual effects.
|
|
45
|
-
|
|
46
|
-
```bash
|
|
47
|
-
uv run game_character.py
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
Features:
|
|
51
|
-
- Custom elicitation handler (in separate module for clarity)
|
|
52
|
-
- Animated progress bars and typewriter effects
|
|
53
|
-
- Epic dice roll mechanics with cosmic bonuses
|
|
54
|
-
- Interactive character creation with theatrical flair
|
|
55
|
-
- Demonstrates proper handler file organization
|
|
56
|
-
|
|
57
|
-
## Getting Started
|
|
58
|
-
|
|
59
|
-
1. **Setup your environment:**
|
|
60
|
-
```bash
|
|
61
|
-
# Activate your Python environment
|
|
62
|
-
source .venv/bin/activate # or .venv\Scripts\activate on Windows
|
|
63
|
-
|
|
64
|
-
# Install dependencies if needed
|
|
65
|
-
uv pip install fast-agent-mcp
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
2. **For the account creation example**, rename `fastagent.secrets.yaml.example` to `fastagent.secrets.yaml` and add your API keys.
|
|
69
|
-
|
|
70
|
-
3. **Run an example:**
|
|
71
|
-
```bash
|
|
72
|
-
# Try the forms demo first (quiet mode enabled programmatically)
|
|
73
|
-
uv run forms_demo.py
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
## How Elicitations Work
|
|
77
|
-
|
|
78
|
-
### Elicitation Modes
|
|
79
|
-
|
|
80
|
-
**fast-agent** supports these elicitation modes:
|
|
81
|
-
|
|
82
|
-
1. **`forms`** - Shows forms to users (great with passthrough model)
|
|
83
|
-
2. **`auto_cancel`** - Automatically cancels all elicitations
|
|
84
|
-
3. **`none`** - No elicitation handling
|
|
85
|
-
4. **Custom handler** - Use your own handler function (overrides mode setting)
|
|
86
|
-
|
|
87
|
-
Configure modes in `fastagent.config.yaml`:
|
|
88
|
-
|
|
89
|
-
```yaml
|
|
90
|
-
mcp:
|
|
91
|
-
servers:
|
|
92
|
-
my_server:
|
|
93
|
-
command: "uv"
|
|
94
|
-
args: ["run", "server.py"]
|
|
95
|
-
elicitation:
|
|
96
|
-
mode: "forms" # or "auto" or "custom"
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
### Creating Your Own Elicitations
|
|
100
|
-
|
|
101
|
-
#### Basic Server-Side Elicitation
|
|
102
|
-
|
|
103
|
-
```python
|
|
104
|
-
from pydantic import BaseModel, Field
|
|
105
|
-
|
|
106
|
-
class UserPrefs(BaseModel):
|
|
107
|
-
theme: str = Field(
|
|
108
|
-
description="Color theme",
|
|
109
|
-
json_schema_extra={
|
|
110
|
-
"enum": ["light", "dark"],
|
|
111
|
-
"enumNames": ["Light Mode", "Dark Mode"]
|
|
112
|
-
}
|
|
113
|
-
)
|
|
114
|
-
notifications: bool = Field(True, description="Enable notifications?")
|
|
115
|
-
|
|
116
|
-
# In your MCP server:
|
|
117
|
-
result = await mcp.get_context().elicit(
|
|
118
|
-
"Configure your preferences",
|
|
119
|
-
schema=UserPrefs
|
|
120
|
-
)
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
#### Custom Elicitation Handler
|
|
124
|
-
|
|
125
|
-
For advanced interactive experiences, create a custom handler:
|
|
126
|
-
|
|
127
|
-
```python
|
|
128
|
-
async def my_custom_handler(context, params) -> ElicitResult:
|
|
129
|
-
# Your custom logic here - animations, special effects, etc.
|
|
130
|
-
content = {"field": "value"}
|
|
131
|
-
return ElicitResult(action="accept", content=content)
|
|
132
|
-
|
|
133
|
-
# Register with your agent:
|
|
134
|
-
@fast.agent(
|
|
135
|
-
"my-agent",
|
|
136
|
-
servers=["my_server"],
|
|
137
|
-
elicitation_handler=my_custom_handler
|
|
138
|
-
)
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
See `game_character_handler.py` for a complete example with animations and effects.
|
|
142
|
-
|
|
143
|
-
## Next Steps
|
|
144
|
-
|
|
145
|
-
- Explore the example code to understand different patterns
|
|
146
|
-
- Try modifying the forms in `elicitation_server.py`
|
|
147
|
-
- Create your own custom elicitation handlers
|
|
148
|
-
- Check the [documentation](https://fast-agent.ai) for advanced features
|
|
149
|
-
|
|
150
|
-
## Tips
|
|
151
|
-
|
|
152
|
-
- Use `rich` for beautiful console output
|
|
153
|
-
- Test with passthrough model first, then try real LLMs
|
|
154
|
-
- Custom handlers enable creative interactions
|
|
155
|
-
- Validate user input in your schemas using Pydantic
|
|
156
|
-
|
|
157
|
-
Happy form building! 🚀
|
|
@@ -1,157 +0,0 @@
|
|
|
1
|
-
# Quick Start: MCP Elicitations
|
|
2
|
-
|
|
3
|
-
This quickstart demonstrates **fast-agent**'s elicitation feature - a powerful way to collect structured data from users through forms and interactive prompts.
|
|
4
|
-
|
|
5
|
-
## What are Elicitations?
|
|
6
|
-
|
|
7
|
-
Elicitations allow MCP servers to request structured input from users through type-safe forms. This enables:
|
|
8
|
-
- User preference collection
|
|
9
|
-
- Account registration flows
|
|
10
|
-
- Configuration wizards
|
|
11
|
-
- Interactive feedback forms
|
|
12
|
-
- Any scenario requiring structured user input
|
|
13
|
-
|
|
14
|
-
## Examples Included
|
|
15
|
-
|
|
16
|
-
### 1. Forms Demo (`forms_demo.py`)
|
|
17
|
-
A showcase of different form types with beautiful rich console output. Uses the passthrough model to display forms directly to users.
|
|
18
|
-
|
|
19
|
-
```bash
|
|
20
|
-
uv run forms_demo.py
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
This example demonstrates:
|
|
24
|
-
- User profile collection
|
|
25
|
-
- Preference settings
|
|
26
|
-
- Simple yes/no ratings
|
|
27
|
-
- Detailed feedback forms
|
|
28
|
-
|
|
29
|
-
### 2. Account Creation Assistant (`account_creation.py`)
|
|
30
|
-
An AI-powered account creation workflow where the LLM initiates the account signup process and the user fills out the form.
|
|
31
|
-
|
|
32
|
-
```bash
|
|
33
|
-
# Configure your LLM first (edit fastagent.config.yaml)
|
|
34
|
-
uv run account_creation.py --model gpt-4o
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
This example shows:
|
|
38
|
-
- LLM initiating elicitation via tool calls
|
|
39
|
-
- User filling out the form (not the LLM)
|
|
40
|
-
- Tool call errors when user cancels/declines
|
|
41
|
-
- Success handling when form is completed
|
|
42
|
-
|
|
43
|
-
### 3. Game Character Creator (`game_character.py` + `game_character_handler.py`)
|
|
44
|
-
A whimsical example with custom elicitation handling, featuring animated dice rolls and visual effects.
|
|
45
|
-
|
|
46
|
-
```bash
|
|
47
|
-
uv run game_character.py
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
Features:
|
|
51
|
-
- Custom elicitation handler (in separate module for clarity)
|
|
52
|
-
- Animated progress bars and typewriter effects
|
|
53
|
-
- Epic dice roll mechanics with cosmic bonuses
|
|
54
|
-
- Interactive character creation with theatrical flair
|
|
55
|
-
- Demonstrates proper handler file organization
|
|
56
|
-
|
|
57
|
-
## Getting Started
|
|
58
|
-
|
|
59
|
-
1. **Setup your environment:**
|
|
60
|
-
```bash
|
|
61
|
-
# Activate your Python environment
|
|
62
|
-
source .venv/bin/activate # or .venv\Scripts\activate on Windows
|
|
63
|
-
|
|
64
|
-
# Install dependencies if needed
|
|
65
|
-
uv pip install fast-agent-mcp
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
2. **For the account creation example**, rename `fastagent.secrets.yaml.example` to `fastagent.secrets.yaml` and add your API keys.
|
|
69
|
-
|
|
70
|
-
3. **Run an example:**
|
|
71
|
-
```bash
|
|
72
|
-
# Try the forms demo first (quiet mode enabled programmatically)
|
|
73
|
-
uv run forms_demo.py
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
## How Elicitations Work
|
|
77
|
-
|
|
78
|
-
### Elicitation Modes
|
|
79
|
-
|
|
80
|
-
**fast-agent** supports these elicitation modes:
|
|
81
|
-
|
|
82
|
-
1. **`forms`** - Shows forms to users (great with passthrough model)
|
|
83
|
-
2. **`auto_cancel`** - Automatically cancels all elicitations
|
|
84
|
-
3. **`none`** - No elicitation handling
|
|
85
|
-
4. **Custom handler** - Use your own handler function (overrides mode setting)
|
|
86
|
-
|
|
87
|
-
Configure modes in `fastagent.config.yaml`:
|
|
88
|
-
|
|
89
|
-
```yaml
|
|
90
|
-
mcp:
|
|
91
|
-
servers:
|
|
92
|
-
my_server:
|
|
93
|
-
command: "uv"
|
|
94
|
-
args: ["run", "server.py"]
|
|
95
|
-
elicitation:
|
|
96
|
-
mode: "forms" # or "auto" or "custom"
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
### Creating Your Own Elicitations
|
|
100
|
-
|
|
101
|
-
#### Basic Server-Side Elicitation
|
|
102
|
-
|
|
103
|
-
```python
|
|
104
|
-
from pydantic import BaseModel, Field
|
|
105
|
-
|
|
106
|
-
class UserPrefs(BaseModel):
|
|
107
|
-
theme: str = Field(
|
|
108
|
-
description="Color theme",
|
|
109
|
-
json_schema_extra={
|
|
110
|
-
"enum": ["light", "dark"],
|
|
111
|
-
"enumNames": ["Light Mode", "Dark Mode"]
|
|
112
|
-
}
|
|
113
|
-
)
|
|
114
|
-
notifications: bool = Field(True, description="Enable notifications?")
|
|
115
|
-
|
|
116
|
-
# In your MCP server:
|
|
117
|
-
result = await mcp.get_context().elicit(
|
|
118
|
-
"Configure your preferences",
|
|
119
|
-
schema=UserPrefs
|
|
120
|
-
)
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
#### Custom Elicitation Handler
|
|
124
|
-
|
|
125
|
-
For advanced interactive experiences, create a custom handler:
|
|
126
|
-
|
|
127
|
-
```python
|
|
128
|
-
async def my_custom_handler(context, params) -> ElicitResult:
|
|
129
|
-
# Your custom logic here - animations, special effects, etc.
|
|
130
|
-
content = {"field": "value"}
|
|
131
|
-
return ElicitResult(action="accept", content=content)
|
|
132
|
-
|
|
133
|
-
# Register with your agent:
|
|
134
|
-
@fast.agent(
|
|
135
|
-
"my-agent",
|
|
136
|
-
servers=["my_server"],
|
|
137
|
-
elicitation_handler=my_custom_handler
|
|
138
|
-
)
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
See `game_character_handler.py` for a complete example with animations and effects.
|
|
142
|
-
|
|
143
|
-
## Next Steps
|
|
144
|
-
|
|
145
|
-
- Explore the example code to understand different patterns
|
|
146
|
-
- Try modifying the forms in `elicitation_server.py`
|
|
147
|
-
- Create your own custom elicitation handlers
|
|
148
|
-
- Check the [documentation](https://fast-agent.ai) for advanced features
|
|
149
|
-
|
|
150
|
-
## Tips
|
|
151
|
-
|
|
152
|
-
- Use `rich` for beautiful console output
|
|
153
|
-
- Test with passthrough model first, then try real LLMs
|
|
154
|
-
- Custom handlers enable creative interactions
|
|
155
|
-
- Validate user input in your schemas using Pydantic
|
|
156
|
-
|
|
157
|
-
Happy form building! 🚀
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/custom-agents/fastagent.config.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/data-analysis/fastagent.config.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/mcp/elicitations/elicitation_game_server.py
RENAMED
|
File without changes
|
{fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/mcp/elicitations/fastagent.config.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/mcp/elicitations/game_character_handler.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/mcp/state-transfer/fastagent.config.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/mcp/vision-examples/fastagent.config.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/tensorzero/mcp_server/entrypoint.sh
RENAMED
|
File without changes
|
{fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/examples/tensorzero/mcp_server/mcp_server.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/agents/workflow/chain_agent.py
RENAMED
|
File without changes
|
{fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/agents/workflow/evaluator_optimizer.py
RENAMED
|
File without changes
|
{fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/agents/workflow/orchestrator_agent.py
RENAMED
|
File without changes
|
{fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/agents/workflow/orchestrator_models.py
RENAMED
|
File without changes
|
|
File without changes
|
{fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/agents/workflow/parallel_agent.py
RENAMED
|
File without changes
|
{fast_agent_mcp-0.2.37 → fast_agent_mcp-0.2.39}/src/mcp_agent/agents/workflow/router_agent.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|