fastmcp 2.13.0rc1__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.0rc1 → fastmcp-2.13.0rc3}/.github/workflows/martian-issue-triage.yml +5 -4
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/.github/workflows/marvin-dedupe-issues.yml +1 -1
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/.github/workflows/marvin-label-triage.yml +1 -1
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/AGENTS.md +2 -2
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/PKG-INFO +5 -5
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/README.md +1 -2
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/changelog.mdx +15 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/clients/elicitation.mdx +0 -1
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/clients/sampling.mdx +3 -48
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/deployment/http.mdx +85 -16
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/development/tests.mdx +4 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/development/upgrade-guide.mdx +14 -8
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/docs.json +19 -21
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/getting-started/welcome.mdx +0 -1
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/auth0.mdx +42 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/aws-cognito.mdx +52 -13
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/azure.mdx +42 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/fastapi.mdx +6 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/github.mdx +40 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/google.mdx +41 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/workos.mdx +42 -0
- fastmcp-2.13.0rc3/docs/patterns/testing.mdx +85 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-auth-oauth.mdx +12 -12
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-oauth_callback.mdx +13 -6
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-transports.mdx +7 -7
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-jwt_issuer.mdx +4 -4
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-oauth_proxy.mdx +24 -21
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-oidc_proxy.mdx +2 -2
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-aws.mdx +1 -1
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-azure.mdx +1 -1
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-workos.mdx +3 -3
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-context.mdx +28 -28
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-http.mdx +8 -8
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-middleware-error_handling.mdx +5 -5
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-cli.mdx +3 -3
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-tests.mdx +25 -4
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-ui.mdx +9 -8
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/servers/auth/authentication.mdx +0 -1
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/servers/auth/full-oauth-server.mdx +1 -1
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/servers/auth/oauth-proxy.mdx +68 -27
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/servers/auth/oidc-proxy.mdx +47 -4
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/servers/auth/token-verification.mdx +0 -1
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/servers/composition.mdx +1 -1
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/servers/context.mdx +30 -5
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/servers/elicitation.mdx +0 -1
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/servers/icons.mdx +1 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/servers/middleware.mdx +67 -4
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/servers/sampling.mdx +85 -6
- fastmcp-2.13.0rc3/docs/servers/storage-backends.mdx +271 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/servers/tools.mdx +1 -1
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/updates.mdx +10 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/auth/github_oauth/server.py +1 -10
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/memory.py +3 -3
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/smart_home/src/smart_home/hub.py +3 -8
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/smart_home/src/smart_home/lights/hue_utils.py +1 -1
- {fastmcp-2.13.0rc1 → 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.0rc1 → fastmcp-2.13.0rc3}/pyproject.toml +4 -2
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/cli/cli.py +1 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/cli/install/claude_code.py +3 -3
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/client/oauth_callback.py +6 -2
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/client/transports.py +1 -0
- {fastmcp-2.13.0rc1 → 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.0rc1 → 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.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/oauth_proxy.py +238 -228
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/oidc_proxy.py +16 -1
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/auth0.py +30 -17
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/aws.py +17 -2
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/azure.py +69 -31
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/github.py +17 -2
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/google.py +18 -3
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/workos.py +17 -2
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/context.py +33 -2
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/http.py +6 -3
- fastmcp-2.13.0rc3/src/fastmcp/server/middleware/tool_injection.py +116 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/server.py +47 -26
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/settings.py +2 -1
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/tools/tool_manager.py +8 -4
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/cli.py +62 -22
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/ui.py +126 -6
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/server/openapi/test_openapi_performance.py +1 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/server/openapi/test_performance_comparison.py +0 -6
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/integration_tests/auth/test_github_provider_integration.py +2 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/auth/providers/test_auth0.py +7 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/auth/providers/test_aws.py +6 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/auth/providers/test_azure.py +44 -25
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/auth/providers/test_github.py +7 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/auth/providers/test_google.py +5 -0
- {fastmcp-2.13.0rc1 → 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.0rc1 → fastmcp-2.13.0rc3}/tests/server/auth/test_jwt_issuer.py +36 -103
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/auth/test_oauth_consent_flow.py +5 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/auth/test_oauth_proxy.py +18 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/auth/test_oauth_proxy_redirect_validation.py +5 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/auth/test_oauth_proxy_storage.py +12 -9
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/auth/test_oidc_proxy.py +6 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/http/test_http_auth_middleware.py +29 -16
- fastmcp-2.13.0rc3/tests/server/middleware/test_tool_injection.py +498 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/test_server.py +48 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/uv.lock +130 -10
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/.ccignore +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/.cursor/rules/core-mcp-objects.mdc +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/.cursor/worktrees.json +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/.github/ISSUE_TEMPLATE/bug.yml +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/.github/ISSUE_TEMPLATE/enhancement.yml +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/.github/copilot-instructions.md +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/.github/dependabot.yml +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/.github/pull_request_template.md +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/.github/release.yml +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/.github/workflows/auto-close-duplicates.yml +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/.github/workflows/auto-close-needs-mre.yml +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/.github/workflows/marvin.yml +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/.github/workflows/publish.yml +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/.github/workflows/run-static.yml +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/.github/workflows/run-tests.yml +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/.github/workflows/update-config-schema.yml +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/.github/workflows/update-sdk-docs.yml +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/.gitignore +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/.pre-commit-config.yaml +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/CLAUDE.md +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/CODE_OF_CONDUCT.md +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/LICENSE +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/SECURITY.md +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/.ccignore +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/.cursor/rules/mintlify.mdc +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/assets/brand/blue-logo.png +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/assets/brand/f-watercolor-waves-dark.png +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/assets/brand/f-watercolor-waves.png +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/assets/brand/favicon.svg +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/assets/brand/thumbnail-background.png +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/assets/brand/wordmark-padded.png +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/assets/brand/wordmark-watercolor-rainbow-dark.png +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/assets/brand/wordmark-watercolor-rainbow.png +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/assets/brand/wordmark-watercolor-waves-dark.png +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/assets/brand/wordmark-watercolor-waves.png +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/assets/brand/wordmark-white-padded.png +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/assets/brand/wordmark-white.png +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/assets/brand/wordmark.png +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/assets/images/fastmcp_cloud/connect.png +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/assets/images/fastmcp_cloud/create_project.png +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/assets/images/fastmcp_cloud/deployment.png +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/assets/images/fastmcp_cloud/quickstart.png +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/assets/images/oauth-proxy-consent-screen.png +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/assets/images/tutorial-rest-api-result.png +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/assets/schemas/mcp_server_config/latest.json +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/assets/schemas/mcp_server_config/v1.json +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/assets/updates/release-2-7.png +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/clients/auth/bearer.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/clients/auth/oauth.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/clients/client.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/clients/logging.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/clients/messages.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/clients/progress.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/clients/prompts.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/clients/resources.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/clients/roots.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/clients/tools.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/clients/transports.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/community/README.md +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/community/showcase.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/css/banner.css +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/css/python-sdk.css +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/css/style.css +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/css/version-badge.css +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/deployment/fastmcp-cloud.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/deployment/running-server.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/deployment/server-configuration.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/development/contributing.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/development/releases.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/getting-started/installation.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/getting-started/quickstart.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/anthropic.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/authkit.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/chatgpt.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/claude-code.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/claude-desktop.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/cursor-install-mcp.png +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/cursor.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/descope.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/eunomia-authorization.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/gemini-cli.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/gemini.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/images/authkit/enable_dcr.png +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/images/permit/abac_condition_example.png +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/images/permit/abac_policy_example.png +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/images/permit/policy_mapping.png +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/images/permit/role_assignement.png +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/mcp-json-configuration.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/openai.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/openapi.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/permit.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/scalekit.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/patterns/cli.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/patterns/contrib.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/patterns/decorating-methods.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/patterns/tool-transformation.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/public/schemas/fastmcp.json/latest.json +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/public/schemas/fastmcp.json/v1.json +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-cli-__init__.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-cli-cli.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-cli-install-__init__.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-cli-install-claude_code.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-cli-install-claude_desktop.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-cli-install-cursor.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-cli-install-gemini_cli.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-cli-install-mcp_json.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-cli-install-shared.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-cli-run.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-__init__.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-auth-__init__.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-auth-bearer.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-client.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-elicitation.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-logging.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-messages.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-progress.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-roots.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-sampling.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-exceptions.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-mcp_config.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-prompts-__init__.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-prompts-prompt.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-prompts-prompt_manager.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-resources-__init__.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-resources-resource.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-resources-resource_manager.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-resources-template.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-resources-types.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-__init__.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-__init__.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-auth.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-__init__.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-auth0.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-bearer.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-descope.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-github.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-google.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-in_memory.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-introspection.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-jwt.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-scalekit.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-supabase.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-redirect_validation.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-dependencies.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-elicitation.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-low_level.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-middleware-__init__.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-middleware-caching.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-middleware-logging.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-middleware-middleware.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-middleware-rate_limiting.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-middleware-timing.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-openapi.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-proxy.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-server.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-settings.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-tools-__init__.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-tools-tool.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-tools-tool_manager.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-tools-tool_transform.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-__init__.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-auth.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-components.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-exceptions.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-http.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-inspect.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-json_schema.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-json_schema_type.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-logging.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-mcp_config.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-mcp_server_config-__init__.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-__init__.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-environments-__init__.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-environments-base.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-environments-uv.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-mcp_server_config.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-sources-__init__.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-sources-base.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-sources-filesystem.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-openapi.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-types.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/servers/auth/remote-oauth.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/servers/logging.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/servers/progress.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/servers/prompts.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/servers/proxy.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/servers/resources.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/servers/server.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/snippets/local-focus.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/snippets/version-badge.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/snippets/youtube-embed.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/tutorials/create-mcp-server.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/tutorials/mcp.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/tutorials/rest-api.mdx +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/atproto_mcp/README.md +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/atproto_mcp/demo.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/atproto_mcp/fastmcp.json +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/atproto_mcp/pyproject.toml +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/atproto_mcp/src/atproto_mcp/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/atproto_mcp/src/atproto_mcp/__main__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/atproto_mcp/src/atproto_mcp/_atproto/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/atproto_mcp/src/atproto_mcp/_atproto/_client.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/atproto_mcp/src/atproto_mcp/_atproto/_posts.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/atproto_mcp/src/atproto_mcp/_atproto/_profile.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/atproto_mcp/src/atproto_mcp/_atproto/_read.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/atproto_mcp/src/atproto_mcp/_atproto/_social.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/atproto_mcp/src/atproto_mcp/py.typed +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/atproto_mcp/src/atproto_mcp/server.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/atproto_mcp/src/atproto_mcp/settings.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/atproto_mcp/src/atproto_mcp/types.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/auth/authkit_dcr/README.md +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/auth/authkit_dcr/client.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/auth/authkit_dcr/server.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/auth/aws_oauth/README.md +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/auth/aws_oauth/client.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/auth/aws_oauth/requirements.txt +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/auth/aws_oauth/server.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/auth/azure_oauth/README.md +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/auth/azure_oauth/client.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/auth/azure_oauth/server.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/auth/github_oauth/README.md +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/auth/github_oauth/client.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/auth/google_oauth/README.md +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/auth/google_oauth/client.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/auth/google_oauth/server.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/auth/scalekit_oauth/README.md +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/auth/scalekit_oauth/client.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/auth/scalekit_oauth/server.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/auth/workos_oauth/README.md +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/auth/workos_oauth/client.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/auth/workos_oauth/server.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/complex_inputs.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/config_server.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/desktop.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/echo.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/fastmcp_config/env_interpolation_example.json +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/fastmcp_config/fastmcp.json +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/fastmcp_config/full_example.fastmcp.json +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/fastmcp_config/server.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/fastmcp_config/simple.fastmcp.json +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/fastmcp_config_demo/README.md +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/fastmcp_config_demo/fastmcp.json +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/fastmcp_config_demo/server.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/get_file.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/in_memory_proxy_example.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/memory.fastmcp.json +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/mount_example.fastmcp.json +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/mount_example.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/sampling.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/sampling_fallback.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/screenshot.fastmcp.json +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/screenshot.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/serializer.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/simple_echo.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/smart_home/README.md +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/smart_home/hub.fastmcp.json +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/smart_home/lights.fastmcp.json +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/smart_home/pyproject.toml +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/smart_home/src/smart_home/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/smart_home/src/smart_home/__main__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/smart_home/src/smart_home/lights/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/smart_home/src/smart_home/lights/server.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/smart_home/src/smart_home/py.typed +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/tags_example.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/text_me.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/justfile +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/scripts/auto_close_duplicates.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/scripts/auto_close_needs_mre.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/cli/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/cli/install/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/cli/install/claude_desktop.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/cli/install/cursor.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/cli/install/gemini_cli.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/cli/install/mcp_json.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/cli/install/shared.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/cli/run.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/client/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/client/auth/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/client/auth/bearer.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/client/auth/oauth.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/client/client.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/client/elicitation.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/client/logging.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/client/messages.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/client/progress.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/client/roots.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/client/sampling.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/README.md +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/component_manager/README.md +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/component_manager/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/component_manager/component_manager.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/component_manager/component_service.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/component_manager/example.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/mcp_mixin/README.md +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/mcp_mixin/example.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/exceptions.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/sampling/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/sampling/handlers/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/sampling/handlers/base.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/sampling/handlers/openai.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/server/openapi/README.md +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/server/openapi/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/server/openapi/components.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/server/openapi/routing.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/server/openapi/server.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/utilities/openapi/README.md +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/utilities/openapi/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/utilities/openapi/director.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/utilities/openapi/formatters.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/utilities/openapi/json_schema_converter.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/utilities/openapi/models.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/utilities/openapi/parser.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/utilities/openapi/schemas.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/mcp_config.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/prompts/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/prompts/prompt.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/prompts/prompt_manager.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/py.typed +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/resources/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/resources/resource.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/resources/resource_manager.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/resources/template.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/auth.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/bearer.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/descope.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/in_memory.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/introspection.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/jwt.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/scalekit.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/supabase.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/redirect_validation.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/dependencies.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/elicitation.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/low_level.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/middleware/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/middleware/caching.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/middleware/error_handling.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/middleware/logging.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/middleware/middleware.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/middleware/rate_limiting.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/middleware/timing.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/openapi.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/proxy.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/sampling/handler.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/tools/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/tools/tool.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/tools/tool_transform.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/auth.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/components.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/exceptions.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/http.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/inspect.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/json_schema.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/json_schema_type.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/logging.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/mcp_config.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/openapi.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/tests.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/types.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/cli/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/cli/test_cli.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/cli/test_config.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/cli/test_cursor.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/cli/test_install.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/cli/test_mcp_server_config_integration.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/cli/test_mcp_server_config_schema.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/cli/test_project_prepare.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/cli/test_run.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/cli/test_run_config.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/cli/test_server_args.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/cli/test_shared.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/cli/test_with_argv.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/client/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/client/auth/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/client/auth/test_oauth_client.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/client/test_client.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/client/test_elicitation.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/client/test_logs.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/client/test_notifications.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/client/test_oauth_callback_xss.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/client/test_openapi_experimental.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/client/test_openapi_legacy.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/client/test_progress.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/client/test_roots.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/client/test_sampling.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/client/test_sse.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/client/test_stdio.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/client/test_streamable_http.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/client/transports/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/client/transports/test_uv_transport.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/conftest.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/contrib/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/contrib/test_bulk_tool_caller.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/contrib/test_component_manager.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/contrib/test_mcp_mixin.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/deprecated/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/deprecated/test_bearer_auth_provider.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/deprecated/test_dependencies.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/deprecated/test_deprecated.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/deprecated/test_mount_import_arg_order.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/deprecated/test_mount_separators.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/deprecated/test_output_schema_false.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/deprecated/test_proxy_client.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/deprecated/test_resource_prefixes.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/deprecated/test_route_type_ignore.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/deprecated/test_settings.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/README.md +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/README.md +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/conftest.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/server/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/server/openapi/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/server/openapi/test_comprehensive.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/server/openapi/test_deepobject_style.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/server/openapi/test_end_to_end_compatibility.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/server/openapi/test_openapi_features.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/server/openapi/test_parameter_collisions.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/server/openapi/test_server.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/utilities/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/utilities/openapi/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/utilities/openapi/conftest.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/utilities/openapi/test_allof_requestbody.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/utilities/openapi/test_direct_array_schemas.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/utilities/openapi/test_director.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/utilities/openapi/test_legacy_compatibility.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/utilities/openapi/test_models.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/utilities/openapi/test_nullable_fields.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/utilities/openapi/test_parser.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/utilities/openapi/test_schemas.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/utilities/openapi/test_transitive_references.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/sampling/test_openai_handler.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/integration_tests/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/integration_tests/auth/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/integration_tests/conftest.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/integration_tests/test_github_mcp_remote.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/prompts/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/prompts/test_prompt.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/prompts/test_prompt_manager.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/resources/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/resources/test_file_resources.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/resources/test_function_resources.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/resources/test_resource_manager.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/resources/test_resource_template.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/resources/test_resource_template_meta.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/resources/test_resources.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/auth/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/auth/providers/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/auth/providers/test_descope.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/auth/providers/test_introspection.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/auth/providers/test_scalekit.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/auth/providers/test_supabase.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/auth/test_auth_provider.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/auth/test_jwt_provider.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/auth/test_oauth_mounting.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/auth/test_redirect_validation.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/auth/test_remote_auth_provider.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/auth/test_static_token_verifier.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/http/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/http/test_bearer_auth_backend.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/http/test_custom_routes.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/http/test_http_dependencies.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/http/test_http_middleware.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/middleware/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/middleware/test_caching.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/middleware/test_error_handling.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/middleware/test_initialization_middleware.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/middleware/test_logging.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/middleware/test_middleware.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/middleware/test_rate_limiting.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/middleware/test_timing.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/openapi/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/openapi/conftest.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/openapi/test_advanced_behavior.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/openapi/test_basic_functionality.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/openapi/test_configuration.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/openapi/test_deepobject_style.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/openapi/test_description_propagation.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/openapi/test_explode_integration.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/openapi/test_openapi_compatibility.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/openapi/test_openapi_path_parameters.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/openapi/test_optional_parameters.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/openapi/test_parameter_collisions.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/openapi/test_route_map_fn.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/proxy/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/proxy/test_proxy_client.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/proxy/test_proxy_server.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/proxy/test_stateful_proxy_client.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/test_app_state.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/test_auth_integration.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/test_context.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/test_experimental_openapi_feature_flag.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/test_file_server.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/test_icons.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/test_import_server.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/test_input_validation.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/test_log_level.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/test_logging.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/test_mount.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/test_resource_prefix_formats.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/test_run_server.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/test_server_interactions.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/test_server_lifespan.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/test_streamable_http_no_redirect.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/test_tool_annotations.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/test_tool_exclude_args.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/test_tool_transformation.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/test_examples.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/test_mcp_config.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/tools/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/tools/test_tool.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/tools/test_tool_future_annotations.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/tools/test_tool_manager.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/tools/test_tool_transform.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/utilities/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/utilities/openapi/__init__.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/utilities/openapi/conftest.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/utilities/openapi/test_nullable_fields.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/utilities/openapi/test_openapi.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/utilities/openapi/test_openapi_advanced.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/utilities/openapi/test_openapi_fastapi.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/utilities/openapi/test_openapi_output_schemas.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/utilities/test_cli.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/utilities/test_components.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/utilities/test_inspect.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/utilities/test_json_schema.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/utilities/test_json_schema_type.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/utilities/test_logging.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/utilities/test_tests.py +0 -0
- {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/utilities/test_typeadapter.py +0 -0
- {fastmcp-2.13.0rc1 → 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:
|
|
@@ -80,9 +80,9 @@ jobs:
|
|
|
80
80
|
bot_name: "Marvin Context Protocol"
|
|
81
81
|
prompt: ${{ steps.dedupe-prompt.outputs.PROMPT }}
|
|
82
82
|
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY_FOR_CI }}
|
|
83
|
+
allowed_non_write_users: "*"
|
|
83
84
|
claude_args: |
|
|
84
85
|
--allowedTools Bash(gh issue view:*),Bash(gh search:*),Bash(gh issue list:*),Bash(gh api:*),Bash(gh issue comment:*),Task
|
|
85
|
-
--mcp-config /tmp/mcp-config/mcp-servers.json
|
|
86
86
|
settings: |
|
|
87
87
|
{
|
|
88
88
|
"model": "claude-sonnet-4-5-20250929",
|
|
@@ -131,7 +131,7 @@ jobs:
|
|
|
131
131
|
bot_name: "Marvin Context Protocol"
|
|
132
132
|
prompt: ${{ steps.triage-prompt.outputs.PROMPT }}
|
|
133
133
|
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY_FOR_CI }}
|
|
134
|
-
allowed_non_write_users: "*"
|
|
134
|
+
allowed_non_write_users: "*"
|
|
135
135
|
claude_args: |
|
|
136
136
|
--allowedTools Bash(gh label list),mcp__github__get_issue,mcp__github__get_issue_comments,mcp__github__update_issue,mcp__github__get_pull_request_files
|
|
137
137
|
settings: |
|
|
@@ -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)
|
|
@@ -4,6 +4,21 @@ icon: "list-check"
|
|
|
4
4
|
rss: true
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
+
<Update label="v2.12.5" description="2025-10-17">
|
|
8
|
+
|
|
9
|
+
**[v2.12.5: Safety Pin](https://github.com/jlowin/fastmcp/releases/tag/v2.12.5)**
|
|
10
|
+
|
|
11
|
+
FastMCP 2.12.5 is a point release that pins the MCP SDK version below 1.17, which introduced a change affecting FastMCP users with auth providers mounted as part of a larger application. This ensures the `.well-known` payload appears in the expected location when using FastMCP authentication providers with composite applications.
|
|
12
|
+
|
|
13
|
+
## What's Changed
|
|
14
|
+
|
|
15
|
+
### Fixes 🐞
|
|
16
|
+
* Pin MCP SDK version below 1.17 by [@jlowin](https://github.com/jlowin) in [a1b2c3d](https://github.com/jlowin/fastmcp/commit/dab2b316ddc3883b7896a86da21cacb68da01e5c)
|
|
17
|
+
|
|
18
|
+
**Full Changelog**: [v2.12.4...v2.12.5](https://github.com/jlowin/fastmcp/compare/v2.12.4...v2.12.5)
|
|
19
|
+
|
|
20
|
+
</Update>
|
|
21
|
+
|
|
7
22
|
<Update label="v2.12.4" description="2025-09-26">
|
|
8
23
|
|
|
9
24
|
**[v2.12.4: OIDC What You Did There](https://github.com/jlowin/fastmcp/releases/tag/v2.12.4)**
|
|
@@ -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>
|
|
@@ -145,6 +145,59 @@ middleware = [
|
|
|
145
145
|
http_app = mcp.http_app(middleware=middleware)
|
|
146
146
|
```
|
|
147
147
|
|
|
148
|
+
### CORS for Browser-Based Clients
|
|
149
|
+
|
|
150
|
+
<Tip>
|
|
151
|
+
Most MCP clients, including those that you access through a browser like ChatGPT or Claude, don't need CORS configuration. Only enable CORS if you're working with an MCP client that connects directly from a browser, such as debugging tools or inspectors.
|
|
152
|
+
</Tip>
|
|
153
|
+
|
|
154
|
+
CORS (Cross-Origin Resource Sharing) is needed when JavaScript running in a web browser connects directly to your MCP server. This is different from using an LLM through a browser—in that case, the browser connects to the LLM service, and the LLM service connects to your MCP server (no CORS needed).
|
|
155
|
+
|
|
156
|
+
Browser-based MCP clients that need CORS include:
|
|
157
|
+
|
|
158
|
+
- **MCP Inspector** - Browser-based debugging tool for testing MCP servers
|
|
159
|
+
- **Custom browser-based MCP clients** - If you're building a web app that directly connects to MCP servers
|
|
160
|
+
|
|
161
|
+
For these scenarios, add CORS middleware with the specific headers required for MCP protocol:
|
|
162
|
+
|
|
163
|
+
```python
|
|
164
|
+
from fastmcp import FastMCP
|
|
165
|
+
from starlette.middleware import Middleware
|
|
166
|
+
from starlette.middleware.cors import CORSMiddleware
|
|
167
|
+
|
|
168
|
+
mcp = FastMCP("MyServer")
|
|
169
|
+
|
|
170
|
+
# Configure CORS for browser-based clients
|
|
171
|
+
middleware = [
|
|
172
|
+
Middleware(
|
|
173
|
+
CORSMiddleware,
|
|
174
|
+
allow_origins=["*"], # Allow all origins; use specific origins for security
|
|
175
|
+
allow_methods=["GET", "POST", "DELETE", "OPTIONS"],
|
|
176
|
+
allow_headers=[
|
|
177
|
+
"mcp-protocol-version",
|
|
178
|
+
"mcp-session-id",
|
|
179
|
+
"Authorization",
|
|
180
|
+
"Content-Type",
|
|
181
|
+
],
|
|
182
|
+
expose_headers=["mcp-session-id"],
|
|
183
|
+
)
|
|
184
|
+
]
|
|
185
|
+
|
|
186
|
+
app = mcp.http_app(middleware=middleware)
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
**Key configuration details:**
|
|
190
|
+
|
|
191
|
+
- **`allow_origins`**: Specify exact origins (e.g., `["http://localhost:3000"]`) rather than `["*"]` for production deployments
|
|
192
|
+
- **`allow_headers`**: Must include `mcp-protocol-version`, `mcp-session-id`, and `Authorization` (for authenticated servers)
|
|
193
|
+
- **`expose_headers`**: Must include `mcp-session-id` so JavaScript can read the session ID from responses and send it in subsequent requests
|
|
194
|
+
|
|
195
|
+
Without `expose_headers=["mcp-session-id"]`, browsers will receive the session ID but JavaScript won't be able to access it, causing session management to fail.
|
|
196
|
+
|
|
197
|
+
<Warning>
|
|
198
|
+
**Production Security**: Never use `allow_origins=["*"]` in production. Specify the exact origins of your browser-based clients. Using wildcards exposes your server to unauthorized access from any website.
|
|
199
|
+
</Warning>
|
|
200
|
+
|
|
148
201
|
## Integration with Web Frameworks
|
|
149
202
|
|
|
150
203
|
If you already have a web application running, you can add MCP capabilities by mounting a FastMCP server as a sub-application. This allows you to expose MCP tools alongside your existing API endpoints, sharing the same domain and infrastructure. The MCP server becomes just another route in your application, making it easy to manage and deploy.
|
|
@@ -280,6 +333,14 @@ OAuth specifications (RFC 8414 and RFC 9728) require discovery metadata to be ac
|
|
|
280
333
|
Follow the configuration instructions below to set up mounting correctly.
|
|
281
334
|
</Warning>
|
|
282
335
|
|
|
336
|
+
<Warning>
|
|
337
|
+
**CORS Middleware Conflicts:**
|
|
338
|
+
|
|
339
|
+
If you're integrating FastMCP into an existing application with its own CORS middleware, be aware that layering CORS middleware can cause conflicts (such as 404 errors on `.well-known` routes or OPTIONS requests).
|
|
340
|
+
|
|
341
|
+
FastMCP and the MCP SDK already handle CORS for OAuth routes. If you need CORS on your own application routes, consider using the sub-app pattern: mount FastMCP and your routes as separate apps, each with their own middleware, rather than adding application-wide CORS middleware.
|
|
342
|
+
</Warning>
|
|
343
|
+
|
|
283
344
|
### Route Types
|
|
284
345
|
|
|
285
346
|
OAuth-protected MCP servers expose two categories of routes:
|
|
@@ -484,39 +545,47 @@ MCP_AUTH_TOKEN=secret uvicorn app:app --host 0.0.0.0 --port 8000
|
|
|
484
545
|
|
|
485
546
|
<VersionBadge version="2.13.0" />
|
|
486
547
|
|
|
487
|
-
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.
|
|
488
549
|
|
|
489
|
-
**Development
|
|
550
|
+
**Default Behavior (Development Only):**
|
|
490
551
|
|
|
491
|
-
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.
|
|
492
555
|
|
|
493
|
-
|
|
556
|
+
This automatic approach is convenient for development but not suitable for production deployments.
|
|
494
557
|
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
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:
|
|
499
561
|
|
|
500
|
-
|
|
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)
|
|
501
564
|
|
|
502
565
|
**Configuration:**
|
|
503
566
|
|
|
504
|
-
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
|
|
505
573
|
|
|
506
|
-
```python {4-7}
|
|
507
574
|
auth = GitHubProvider(
|
|
508
575
|
client_id=os.environ["GITHUB_CLIENT_ID"],
|
|
509
576
|
client_secret=os.environ["GITHUB_CLIENT_SECRET"],
|
|
510
577
|
jwt_signing_key=os.environ["JWT_SIGNING_KEY"],
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
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
|
|
514
583
|
)
|
|
515
584
|
```
|
|
516
585
|
|
|
517
|
-
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.
|
|
518
587
|
|
|
519
|
-
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).
|
|
520
589
|
|
|
521
590
|
## Testing Your Deployment
|
|
522
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
|
|
@@ -3,6 +3,7 @@ title: Upgrade Guide
|
|
|
3
3
|
sidebarTitle: Upgrade Guide
|
|
4
4
|
description: Migration instructions for upgrading between FastMCP versions
|
|
5
5
|
icon: up
|
|
6
|
+
tag: NEW
|
|
6
7
|
---
|
|
7
8
|
|
|
8
9
|
This guide provides migration instructions for breaking changes and major updates when upgrading between FastMCP versions.
|
|
@@ -17,11 +18,17 @@ The OAuth proxy now issues its own JWT tokens to clients instead of forwarding u
|
|
|
17
18
|
|
|
18
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.
|
|
19
20
|
|
|
20
|
-
|
|
21
|
+
**Default behavior (development):**
|
|
21
22
|
|
|
22
|
-
|
|
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).
|
|
23
26
|
|
|
24
|
-
|
|
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:
|
|
25
32
|
|
|
26
33
|
```python
|
|
27
34
|
auth = GitHubProvider(
|
|
@@ -29,16 +36,15 @@ auth = GitHubProvider(
|
|
|
29
36
|
client_secret=os.environ["GITHUB_CLIENT_SECRET"],
|
|
30
37
|
base_url="https://your-server.com",
|
|
31
38
|
|
|
32
|
-
#
|
|
39
|
+
# Explicit keys (required for production)
|
|
33
40
|
jwt_signing_key=os.environ["JWT_SIGNING_KEY"],
|
|
34
|
-
token_encryption_key=os.environ["TOKEN_ENCRYPTION_KEY"],
|
|
35
41
|
|
|
36
|
-
|
|
42
|
+
# Persistent network storage (required for production)
|
|
43
|
+
client_storage=RedisStore(host="redis.example.com", port=6379)
|
|
37
44
|
)
|
|
38
45
|
```
|
|
39
46
|
|
|
40
|
-
Both keys accept any secret string. Make sure they're different from each other.
|
|
41
|
-
|
|
42
47
|
**More information:**
|
|
43
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
|
|
44
50
|
- [OAuth Proxy Parameters](/servers/auth/oauth-proxy#configuration-parameters) - Parameter documentation
|
|
@@ -20,10 +20,7 @@
|
|
|
20
20
|
"primary": "#2d00f7"
|
|
21
21
|
},
|
|
22
22
|
"contextual": {
|
|
23
|
-
"options": [
|
|
24
|
-
"copy",
|
|
25
|
-
"view"
|
|
26
|
-
]
|
|
23
|
+
"options": ["copy", "view"]
|
|
27
24
|
},
|
|
28
25
|
"description": "The fast, Pythonic way to build MCP servers and clients.",
|
|
29
26
|
"errors": {
|
|
@@ -107,15 +104,16 @@
|
|
|
107
104
|
"group": "Advanced Features",
|
|
108
105
|
"icon": "stars",
|
|
109
106
|
"pages": [
|
|
110
|
-
"servers/icons",
|
|
111
|
-
"servers/context",
|
|
112
|
-
"servers/proxy",
|
|
113
107
|
"servers/composition",
|
|
108
|
+
"servers/context",
|
|
114
109
|
"servers/elicitation",
|
|
110
|
+
"servers/icons",
|
|
115
111
|
"servers/logging",
|
|
112
|
+
"servers/middleware",
|
|
116
113
|
"servers/progress",
|
|
114
|
+
"servers/proxy",
|
|
117
115
|
"servers/sampling",
|
|
118
|
-
"servers/
|
|
116
|
+
"servers/storage-backends"
|
|
119
117
|
]
|
|
120
118
|
},
|
|
121
119
|
{
|
|
@@ -148,10 +146,7 @@
|
|
|
148
146
|
{
|
|
149
147
|
"group": "Essentials",
|
|
150
148
|
"icon": "cube",
|
|
151
|
-
"pages": [
|
|
152
|
-
"clients/client",
|
|
153
|
-
"clients/transports"
|
|
154
|
-
]
|
|
149
|
+
"pages": ["clients/client", "clients/transports"]
|
|
155
150
|
},
|
|
156
151
|
{
|
|
157
152
|
"group": "Core Operations",
|
|
@@ -177,10 +172,7 @@
|
|
|
177
172
|
{
|
|
178
173
|
"group": "Authentication",
|
|
179
174
|
"icon": "user-shield",
|
|
180
|
-
"pages": [
|
|
181
|
-
"clients/auth/oauth",
|
|
182
|
-
"clients/auth/bearer"
|
|
183
|
-
]
|
|
175
|
+
"pages": ["clients/auth/oauth", "clients/auth/bearer"]
|
|
184
176
|
}
|
|
185
177
|
]
|
|
186
178
|
},
|
|
@@ -234,10 +226,7 @@
|
|
|
234
226
|
{
|
|
235
227
|
"group": "API Integration",
|
|
236
228
|
"icon": "globe",
|
|
237
|
-
"pages": [
|
|
238
|
-
"integrations/fastapi",
|
|
239
|
-
"integrations/openapi"
|
|
240
|
-
]
|
|
229
|
+
"pages": ["integrations/fastapi", "integrations/openapi"]
|
|
241
230
|
}
|
|
242
231
|
]
|
|
243
232
|
},
|
|
@@ -247,7 +236,8 @@
|
|
|
247
236
|
"patterns/tool-transformation",
|
|
248
237
|
"patterns/decorating-methods",
|
|
249
238
|
"patterns/cli",
|
|
250
|
-
"patterns/contrib"
|
|
239
|
+
"patterns/contrib",
|
|
240
|
+
"patterns/testing"
|
|
251
241
|
]
|
|
252
242
|
},
|
|
253
243
|
{
|
|
@@ -472,5 +462,13 @@
|
|
|
472
462
|
"thumbnails": {
|
|
473
463
|
"appearance": "light",
|
|
474
464
|
"background": "/assets/brand/thumbnail-background.png"
|
|
465
|
+
},
|
|
466
|
+
"styling": {
|
|
467
|
+
"codeblocks": {
|
|
468
|
+
"theme": {
|
|
469
|
+
"light": "snazzy-light",
|
|
470
|
+
"dark": "dark-plus"
|
|
471
|
+
}
|
|
472
|
+
}
|
|
475
473
|
}
|
|
476
474
|
}
|
|
@@ -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>
|