fastmcp 2.13.0rc2__tar.gz → 2.13.0rc3__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.
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/.github/workflows/martian-issue-triage.yml +5 -4
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/.github/workflows/marvin-dedupe-issues.yml +0 -1
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/AGENTS.md +2 -2
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/PKG-INFO +5 -5
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/README.md +1 -2
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/clients/sampling.mdx +3 -48
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/deployment/http.mdx +24 -16
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/development/tests.mdx +4 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/development/upgrade-guide.mdx +13 -8
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/docs.json +2 -5
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/auth0.mdx +42 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/aws-cognito.mdx +42 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/azure.mdx +42 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/github.mdx +40 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/google.mdx +41 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/workos.mdx +42 -0
- fastmcp-2.13.0rc3/docs/patterns/testing.mdx +85 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-oauth_callback.mdx +5 -5
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-transports.mdx +7 -7
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-jwt_issuer.mdx +4 -4
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-oauth_proxy.mdx +24 -21
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-oidc_proxy.mdx +2 -2
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-aws.mdx +1 -1
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-azure.mdx +1 -1
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-workos.mdx +3 -3
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-http.mdx +8 -8
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-cli.mdx +3 -3
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-ui.mdx +9 -8
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/servers/auth/oauth-proxy.mdx +63 -40
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/servers/auth/oidc-proxy.mdx +47 -4
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/servers/context.mdx +30 -5
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/servers/middleware.mdx +35 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/servers/sampling.mdx +85 -6
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/servers/storage-backends.mdx +23 -11
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/memory.py +3 -3
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/smart_home/src/smart_home/hub.py +3 -8
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/smart_home/src/smart_home/lights/hue_utils.py +1 -1
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/smart_home/src/smart_home/settings.py +2 -2
- fastmcp-2.13.0rc3/logo.py +25 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/pyproject.toml +4 -2
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/cli/cli.py +1 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/cli/install/claude_code.py +3 -3
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/client/oauth_callback.py +6 -2
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/client/transports.py +1 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/resources/types.py +30 -24
- fastmcp-2.13.0rc3/src/fastmcp/server/auth/handlers/authorize.py +324 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/jwt_issuer.py +39 -92
- fastmcp-2.13.0rc3/src/fastmcp/server/auth/middleware.py +96 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/oauth_proxy.py +236 -217
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/oidc_proxy.py +16 -1
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/auth0.py +28 -15
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/aws.py +16 -1
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/azure.py +69 -31
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/github.py +16 -1
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/google.py +16 -1
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/workos.py +16 -1
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/context.py +33 -2
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/http.py +1 -1
- fastmcp-2.13.0rc3/src/fastmcp/server/middleware/tool_injection.py +116 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/server.py +47 -26
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/settings.py +2 -1
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/tools/tool_manager.py +8 -4
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/cli.py +45 -15
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/ui.py +126 -6
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/server/openapi/test_openapi_performance.py +1 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/server/openapi/test_performance_comparison.py +0 -6
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/integration_tests/auth/test_github_provider_integration.py +2 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/auth/providers/test_auth0.py +7 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/auth/providers/test_aws.py +6 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/auth/providers/test_azure.py +44 -25
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/auth/providers/test_github.py +7 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/auth/providers/test_google.py +5 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/auth/providers/test_workos.py +7 -0
- fastmcp-2.13.0rc3/tests/server/auth/test_enhanced_error_responses.py +364 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/auth/test_jwt_issuer.py +36 -103
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/auth/test_oauth_consent_flow.py +5 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/auth/test_oauth_proxy.py +18 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/auth/test_oauth_proxy_redirect_validation.py +5 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/auth/test_oauth_proxy_storage.py +12 -9
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/auth/test_oidc_proxy.py +6 -0
- fastmcp-2.13.0rc3/tests/server/middleware/test_tool_injection.py +498 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/test_server.py +48 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/uv.lock +130 -10
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/.ccignore +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/.cursor/rules/core-mcp-objects.mdc +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/.cursor/worktrees.json +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/.github/ISSUE_TEMPLATE/bug.yml +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/.github/ISSUE_TEMPLATE/enhancement.yml +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/.github/copilot-instructions.md +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/.github/dependabot.yml +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/.github/pull_request_template.md +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/.github/release.yml +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/.github/workflows/auto-close-duplicates.yml +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/.github/workflows/auto-close-needs-mre.yml +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/.github/workflows/marvin-label-triage.yml +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/.github/workflows/marvin.yml +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/.github/workflows/publish.yml +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/.github/workflows/run-static.yml +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/.github/workflows/run-tests.yml +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/.github/workflows/update-config-schema.yml +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/.github/workflows/update-sdk-docs.yml +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/.gitignore +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/.pre-commit-config.yaml +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/CLAUDE.md +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/CODE_OF_CONDUCT.md +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/LICENSE +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/SECURITY.md +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/.ccignore +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/.cursor/rules/mintlify.mdc +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/assets/brand/blue-logo.png +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/assets/brand/f-watercolor-waves-dark.png +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/assets/brand/f-watercolor-waves.png +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/assets/brand/favicon.svg +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/assets/brand/thumbnail-background.png +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/assets/brand/wordmark-padded.png +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/assets/brand/wordmark-watercolor-rainbow-dark.png +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/assets/brand/wordmark-watercolor-rainbow.png +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/assets/brand/wordmark-watercolor-waves-dark.png +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/assets/brand/wordmark-watercolor-waves.png +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/assets/brand/wordmark-white-padded.png +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/assets/brand/wordmark-white.png +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/assets/brand/wordmark.png +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/assets/images/fastmcp_cloud/connect.png +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/assets/images/fastmcp_cloud/create_project.png +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/assets/images/fastmcp_cloud/deployment.png +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/assets/images/fastmcp_cloud/quickstart.png +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/assets/images/oauth-proxy-consent-screen.png +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/assets/images/tutorial-rest-api-result.png +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/assets/schemas/mcp_server_config/latest.json +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/assets/schemas/mcp_server_config/v1.json +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/assets/updates/release-2-7.png +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/changelog.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/clients/auth/bearer.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/clients/auth/oauth.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/clients/client.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/clients/elicitation.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/clients/logging.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/clients/messages.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/clients/progress.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/clients/prompts.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/clients/resources.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/clients/roots.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/clients/tools.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/clients/transports.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/community/README.md +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/community/showcase.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/css/banner.css +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/css/python-sdk.css +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/css/style.css +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/css/version-badge.css +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/deployment/fastmcp-cloud.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/deployment/running-server.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/deployment/server-configuration.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/development/contributing.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/development/releases.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/getting-started/installation.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/getting-started/quickstart.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/getting-started/welcome.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/anthropic.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/authkit.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/chatgpt.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/claude-code.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/claude-desktop.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/cursor-install-mcp.png +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/cursor.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/descope.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/eunomia-authorization.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/fastapi.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/gemini-cli.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/gemini.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/images/authkit/enable_dcr.png +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/images/permit/abac_condition_example.png +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/images/permit/abac_policy_example.png +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/images/permit/policy_mapping.png +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/images/permit/role_assignement.png +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/mcp-json-configuration.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/openai.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/openapi.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/permit.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/scalekit.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/patterns/cli.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/patterns/contrib.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/patterns/decorating-methods.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/patterns/tool-transformation.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/public/schemas/fastmcp.json/latest.json +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/public/schemas/fastmcp.json/v1.json +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-cli-__init__.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-cli-cli.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-cli-install-__init__.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-cli-install-claude_code.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-cli-install-claude_desktop.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-cli-install-cursor.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-cli-install-gemini_cli.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-cli-install-mcp_json.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-cli-install-shared.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-cli-run.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-__init__.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-auth-__init__.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-auth-bearer.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-auth-oauth.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-client.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-elicitation.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-logging.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-messages.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-progress.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-roots.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-sampling.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-exceptions.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-mcp_config.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-prompts-__init__.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-prompts-prompt.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-prompts-prompt_manager.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-resources-__init__.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-resources-resource.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-resources-resource_manager.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-resources-template.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-resources-types.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-__init__.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-__init__.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-auth.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-__init__.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-auth0.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-bearer.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-descope.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-github.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-google.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-in_memory.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-introspection.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-jwt.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-scalekit.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-supabase.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-redirect_validation.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-context.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-dependencies.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-elicitation.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-low_level.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-middleware-__init__.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-middleware-caching.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-middleware-error_handling.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-middleware-logging.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-middleware-middleware.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-middleware-rate_limiting.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-middleware-timing.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-openapi.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-proxy.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-server.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-settings.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-tools-__init__.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-tools-tool.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-tools-tool_manager.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-tools-tool_transform.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-__init__.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-auth.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-components.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-exceptions.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-http.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-inspect.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-json_schema.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-json_schema_type.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-logging.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-mcp_config.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-mcp_server_config-__init__.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-__init__.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-environments-__init__.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-environments-base.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-environments-uv.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-mcp_server_config.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-sources-__init__.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-sources-base.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-sources-filesystem.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-openapi.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-tests.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-types.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/servers/auth/authentication.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/servers/auth/full-oauth-server.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/servers/auth/remote-oauth.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/servers/auth/token-verification.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/servers/composition.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/servers/elicitation.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/servers/icons.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/servers/logging.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/servers/progress.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/servers/prompts.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/servers/proxy.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/servers/resources.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/servers/server.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/servers/tools.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/snippets/local-focus.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/snippets/version-badge.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/snippets/youtube-embed.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/tutorials/create-mcp-server.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/tutorials/mcp.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/tutorials/rest-api.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/updates.mdx +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/atproto_mcp/README.md +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/atproto_mcp/demo.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/atproto_mcp/fastmcp.json +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/atproto_mcp/pyproject.toml +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/atproto_mcp/src/atproto_mcp/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/atproto_mcp/src/atproto_mcp/__main__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/atproto_mcp/src/atproto_mcp/_atproto/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/atproto_mcp/src/atproto_mcp/_atproto/_client.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/atproto_mcp/src/atproto_mcp/_atproto/_posts.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/atproto_mcp/src/atproto_mcp/_atproto/_profile.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/atproto_mcp/src/atproto_mcp/_atproto/_read.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/atproto_mcp/src/atproto_mcp/_atproto/_social.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/atproto_mcp/src/atproto_mcp/py.typed +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/atproto_mcp/src/atproto_mcp/server.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/atproto_mcp/src/atproto_mcp/settings.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/atproto_mcp/src/atproto_mcp/types.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/auth/authkit_dcr/README.md +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/auth/authkit_dcr/client.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/auth/authkit_dcr/server.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/auth/aws_oauth/README.md +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/auth/aws_oauth/client.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/auth/aws_oauth/requirements.txt +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/auth/aws_oauth/server.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/auth/azure_oauth/README.md +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/auth/azure_oauth/client.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/auth/azure_oauth/server.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/auth/github_oauth/README.md +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/auth/github_oauth/client.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/auth/github_oauth/server.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/auth/google_oauth/README.md +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/auth/google_oauth/client.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/auth/google_oauth/server.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/auth/scalekit_oauth/README.md +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/auth/scalekit_oauth/client.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/auth/scalekit_oauth/server.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/auth/workos_oauth/README.md +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/auth/workos_oauth/client.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/auth/workos_oauth/server.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/complex_inputs.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/config_server.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/desktop.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/echo.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/fastmcp_config/env_interpolation_example.json +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/fastmcp_config/fastmcp.json +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/fastmcp_config/full_example.fastmcp.json +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/fastmcp_config/server.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/fastmcp_config/simple.fastmcp.json +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/fastmcp_config_demo/README.md +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/fastmcp_config_demo/fastmcp.json +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/fastmcp_config_demo/server.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/get_file.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/in_memory_proxy_example.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/memory.fastmcp.json +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/mount_example.fastmcp.json +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/mount_example.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/sampling.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/sampling_fallback.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/screenshot.fastmcp.json +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/screenshot.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/serializer.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/simple_echo.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/smart_home/README.md +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/smart_home/hub.fastmcp.json +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/smart_home/lights.fastmcp.json +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/smart_home/pyproject.toml +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/smart_home/src/smart_home/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/smart_home/src/smart_home/__main__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/smart_home/src/smart_home/lights/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/smart_home/src/smart_home/lights/server.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/smart_home/src/smart_home/py.typed +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/tags_example.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/text_me.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/justfile +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/scripts/auto_close_duplicates.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/scripts/auto_close_needs_mre.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/cli/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/cli/install/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/cli/install/claude_desktop.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/cli/install/cursor.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/cli/install/gemini_cli.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/cli/install/mcp_json.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/cli/install/shared.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/cli/run.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/client/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/client/auth/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/client/auth/bearer.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/client/auth/oauth.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/client/client.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/client/elicitation.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/client/logging.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/client/messages.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/client/progress.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/client/roots.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/client/sampling.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/README.md +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/component_manager/README.md +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/component_manager/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/component_manager/component_manager.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/component_manager/component_service.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/component_manager/example.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/mcp_mixin/README.md +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/mcp_mixin/example.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/exceptions.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/sampling/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/sampling/handlers/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/sampling/handlers/base.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/sampling/handlers/openai.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/server/openapi/README.md +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/server/openapi/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/server/openapi/components.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/server/openapi/routing.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/server/openapi/server.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/utilities/openapi/README.md +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/utilities/openapi/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/utilities/openapi/director.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/utilities/openapi/formatters.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/utilities/openapi/json_schema_converter.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/utilities/openapi/models.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/utilities/openapi/parser.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/utilities/openapi/schemas.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/mcp_config.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/prompts/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/prompts/prompt.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/prompts/prompt_manager.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/py.typed +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/resources/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/resources/resource.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/resources/resource_manager.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/resources/template.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/auth.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/bearer.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/descope.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/in_memory.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/introspection.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/jwt.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/scalekit.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/supabase.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/redirect_validation.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/dependencies.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/elicitation.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/low_level.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/middleware/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/middleware/caching.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/middleware/error_handling.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/middleware/logging.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/middleware/middleware.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/middleware/rate_limiting.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/middleware/timing.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/openapi.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/proxy.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/sampling/handler.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/tools/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/tools/tool.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/tools/tool_transform.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/auth.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/components.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/exceptions.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/http.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/inspect.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/json_schema.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/json_schema_type.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/logging.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/mcp_config.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/openapi.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/tests.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/types.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/cli/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/cli/test_cli.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/cli/test_config.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/cli/test_cursor.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/cli/test_install.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/cli/test_mcp_server_config_integration.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/cli/test_mcp_server_config_schema.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/cli/test_project_prepare.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/cli/test_run.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/cli/test_run_config.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/cli/test_server_args.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/cli/test_shared.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/cli/test_with_argv.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/client/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/client/auth/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/client/auth/test_oauth_client.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/client/test_client.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/client/test_elicitation.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/client/test_logs.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/client/test_notifications.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/client/test_oauth_callback_xss.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/client/test_openapi_experimental.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/client/test_openapi_legacy.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/client/test_progress.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/client/test_roots.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/client/test_sampling.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/client/test_sse.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/client/test_stdio.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/client/test_streamable_http.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/client/transports/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/client/transports/test_uv_transport.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/conftest.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/contrib/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/contrib/test_bulk_tool_caller.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/contrib/test_component_manager.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/contrib/test_mcp_mixin.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/deprecated/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/deprecated/test_bearer_auth_provider.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/deprecated/test_dependencies.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/deprecated/test_deprecated.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/deprecated/test_mount_import_arg_order.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/deprecated/test_mount_separators.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/deprecated/test_output_schema_false.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/deprecated/test_proxy_client.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/deprecated/test_resource_prefixes.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/deprecated/test_route_type_ignore.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/deprecated/test_settings.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/README.md +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/README.md +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/conftest.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/server/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/server/openapi/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/server/openapi/test_comprehensive.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/server/openapi/test_deepobject_style.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/server/openapi/test_end_to_end_compatibility.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/server/openapi/test_openapi_features.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/server/openapi/test_parameter_collisions.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/server/openapi/test_server.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/utilities/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/utilities/openapi/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/utilities/openapi/conftest.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/utilities/openapi/test_allof_requestbody.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/utilities/openapi/test_direct_array_schemas.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/utilities/openapi/test_director.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/utilities/openapi/test_legacy_compatibility.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/utilities/openapi/test_models.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/utilities/openapi/test_nullable_fields.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/utilities/openapi/test_parser.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/utilities/openapi/test_schemas.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/utilities/openapi/test_transitive_references.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/sampling/test_openai_handler.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/integration_tests/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/integration_tests/auth/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/integration_tests/conftest.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/integration_tests/test_github_mcp_remote.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/prompts/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/prompts/test_prompt.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/prompts/test_prompt_manager.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/resources/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/resources/test_file_resources.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/resources/test_function_resources.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/resources/test_resource_manager.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/resources/test_resource_template.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/resources/test_resource_template_meta.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/resources/test_resources.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/auth/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/auth/providers/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/auth/providers/test_descope.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/auth/providers/test_introspection.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/auth/providers/test_scalekit.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/auth/providers/test_supabase.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/auth/test_auth_provider.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/auth/test_jwt_provider.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/auth/test_oauth_mounting.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/auth/test_redirect_validation.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/auth/test_remote_auth_provider.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/auth/test_static_token_verifier.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/http/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/http/test_bearer_auth_backend.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/http/test_custom_routes.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/http/test_http_auth_middleware.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/http/test_http_dependencies.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/http/test_http_middleware.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/middleware/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/middleware/test_caching.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/middleware/test_error_handling.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/middleware/test_initialization_middleware.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/middleware/test_logging.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/middleware/test_middleware.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/middleware/test_rate_limiting.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/middleware/test_timing.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/openapi/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/openapi/conftest.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/openapi/test_advanced_behavior.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/openapi/test_basic_functionality.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/openapi/test_configuration.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/openapi/test_deepobject_style.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/openapi/test_description_propagation.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/openapi/test_explode_integration.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/openapi/test_openapi_compatibility.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/openapi/test_openapi_path_parameters.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/openapi/test_optional_parameters.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/openapi/test_parameter_collisions.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/openapi/test_route_map_fn.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/proxy/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/proxy/test_proxy_client.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/proxy/test_proxy_server.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/proxy/test_stateful_proxy_client.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/test_app_state.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/test_auth_integration.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/test_context.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/test_experimental_openapi_feature_flag.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/test_file_server.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/test_icons.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/test_import_server.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/test_input_validation.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/test_log_level.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/test_logging.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/test_mount.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/test_resource_prefix_formats.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/test_run_server.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/test_server_interactions.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/test_server_lifespan.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/test_streamable_http_no_redirect.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/test_tool_annotations.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/test_tool_exclude_args.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/test_tool_transformation.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/test_examples.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/test_mcp_config.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/tools/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/tools/test_tool.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/tools/test_tool_future_annotations.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/tools/test_tool_manager.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/tools/test_tool_transform.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/utilities/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/utilities/openapi/__init__.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/utilities/openapi/conftest.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/utilities/openapi/test_nullable_fields.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/utilities/openapi/test_openapi.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/utilities/openapi/test_openapi_advanced.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/utilities/openapi/test_openapi_fastapi.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/utilities/openapi/test_openapi_output_schemas.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/utilities/test_cli.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/utilities/test_components.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/utilities/test_inspect.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/utilities/test_json_schema.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/utilities/test_json_schema_type.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/utilities/test_logging.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/utilities/test_tests.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/utilities/test_typeadapter.py +0 -0
- {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/utilities/test_types.py +0 -0
|
@@ -4,15 +4,16 @@ on:
|
|
|
4
4
|
issues:
|
|
5
5
|
types: [opened, labeled]
|
|
6
6
|
|
|
7
|
-
concurrency:
|
|
8
|
-
group: triage-martian-${{ github.event.issue.number }}
|
|
9
|
-
cancel-in-progress: true
|
|
10
|
-
|
|
11
7
|
jobs:
|
|
12
8
|
martian-issue-triage:
|
|
13
9
|
if: |
|
|
14
10
|
(github.event.action == 'opened' && github.actor == 'strawgate') ||
|
|
15
11
|
(github.event.action == 'labeled' && github.event.label.name == 'triage-martian')
|
|
12
|
+
|
|
13
|
+
concurrency:
|
|
14
|
+
group: triage-martian-${{ github.event.issue.number }}
|
|
15
|
+
cancel-in-progress: true
|
|
16
|
+
|
|
16
17
|
runs-on: ubuntu-latest
|
|
17
18
|
timeout-minutes: 10
|
|
18
19
|
permissions:
|
|
@@ -83,7 +83,6 @@ jobs:
|
|
|
83
83
|
allowed_non_write_users: "*"
|
|
84
84
|
claude_args: |
|
|
85
85
|
--allowedTools Bash(gh issue view:*),Bash(gh search:*),Bash(gh issue list:*),Bash(gh api:*),Bash(gh issue comment:*),Task
|
|
86
|
-
--mcp-config /tmp/mcp-config/mcp-servers.json
|
|
87
86
|
settings: |
|
|
88
87
|
{
|
|
89
88
|
"model": "claude-sonnet-4-5-20250929",
|
|
@@ -24,7 +24,7 @@ uv run pytest # Run full test suite
|
|
|
24
24
|
| ------------------ | --------------------------------------------------- |
|
|
25
25
|
| `src/fastmcp/` | Library source code (Python ≥ 3.10) |
|
|
26
26
|
| `├─server/` | Server implementation, `FastMCP`, auth, networking |
|
|
27
|
-
| `│ ├─auth/` | Authentication providers (
|
|
27
|
+
| `│ ├─auth/` | Authentication providers (Google, GitHub, Azure, AWS, WorkOS, Auth0, JWT, and more) |
|
|
28
28
|
| `│ └─middleware/` | Error handling, logging, rate limiting |
|
|
29
29
|
| `├─client/` | High-level client SDK + transports |
|
|
30
30
|
| `│ └─auth/` | Client authentication (Bearer, OAuth) |
|
|
@@ -262,4 +262,4 @@ uv sync # Installs all deps including dev tools
|
|
|
262
262
|
1. **Dependencies**: Always `uv sync` first
|
|
263
263
|
2. **Pre-commit fails**: Run `uv run pre-commit run --all-files` to see failures
|
|
264
264
|
3. **Type errors**: Use `uv run ty check` directly, check `pyproject.toml` config
|
|
265
|
-
4. **Test timeouts**: Default
|
|
265
|
+
4. **Test timeouts**: Default 5s - optimize or mark as integration tests
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fastmcp
|
|
3
|
-
Version: 2.13.
|
|
3
|
+
Version: 2.13.0rc3
|
|
4
4
|
Summary: The fast, Pythonic way to build MCP servers and clients.
|
|
5
5
|
Project-URL: Homepage, https://gofastmcp.com
|
|
6
6
|
Project-URL: Repository, https://github.com/jlowin/fastmcp
|
|
@@ -14,6 +14,7 @@ Classifier: License :: OSI Approved :: Apache Software License
|
|
|
14
14
|
Classifier: Programming Language :: Python :: 3.10
|
|
15
15
|
Classifier: Programming Language :: Python :: 3.11
|
|
16
16
|
Classifier: Programming Language :: Python :: 3.12
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
17
18
|
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
18
19
|
Classifier: Typing :: Typed
|
|
19
20
|
Requires-Python: >=3.10
|
|
@@ -24,10 +25,10 @@ Requires-Dist: httpx>=0.28.1
|
|
|
24
25
|
Requires-Dist: mcp<2.0.0,>=1.17.0
|
|
25
26
|
Requires-Dist: openapi-core>=0.19.5
|
|
26
27
|
Requires-Dist: openapi-pydantic>=0.5.1
|
|
27
|
-
Requires-Dist:
|
|
28
|
+
Requires-Dist: platformdirs>=4.0.0
|
|
29
|
+
Requires-Dist: py-key-value-aio[disk,keyring,memory]<0.3.0,>=0.2.6
|
|
28
30
|
Requires-Dist: pydantic[email]>=2.11.7
|
|
29
31
|
Requires-Dist: pyperclip>=1.9.0
|
|
30
|
-
Requires-Dist: pytest-asyncio>=1.2.0
|
|
31
32
|
Requires-Dist: python-dotenv>=1.1.0
|
|
32
33
|
Requires-Dist: rich>=13.9.4
|
|
33
34
|
Requires-Dist: websockets>=15.0.1
|
|
@@ -248,7 +249,6 @@ Access MCP session capabilities within your tools, resources, or prompts by addi
|
|
|
248
249
|
|
|
249
250
|
- **Logging:** Log messages to MCP clients with `ctx.info()`, `ctx.error()`, etc.
|
|
250
251
|
- **LLM Sampling:** Use `ctx.sample()` to request completions from the client's LLM.
|
|
251
|
-
- **HTTP Request:** Use `ctx.http_request()` to make HTTP requests to other servers.
|
|
252
252
|
- **Resource Access:** Use `ctx.read_resource()` to access resources on the server
|
|
253
253
|
- **Progress Reporting:** Use `ctx.report_progress()` to report progress to the client.
|
|
254
254
|
- and more...
|
|
@@ -358,7 +358,7 @@ FastMCP provides comprehensive authentication support that sets it apart from ba
|
|
|
358
358
|
Protecting a server takes just two lines:
|
|
359
359
|
|
|
360
360
|
```python
|
|
361
|
-
from fastmcp.server.auth import GoogleProvider
|
|
361
|
+
from fastmcp.server.auth.providers.google import GoogleProvider
|
|
362
362
|
|
|
363
363
|
auth = GoogleProvider(client_id="...", client_secret="...", base_url="https://myserver.com")
|
|
364
364
|
mcp = FastMCP("Protected Server", auth=auth)
|
|
@@ -211,7 +211,6 @@ Access MCP session capabilities within your tools, resources, or prompts by addi
|
|
|
211
211
|
|
|
212
212
|
- **Logging:** Log messages to MCP clients with `ctx.info()`, `ctx.error()`, etc.
|
|
213
213
|
- **LLM Sampling:** Use `ctx.sample()` to request completions from the client's LLM.
|
|
214
|
-
- **HTTP Request:** Use `ctx.http_request()` to make HTTP requests to other servers.
|
|
215
214
|
- **Resource Access:** Use `ctx.read_resource()` to access resources on the server
|
|
216
215
|
- **Progress Reporting:** Use `ctx.report_progress()` to report progress to the client.
|
|
217
216
|
- and more...
|
|
@@ -321,7 +320,7 @@ FastMCP provides comprehensive authentication support that sets it apart from ba
|
|
|
321
320
|
Protecting a server takes just two lines:
|
|
322
321
|
|
|
323
322
|
```python
|
|
324
|
-
from fastmcp.server.auth import GoogleProvider
|
|
323
|
+
from fastmcp.server.auth.providers.google import GoogleProvider
|
|
325
324
|
|
|
326
325
|
auth = GoogleProvider(client_id="...", client_secret="...", base_url="https://myserver.com")
|
|
327
326
|
mcp = FastMCP("Protected Server", auth=auth)
|
|
@@ -151,51 +151,6 @@ client = Client(
|
|
|
151
151
|
)
|
|
152
152
|
```
|
|
153
153
|
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
that the client does not support sampling.
|
|
158
|
-
|
|
159
|
-
A `sampling_handler` can also be provided to the FastMCP server, which will be used to handle sampling requests if the client
|
|
160
|
-
does not support sampling. This sampling handler bypasses the client and sends sampling requests directly to the LLM provider.
|
|
161
|
-
|
|
162
|
-
Sampling handlers can be implemented using any LLM provider but a sample implementation for OpenAI is provided as a Contrib
|
|
163
|
-
module. Sampling lacks the full capabilities of typical LLM completions. For this reason, the OpenAI sampling handler, pointed at
|
|
164
|
-
a third-party provider's OpenAI-compatible API, is often sufficient to implement a sampling handler.
|
|
165
|
-
|
|
166
|
-
```python
|
|
167
|
-
import asyncio
|
|
168
|
-
import os
|
|
169
|
-
|
|
170
|
-
from mcp.types import ContentBlock
|
|
171
|
-
from openai import OpenAI
|
|
172
|
-
|
|
173
|
-
from fastmcp import FastMCP
|
|
174
|
-
from fastmcp.experimental.sampling.handlers.openai import OpenAISamplingHandler
|
|
175
|
-
from fastmcp.server.context import Context
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
async def async_main():
|
|
179
|
-
server = FastMCP(
|
|
180
|
-
name="OpenAI Sampling Fallback Example",
|
|
181
|
-
sampling_handler=OpenAISamplingHandler(
|
|
182
|
-
default_model="gpt-4o-mini",
|
|
183
|
-
client=OpenAI(
|
|
184
|
-
api_key=os.getenv("API_KEY"),
|
|
185
|
-
base_url=os.getenv("BASE_URL"),
|
|
186
|
-
),
|
|
187
|
-
),
|
|
188
|
-
)
|
|
189
|
-
|
|
190
|
-
@server.tool
|
|
191
|
-
async def test_sample_fallback(ctx: Context) -> ContentBlock:
|
|
192
|
-
return await ctx.sample(
|
|
193
|
-
messages=["hello world!"],
|
|
194
|
-
)
|
|
195
|
-
|
|
196
|
-
await server.run_http_async()
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
if __name__ == "__main__":
|
|
200
|
-
asyncio.run(async_main())
|
|
201
|
-
```
|
|
154
|
+
<Note>
|
|
155
|
+
If the client doesn't provide a sampling handler, servers can optionally configure a fallback handler. See [Server Sampling](/servers/sampling#sampling-fallback-handler) for details.
|
|
156
|
+
</Note>
|
|
@@ -545,39 +545,47 @@ MCP_AUTH_TOKEN=secret uvicorn app:app --host 0.0.0.0 --port 8000
|
|
|
545
545
|
|
|
546
546
|
<VersionBadge version="2.13.0" />
|
|
547
547
|
|
|
548
|
-
If you're using the [OAuth Proxy](/servers/auth/oauth-proxy), FastMCP issues its own JWT tokens to clients instead of forwarding upstream provider tokens. This maintains proper OAuth 2.0 token boundaries
|
|
548
|
+
If you're using the [OAuth Proxy](/servers/auth/oauth-proxy), FastMCP issues its own JWT tokens to clients instead of forwarding upstream provider tokens. This maintains proper OAuth 2.0 token boundaries.
|
|
549
549
|
|
|
550
|
-
**Development
|
|
550
|
+
**Default Behavior (Development Only):**
|
|
551
551
|
|
|
552
|
-
By default,
|
|
552
|
+
By default, FastMCP automatically manages cryptographic keys:
|
|
553
|
+
- **Mac/Windows**: Keys are generated and stored in your system keyring, surviving server restarts. Suitable **only** for development and local testing.
|
|
554
|
+
- **Linux**: Keys are ephemeral (random salt at startup), so tokens are invalidated on restart.
|
|
553
555
|
|
|
554
|
-
|
|
556
|
+
This automatic approach is convenient for development but not suitable for production deployments.
|
|
555
557
|
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
4. **HTTPS deployment** for secure cookie handling
|
|
558
|
+
**For Production:**
|
|
559
|
+
|
|
560
|
+
Production requires explicit key management to ensure tokens survive restarts and can be shared across multiple server instances. This requires the following two things working together:
|
|
560
561
|
|
|
561
|
-
|
|
562
|
+
1. **Explicit JWT signing key** for signing tokens issued to clients
|
|
563
|
+
3. **Persistent network-accessible storage** for upstream tokens (wrapped in `FernetEncryptionWrapper` to encrypt sensitive data at rest)
|
|
562
564
|
|
|
563
565
|
**Configuration:**
|
|
564
566
|
|
|
565
|
-
Add two parameters to your auth provider
|
|
567
|
+
Add two parameters to your auth provider:
|
|
568
|
+
|
|
569
|
+
```python {8-12}
|
|
570
|
+
from key_value.aio.stores.redis import RedisStore
|
|
571
|
+
from key_value.aio.wrappers.encryption import FernetEncryptionWrapper
|
|
572
|
+
from cryptography.fernet import Fernet
|
|
566
573
|
|
|
567
|
-
```python {4-7}
|
|
568
574
|
auth = GitHubProvider(
|
|
569
575
|
client_id=os.environ["GITHUB_CLIENT_ID"],
|
|
570
576
|
client_secret=os.environ["GITHUB_CLIENT_SECRET"],
|
|
571
577
|
jwt_signing_key=os.environ["JWT_SIGNING_KEY"],
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
578
|
+
client_storage=FernetEncryptionWrapper(
|
|
579
|
+
key_value=RedisStore(host="redis.example.com", port=6379),
|
|
580
|
+
fernet=Fernet(os.environ["STORAGE_ENCRYPTION_KEY"])
|
|
581
|
+
),
|
|
582
|
+
base_url="https://your-server.com" # use HTTPS
|
|
575
583
|
)
|
|
576
584
|
```
|
|
577
585
|
|
|
578
|
-
Without explicit
|
|
586
|
+
Both parameters are required for production. Without an explicit signing key, keys are signed using a key derived from the client_secret, which will cause invalidation upon rotation of the client secret. Without persistent storage, tokens are local to the server and won't be trusted across hosts. **Wrap your storage backend in `FernetEncryptionWrapper` to encrypt sensitive OAuth tokens at rest** - without encryption, tokens are stored in plaintext.
|
|
579
587
|
|
|
580
|
-
For more details on the token architecture, see [OAuth Proxy
|
|
588
|
+
For more details on the token architecture and key management, see [OAuth Proxy Key and Storage Management](/servers/auth/oauth-proxy#key-and-storage-management).
|
|
581
589
|
|
|
582
590
|
## Testing Your Deployment
|
|
583
591
|
|
|
@@ -4,6 +4,8 @@ description: "Testing patterns and requirements for FastMCP"
|
|
|
4
4
|
icon: vial
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
+
import { VersionBadge } from "/snippets/version-badge.mdx"
|
|
8
|
+
|
|
7
9
|
Good tests are the foundation of reliable software. In FastMCP, we treat tests as first-class documentation that demonstrates how features work while protecting against regressions. Every new capability needs comprehensive tests that demonstrate correctness.
|
|
8
10
|
|
|
9
11
|
## FastMCP Tests
|
|
@@ -301,6 +303,8 @@ While in-memory testing covers most unit testing needs, you'll occasionally need
|
|
|
301
303
|
|
|
302
304
|
#### In-Process Network Testing (Preferred)
|
|
303
305
|
|
|
306
|
+
<VersionBadge version="2.13.0" />
|
|
307
|
+
|
|
304
308
|
For most network transport tests, use `run_server_async` with AnyIO task groups. This runs the server as a task in the same process, providing fast, deterministic tests with full debugger support:
|
|
305
309
|
|
|
306
310
|
```python
|
|
@@ -18,11 +18,17 @@ The OAuth proxy now issues its own JWT tokens to clients instead of forwarding u
|
|
|
18
18
|
|
|
19
19
|
The OAuth proxy now implements a token factory pattern - it receives tokens from your OAuth provider (GitHub, Google, etc.), encrypts and stores them, then issues its own FastMCP JWT tokens to clients. This requires cryptographic keys for JWT signing and token encryption.
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
**Default behavior (development):**
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
By default, FastMCP automatically manages keys based on your platform:
|
|
24
|
+
- **Mac/Windows**: Keys are auto-managed via system keyring, surviving server restarts with zero configuration. Suitable **only** for development and local testing.
|
|
25
|
+
- **Linux**: Keys are ephemeral (random salt at startup, regenerated on each restart).
|
|
24
26
|
|
|
25
|
-
|
|
27
|
+
This works fine for development and testing where re-authentication after restart is acceptable.
|
|
28
|
+
|
|
29
|
+
**For production:**
|
|
30
|
+
|
|
31
|
+
Production deployments must provide explicit keys and use persistent storage. Add these three things:
|
|
26
32
|
|
|
27
33
|
```python
|
|
28
34
|
auth = GitHubProvider(
|
|
@@ -30,16 +36,15 @@ auth = GitHubProvider(
|
|
|
30
36
|
client_secret=os.environ["GITHUB_CLIENT_SECRET"],
|
|
31
37
|
base_url="https://your-server.com",
|
|
32
38
|
|
|
33
|
-
#
|
|
39
|
+
# Explicit keys (required for production)
|
|
34
40
|
jwt_signing_key=os.environ["JWT_SIGNING_KEY"],
|
|
35
|
-
token_encryption_key=os.environ["TOKEN_ENCRYPTION_KEY"],
|
|
36
41
|
|
|
37
|
-
|
|
42
|
+
# Persistent network storage (required for production)
|
|
43
|
+
client_storage=RedisStore(host="redis.example.com", port=6379)
|
|
38
44
|
)
|
|
39
45
|
```
|
|
40
46
|
|
|
41
|
-
Both keys accept any secret string. Make sure they're different from each other.
|
|
42
|
-
|
|
43
47
|
**More information:**
|
|
44
48
|
- [OAuth Token Security](/deployment/http#oauth-token-security) - Complete production setup guide
|
|
49
|
+
- [Key and Storage Management](/servers/auth/oauth-proxy#key-and-storage-management) - Detailed explanation of defaults and production requirements
|
|
45
50
|
- [OAuth Proxy Parameters](/servers/auth/oauth-proxy#configuration-parameters) - Parameter documentation
|
|
@@ -19,10 +19,6 @@
|
|
|
19
19
|
"light": "#4cc9f0",
|
|
20
20
|
"primary": "#2d00f7"
|
|
21
21
|
},
|
|
22
|
-
"fonts": {
|
|
23
|
-
"heading": { "family": "Google Sans" },
|
|
24
|
-
"body": { "family": "BlinkMacSystemFont" }
|
|
25
|
-
},
|
|
26
22
|
"contextual": {
|
|
27
23
|
"options": ["copy", "view"]
|
|
28
24
|
},
|
|
@@ -240,7 +236,8 @@
|
|
|
240
236
|
"patterns/tool-transformation",
|
|
241
237
|
"patterns/decorating-methods",
|
|
242
238
|
"patterns/cli",
|
|
243
|
-
"patterns/contrib"
|
|
239
|
+
"patterns/contrib",
|
|
240
|
+
"patterns/testing"
|
|
244
241
|
]
|
|
245
242
|
},
|
|
246
243
|
{
|
|
@@ -149,6 +149,48 @@ When you run the client for the first time:
|
|
|
149
149
|
2. After you authorize the app, you'll be redirected back
|
|
150
150
|
3. The client receives the token and can make authenticated requests
|
|
151
151
|
|
|
152
|
+
## Production Configuration
|
|
153
|
+
|
|
154
|
+
<VersionBadge version="2.13.0" />
|
|
155
|
+
|
|
156
|
+
For production deployments with persistent token management across server restarts, configure `jwt_signing_key`, and `client_storage`:
|
|
157
|
+
|
|
158
|
+
```python server.py
|
|
159
|
+
import os
|
|
160
|
+
from fastmcp import FastMCP
|
|
161
|
+
from fastmcp.server.auth.providers.auth0 import Auth0Provider
|
|
162
|
+
from key_value.aio.stores.redis import RedisStore
|
|
163
|
+
from key_value.aio.wrappers.encryption import FernetEncryptionWrapper
|
|
164
|
+
from cryptography.fernet import Fernet
|
|
165
|
+
|
|
166
|
+
# Production setup with encrypted persistent token storage
|
|
167
|
+
auth_provider = Auth0Provider(
|
|
168
|
+
config_url="https://.../.well-known/openid-configuration",
|
|
169
|
+
client_id="tv2ObNgaZAWWhhycr7Bz1LU2mxlnsmsB",
|
|
170
|
+
client_secret="vPYqbjemq...",
|
|
171
|
+
audience="https://...",
|
|
172
|
+
base_url="https://your-production-domain.com",
|
|
173
|
+
|
|
174
|
+
# Production token management
|
|
175
|
+
jwt_signing_key=os.environ["JWT_SIGNING_KEY"],
|
|
176
|
+
client_storage=FernetEncryptionWrapper(
|
|
177
|
+
key_value=RedisStore(
|
|
178
|
+
host=os.environ["REDIS_HOST"],
|
|
179
|
+
port=int(os.environ["REDIS_PORT"])
|
|
180
|
+
),
|
|
181
|
+
fernet=Fernet(os.environ["STORAGE_ENCRYPTION_KEY"])
|
|
182
|
+
)
|
|
183
|
+
)
|
|
184
|
+
|
|
185
|
+
mcp = FastMCP(name="Production Auth0 App", auth=auth_provider)
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
<Note>
|
|
189
|
+
Parameters (`jwt_signing_key` and `client_storage`) work together to ensure tokens and client registrations survive server restarts. **Wrap your storage in `FernetEncryptionWrapper` to encrypt sensitive OAuth tokens at rest** - without it, tokens are stored in plaintext. Store secrets in environment variables and use a persistent storage backend like Redis for distributed deployments.
|
|
190
|
+
|
|
191
|
+
For complete details on these parameters, see the [OAuth Proxy documentation](/servers/auth/oauth-proxy#configuration-parameters).
|
|
192
|
+
</Note>
|
|
193
|
+
|
|
152
194
|
<Info>
|
|
153
195
|
The client caches tokens locally, so you won't need to re-authenticate for subsequent runs unless the token expires or you explicitly clear the cache.
|
|
154
196
|
</Info>
|
|
@@ -196,6 +196,48 @@ When you run the client for the first time:
|
|
|
196
196
|
The client caches tokens locally, so you won't need to re-authenticate for subsequent runs unless the token expires or you explicitly clear the cache.
|
|
197
197
|
</Info>
|
|
198
198
|
|
|
199
|
+
## Production Configuration
|
|
200
|
+
|
|
201
|
+
<VersionBadge version="2.13.0" />
|
|
202
|
+
|
|
203
|
+
For production deployments with persistent token management across server restarts, configure `jwt_signing_key`, and `client_storage`:
|
|
204
|
+
|
|
205
|
+
```python server.py
|
|
206
|
+
import os
|
|
207
|
+
from fastmcp import FastMCP
|
|
208
|
+
from fastmcp.server.auth.providers.aws import AWSCognitoProvider
|
|
209
|
+
from key_value.aio.stores.redis import RedisStore
|
|
210
|
+
from key_value.aio.wrappers.encryption import FernetEncryptionWrapper
|
|
211
|
+
from cryptography.fernet import Fernet
|
|
212
|
+
|
|
213
|
+
# Production setup with encrypted persistent token storage
|
|
214
|
+
auth_provider = AWSCognitoProvider(
|
|
215
|
+
user_pool_id="eu-central-1_XXXXXXXXX",
|
|
216
|
+
aws_region="eu-central-1",
|
|
217
|
+
client_id="your-app-client-id",
|
|
218
|
+
client_secret="your-app-client-secret",
|
|
219
|
+
base_url="https://your-production-domain.com",
|
|
220
|
+
|
|
221
|
+
# Production token management
|
|
222
|
+
jwt_signing_key=os.environ["JWT_SIGNING_KEY"],
|
|
223
|
+
client_storage=FernetEncryptionWrapper(
|
|
224
|
+
key_value=RedisStore(
|
|
225
|
+
host=os.environ["REDIS_HOST"],
|
|
226
|
+
port=int(os.environ["REDIS_PORT"])
|
|
227
|
+
),
|
|
228
|
+
fernet=Fernet(os.environ["STORAGE_ENCRYPTION_KEY"])
|
|
229
|
+
)
|
|
230
|
+
)
|
|
231
|
+
|
|
232
|
+
mcp = FastMCP(name="Production AWS Cognito App", auth=auth_provider)
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
<Note>
|
|
236
|
+
Parameters (`jwt_signing_key` and `client_storage`) work together to ensure tokens and client registrations survive server restarts. **Wrap your storage in `FernetEncryptionWrapper` to encrypt sensitive OAuth tokens at rest** - without it, tokens are stored in plaintext. Store secrets in environment variables and use a persistent storage backend like Redis for distributed deployments.
|
|
237
|
+
|
|
238
|
+
For complete details on these parameters, see the [OAuth Proxy documentation](/servers/auth/oauth-proxy#configuration-parameters).
|
|
239
|
+
</Note>
|
|
240
|
+
|
|
199
241
|
## Environment Variables
|
|
200
242
|
|
|
201
243
|
For production deployments, use environment variables instead of hardcoding credentials.
|
|
@@ -205,6 +205,48 @@ When you run the client for the first time:
|
|
|
205
205
|
The client caches tokens locally, so you won't need to re-authenticate for subsequent runs unless the token expires or you explicitly clear the cache.
|
|
206
206
|
</Info>
|
|
207
207
|
|
|
208
|
+
## Production Configuration
|
|
209
|
+
|
|
210
|
+
<VersionBadge version="2.13.0" />
|
|
211
|
+
|
|
212
|
+
For production deployments with persistent token management across server restarts, configure `jwt_signing_key` and `client_storage`:
|
|
213
|
+
|
|
214
|
+
```python server.py
|
|
215
|
+
import os
|
|
216
|
+
from fastmcp import FastMCP
|
|
217
|
+
from fastmcp.server.auth.providers.azure import AzureProvider
|
|
218
|
+
from key_value.aio.stores.redis import RedisStore
|
|
219
|
+
from key_value.aio.wrappers.encryption import FernetEncryptionWrapper
|
|
220
|
+
from cryptography.fernet import Fernet
|
|
221
|
+
|
|
222
|
+
# Production setup with encrypted persistent token storage
|
|
223
|
+
auth_provider = AzureProvider(
|
|
224
|
+
client_id="835f09b6-0f0f-40cc-85cb-f32c5829a149",
|
|
225
|
+
client_secret="your-client-secret",
|
|
226
|
+
tenant_id="08541b6e-646d-43de-a0eb-834e6713d6d5",
|
|
227
|
+
base_url="https://your-production-domain.com",
|
|
228
|
+
required_scopes=["your-scope"],
|
|
229
|
+
|
|
230
|
+
# Production token management
|
|
231
|
+
jwt_signing_key=os.environ["JWT_SIGNING_KEY"],
|
|
232
|
+
client_storage=FernetEncryptionWrapper(
|
|
233
|
+
key_value=RedisStore(
|
|
234
|
+
host=os.environ["REDIS_HOST"],
|
|
235
|
+
port=int(os.environ["REDIS_PORT"])
|
|
236
|
+
),
|
|
237
|
+
fernet=Fernet(os.environ["STORAGE_ENCRYPTION_KEY"])
|
|
238
|
+
)
|
|
239
|
+
)
|
|
240
|
+
|
|
241
|
+
mcp = FastMCP(name="Production Azure App", auth=auth_provider)
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
<Note>
|
|
245
|
+
Parameters (`jwt_signing_key` and `client_storage`) work together to ensure tokens and client registrations survive server restarts. **Wrap your storage in `FernetEncryptionWrapper` to encrypt sensitive OAuth tokens at rest** - without it, tokens are stored in plaintext. Store secrets in environment variables and use a persistent storage backend like Redis for distributed deployments.
|
|
246
|
+
|
|
247
|
+
For complete details on these parameters, see the [OAuth Proxy documentation](/servers/auth/oauth-proxy#configuration-parameters).
|
|
248
|
+
</Note>
|
|
249
|
+
|
|
208
250
|
## Environment Variables
|
|
209
251
|
|
|
210
252
|
<VersionBadge version="2.12.1" />
|
|
@@ -135,6 +135,46 @@ When you run the client for the first time:
|
|
|
135
135
|
The client caches tokens locally, so you won't need to re-authenticate for subsequent runs unless the token expires or you explicitly clear the cache.
|
|
136
136
|
</Info>
|
|
137
137
|
|
|
138
|
+
## Production Configuration
|
|
139
|
+
|
|
140
|
+
<VersionBadge version="2.13.0" />
|
|
141
|
+
|
|
142
|
+
For production deployments with persistent token management across server restarts, configure `jwt_signing_key` and `client_storage`:
|
|
143
|
+
|
|
144
|
+
```python server.py
|
|
145
|
+
import os
|
|
146
|
+
from fastmcp import FastMCP
|
|
147
|
+
from fastmcp.server.auth.providers.github import GitHubProvider
|
|
148
|
+
from key_value.aio.stores.redis import RedisStore
|
|
149
|
+
from key_value.aio.wrappers.encryption import FernetEncryptionWrapper
|
|
150
|
+
from cryptography.fernet import Fernet
|
|
151
|
+
|
|
152
|
+
# Production setup with encrypted persistent token storage
|
|
153
|
+
auth_provider = GitHubProvider(
|
|
154
|
+
client_id="Ov23liAbcDefGhiJkLmN",
|
|
155
|
+
client_secret="github_pat_...",
|
|
156
|
+
base_url="https://your-production-domain.com",
|
|
157
|
+
|
|
158
|
+
# Production token management
|
|
159
|
+
jwt_signing_key=os.environ["JWT_SIGNING_KEY"],
|
|
160
|
+
client_storage=FernetEncryptionWrapper(
|
|
161
|
+
key_value=RedisStore(
|
|
162
|
+
host=os.environ["REDIS_HOST"],
|
|
163
|
+
port=int(os.environ["REDIS_PORT"])
|
|
164
|
+
),
|
|
165
|
+
fernet=Fernet(os.environ["STORAGE_ENCRYPTION_KEY"])
|
|
166
|
+
)
|
|
167
|
+
)
|
|
168
|
+
|
|
169
|
+
mcp = FastMCP(name="Production GitHub App", auth=auth_provider)
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
<Note>
|
|
173
|
+
Parameters (`jwt_signing_key` and `client_storage`) work together to ensure tokens and client registrations survive server restarts. **Wrap your storage in `FernetEncryptionWrapper` to encrypt sensitive OAuth tokens at rest** - without it, tokens are stored in plaintext. Store secrets in environment variables and use a persistent storage backend like Redis for distributed deployments.
|
|
174
|
+
|
|
175
|
+
For complete details on these parameters, see the [OAuth Proxy documentation](/servers/auth/oauth-proxy#configuration-parameters).
|
|
176
|
+
</Note>
|
|
177
|
+
|
|
138
178
|
## Environment Variables
|
|
139
179
|
|
|
140
180
|
<VersionBadge version="2.12.1" />
|
|
@@ -148,6 +148,47 @@ When you run the client for the first time:
|
|
|
148
148
|
The client caches tokens locally, so you won't need to re-authenticate for subsequent runs unless the token expires or you explicitly clear the cache.
|
|
149
149
|
</Info>
|
|
150
150
|
|
|
151
|
+
## Production Configuration
|
|
152
|
+
|
|
153
|
+
<VersionBadge version="2.13.0" />
|
|
154
|
+
|
|
155
|
+
For production deployments with persistent token management across server restarts, configure `jwt_signing_key` and `client_storage`:
|
|
156
|
+
|
|
157
|
+
```python server.py
|
|
158
|
+
import os
|
|
159
|
+
from fastmcp import FastMCP
|
|
160
|
+
from fastmcp.server.auth.providers.google import GoogleProvider
|
|
161
|
+
from key_value.aio.stores.redis import RedisStore
|
|
162
|
+
from key_value.aio.wrappers.encryption import FernetEncryptionWrapper
|
|
163
|
+
from cryptography.fernet import Fernet
|
|
164
|
+
|
|
165
|
+
# Production setup with encrypted persistent token storage
|
|
166
|
+
auth_provider = GoogleProvider(
|
|
167
|
+
client_id="123456789.apps.googleusercontent.com",
|
|
168
|
+
client_secret="GOCSPX-abc123...",
|
|
169
|
+
base_url="https://your-production-domain.com",
|
|
170
|
+
required_scopes=["openid", "https://www.googleapis.com/auth/userinfo.email"],
|
|
171
|
+
|
|
172
|
+
# Production token management
|
|
173
|
+
jwt_signing_key=os.environ["JWT_SIGNING_KEY"],
|
|
174
|
+
client_storage=FernetEncryptionWrapper(
|
|
175
|
+
key_value=RedisStore(
|
|
176
|
+
host=os.environ["REDIS_HOST"],
|
|
177
|
+
port=int(os.environ["REDIS_PORT"])
|
|
178
|
+
),
|
|
179
|
+
fernet=Fernet(os.environ["STORAGE_ENCRYPTION_KEY"])
|
|
180
|
+
)
|
|
181
|
+
)
|
|
182
|
+
|
|
183
|
+
mcp = FastMCP(name="Production Google App", auth=auth_provider)
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
<Note>
|
|
187
|
+
Parameters (`jwt_signing_key` and `client_storage`) work together to ensure tokens and client registrations survive server restarts. **Wrap your storage in `FernetEncryptionWrapper` to encrypt sensitive OAuth tokens at rest** - without it, tokens are stored in plaintext. Store secrets in environment variables and use a persistent storage backend like Redis for distributed deployments.
|
|
188
|
+
|
|
189
|
+
For complete details on these parameters, see the [OAuth Proxy documentation](/servers/auth/oauth-proxy#configuration-parameters).
|
|
190
|
+
</Note>
|
|
191
|
+
|
|
151
192
|
## Environment Variables
|
|
152
193
|
|
|
153
194
|
<VersionBadge version="2.12.1" />
|
|
@@ -126,6 +126,48 @@ When you run the client for the first time:
|
|
|
126
126
|
The client caches tokens locally, so you won't need to re-authenticate for subsequent runs unless the token expires or you explicitly clear the cache.
|
|
127
127
|
</Info>
|
|
128
128
|
|
|
129
|
+
## Production Configuration
|
|
130
|
+
|
|
131
|
+
<VersionBadge version="2.13.0" />
|
|
132
|
+
|
|
133
|
+
For production deployments with persistent token management across server restarts, configure `jwt_signing_key`, and `client_storage`:
|
|
134
|
+
|
|
135
|
+
```python server.py
|
|
136
|
+
import os
|
|
137
|
+
from fastmcp import FastMCP
|
|
138
|
+
from fastmcp.server.auth.providers.workos import WorkOSProvider
|
|
139
|
+
from key_value.aio.stores.redis import RedisStore
|
|
140
|
+
from key_value.aio.wrappers.encryption import FernetEncryptionWrapper
|
|
141
|
+
from cryptography.fernet import Fernet
|
|
142
|
+
|
|
143
|
+
# Production setup with encrypted persistent token storage
|
|
144
|
+
auth = WorkOSProvider(
|
|
145
|
+
client_id="client_YOUR_CLIENT_ID",
|
|
146
|
+
client_secret="YOUR_CLIENT_SECRET",
|
|
147
|
+
authkit_domain="https://your-app.authkit.app",
|
|
148
|
+
base_url="https://your-production-domain.com",
|
|
149
|
+
required_scopes=["openid", "profile", "email"],
|
|
150
|
+
|
|
151
|
+
# Production token management
|
|
152
|
+
jwt_signing_key=os.environ["JWT_SIGNING_KEY"],
|
|
153
|
+
client_storage=FernetEncryptionWrapper(
|
|
154
|
+
key_value=RedisStore(
|
|
155
|
+
host=os.environ["REDIS_HOST"],
|
|
156
|
+
port=int(os.environ["REDIS_PORT"])
|
|
157
|
+
),
|
|
158
|
+
fernet=Fernet(os.environ["STORAGE_ENCRYPTION_KEY"])
|
|
159
|
+
)
|
|
160
|
+
)
|
|
161
|
+
|
|
162
|
+
mcp = FastMCP(name="Production WorkOS App", auth=auth)
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
<Note>
|
|
166
|
+
Parameters (`jwt_signing_key` and `client_storage`) work together to ensure tokens and client registrations survive server restarts. **Wrap your storage in `FernetEncryptionWrapper` to encrypt sensitive OAuth tokens at rest** - without it, tokens are stored in plaintext. Store secrets in environment variables and use a persistent storage backend like Redis for distributed deployments.
|
|
167
|
+
|
|
168
|
+
For complete details on these parameters, see the [OAuth Proxy documentation](/servers/auth/oauth-proxy#configuration-parameters).
|
|
169
|
+
</Note>
|
|
170
|
+
|
|
129
171
|
## Environment Variables
|
|
130
172
|
|
|
131
173
|
<VersionBadge version="2.12.1" />
|