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