fastmcp 2.13.0rc3__tar.gz → 2.13.0.1__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.0rc3 → fastmcp-2.13.0.1}/.github/workflows/run-tests.yml +25 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/PKG-INFO +1 -1
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/changelog.mdx +34 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/docs.json +26 -12
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/azure.mdx +11 -3
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-cli-cli.mdx +1 -1
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-resources-types.mdx +9 -9
- fastmcp-2.13.0.1/docs/python-sdk/fastmcp-server-auth-jwt_issuer.mdx +104 -0
- fastmcp-2.13.0.1/docs/python-sdk/fastmcp-server-auth-middleware.mdx +26 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-oauth_proxy.mdx +26 -24
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-oidc_proxy.mdx +2 -2
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-providers-auth0.mdx +1 -1
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-providers-aws.mdx +4 -4
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-providers-azure.mdx +16 -6
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-providers-github.mdx +3 -3
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-providers-google.mdx +3 -3
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-providers-workos.mdx +6 -6
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-context.mdx +68 -28
- fastmcp-2.13.0.1/docs/python-sdk/fastmcp-server-middleware-tool_injection.mdx +91 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-server.mdx +54 -54
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-settings.mdx +11 -11
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-tools-tool_manager.mdx +10 -10
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-cli.mdx +1 -1
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/updates.mdx +18 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/auth/azure_oauth/server.py +8 -3
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/get_file.py +6 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/memory.py +7 -5
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/pyproject.toml +23 -1
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/cli/cli.py +2 -2
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/client/auth/oauth.py +7 -6
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/client/client.py +10 -10
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/client/sampling.py +1 -1
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/client/transports.py +34 -34
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/contrib/component_manager/__init__.py +1 -1
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/contrib/component_manager/component_manager.py +2 -2
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/experimental/sampling/handlers/openai.py +2 -2
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/experimental/server/openapi/__init__.py +5 -8
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/experimental/server/openapi/components.py +11 -7
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/experimental/utilities/openapi/__init__.py +10 -15
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/experimental/utilities/openapi/director.py +1 -1
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/experimental/utilities/openapi/json_schema_converter.py +2 -2
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/experimental/utilities/openapi/parser.py +3 -5
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/mcp_config.py +2 -3
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/prompts/prompt.py +9 -13
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/resources/resource.py +1 -3
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/resources/resource_manager.py +1 -1
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/__init__.py +1 -1
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/auth.py +2 -2
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/oidc_proxy.py +2 -2
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/providers/azure.py +48 -25
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/providers/bearer.py +1 -1
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/providers/in_memory.py +2 -2
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/providers/introspection.py +2 -2
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/providers/jwt.py +17 -18
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/providers/supabase.py +1 -1
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/providers/workos.py +2 -2
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/context.py +8 -10
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/dependencies.py +5 -6
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/http.py +2 -3
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/middleware/caching.py +1 -1
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/middleware/error_handling.py +8 -8
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/openapi.py +10 -6
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/proxy.py +5 -4
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/server.py +27 -29
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/tools/__init__.py +1 -1
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/tools/tool.py +12 -12
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/tools/tool_transform.py +6 -6
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/utilities/cli.py +5 -6
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/utilities/inspect.py +2 -2
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/utilities/json_schema_type.py +4 -4
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/utilities/logging.py +14 -18
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/utilities/mcp_server_config/v1/environments/base.py +1 -2
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -1
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/utilities/openapi.py +9 -9
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/utilities/tests.py +2 -4
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/auth/providers/test_azure.py +103 -38
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/utilities/test_inspect.py +4 -4
- fastmcp-2.13.0rc3/docs/python-sdk/fastmcp-server-auth-jwt_issuer.mdx +0 -195
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/.ccignore +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/.cursor/rules/core-mcp-objects.mdc +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/.cursor/worktrees.json +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/.github/ISSUE_TEMPLATE/bug.yml +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/.github/ISSUE_TEMPLATE/enhancement.yml +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/.github/copilot-instructions.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/.github/dependabot.yml +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/.github/pull_request_template.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/.github/release.yml +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/.github/workflows/auto-close-duplicates.yml +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/.github/workflows/auto-close-needs-mre.yml +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/.github/workflows/martian-issue-triage.yml +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/.github/workflows/marvin-dedupe-issues.yml +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/.github/workflows/marvin-label-triage.yml +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/.github/workflows/marvin.yml +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/.github/workflows/publish.yml +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/.github/workflows/run-static.yml +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/.github/workflows/update-config-schema.yml +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/.github/workflows/update-sdk-docs.yml +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/.gitignore +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/.pre-commit-config.yaml +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/AGENTS.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/CLAUDE.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/CODE_OF_CONDUCT.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/LICENSE +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/README.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/SECURITY.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/.ccignore +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/.cursor/rules/mintlify.mdc +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/assets/brand/blue-logo.png +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/assets/brand/f-watercolor-waves-dark.png +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/assets/brand/f-watercolor-waves.png +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/assets/brand/favicon.svg +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/assets/brand/thumbnail-background.png +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/assets/brand/wordmark-padded.png +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/assets/brand/wordmark-watercolor-rainbow-dark.png +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/assets/brand/wordmark-watercolor-rainbow.png +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/assets/brand/wordmark-watercolor-waves-dark.png +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/assets/brand/wordmark-watercolor-waves.png +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/assets/brand/wordmark-white-padded.png +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/assets/brand/wordmark-white.png +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/assets/brand/wordmark.png +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/assets/images/fastmcp_cloud/connect.png +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/assets/images/fastmcp_cloud/create_project.png +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/assets/images/fastmcp_cloud/deployment.png +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/assets/images/fastmcp_cloud/quickstart.png +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/assets/images/oauth-proxy-consent-screen.png +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/assets/images/tutorial-rest-api-result.png +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/assets/schemas/mcp_server_config/latest.json +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/assets/schemas/mcp_server_config/v1.json +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/assets/updates/release-2-7.png +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/clients/auth/bearer.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/clients/auth/oauth.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/clients/client.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/clients/elicitation.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/clients/logging.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/clients/messages.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/clients/progress.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/clients/prompts.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/clients/resources.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/clients/roots.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/clients/sampling.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/clients/tools.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/clients/transports.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/community/README.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/community/showcase.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/css/banner.css +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/css/python-sdk.css +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/css/style.css +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/css/version-badge.css +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/deployment/fastmcp-cloud.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/deployment/http.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/deployment/running-server.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/deployment/server-configuration.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/development/contributing.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/development/releases.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/development/tests.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/development/upgrade-guide.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/getting-started/installation.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/getting-started/quickstart.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/getting-started/welcome.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/anthropic.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/auth0.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/authkit.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/aws-cognito.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/chatgpt.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/claude-code.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/claude-desktop.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/cursor-install-mcp.png +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/cursor.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/descope.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/eunomia-authorization.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/fastapi.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/gemini-cli.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/gemini.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/github.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/google.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/images/authkit/enable_dcr.png +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/images/permit/abac_condition_example.png +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/images/permit/abac_policy_example.png +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/images/permit/policy_mapping.png +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/images/permit/role_assignement.png +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/mcp-json-configuration.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/openai.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/openapi.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/permit.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/scalekit.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/workos.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/patterns/cli.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/patterns/contrib.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/patterns/decorating-methods.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/patterns/testing.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/patterns/tool-transformation.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/public/schemas/fastmcp.json/latest.json +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/public/schemas/fastmcp.json/v1.json +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-cli-__init__.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-cli-install-__init__.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-cli-install-claude_code.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-cli-install-claude_desktop.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-cli-install-cursor.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-cli-install-gemini_cli.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-cli-install-mcp_json.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-cli-install-shared.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-cli-run.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-client-__init__.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-client-auth-__init__.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-client-auth-bearer.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-client-auth-oauth.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-client-client.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-client-elicitation.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-client-logging.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-client-messages.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-client-oauth_callback.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-client-progress.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-client-roots.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-client-sampling.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-client-transports.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-exceptions.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-mcp_config.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-prompts-__init__.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-prompts-prompt.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-prompts-prompt_manager.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-resources-__init__.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-resources-resource.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-resources-resource_manager.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-resources-template.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-__init__.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-__init__.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-auth.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-providers-__init__.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-providers-bearer.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-providers-descope.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-providers-in_memory.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-providers-introspection.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-providers-jwt.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-providers-scalekit.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-providers-supabase.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-redirect_validation.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-dependencies.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-elicitation.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-http.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-low_level.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-middleware-__init__.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-middleware-caching.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-middleware-error_handling.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-middleware-logging.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-middleware-middleware.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-middleware-rate_limiting.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-middleware-timing.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-openapi.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-proxy.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-tools-__init__.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-tools-tool.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-tools-tool_transform.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-__init__.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-auth.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-components.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-exceptions.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-http.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-inspect.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-json_schema.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-json_schema_type.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-logging.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-mcp_config.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-mcp_server_config-__init__.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-__init__.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-environments-__init__.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-environments-base.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-environments-uv.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-mcp_server_config.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-sources-__init__.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-sources-base.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-sources-filesystem.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-openapi.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-tests.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-types.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-ui.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/servers/auth/authentication.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/servers/auth/full-oauth-server.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/servers/auth/oauth-proxy.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/servers/auth/oidc-proxy.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/servers/auth/remote-oauth.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/servers/auth/token-verification.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/servers/composition.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/servers/context.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/servers/elicitation.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/servers/icons.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/servers/logging.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/servers/middleware.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/servers/progress.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/servers/prompts.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/servers/proxy.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/servers/resources.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/servers/sampling.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/servers/server.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/servers/storage-backends.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/servers/tools.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/snippets/local-focus.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/snippets/version-badge.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/snippets/youtube-embed.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/tutorials/create-mcp-server.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/tutorials/mcp.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/tutorials/rest-api.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/atproto_mcp/README.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/atproto_mcp/demo.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/atproto_mcp/fastmcp.json +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/atproto_mcp/pyproject.toml +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/atproto_mcp/src/atproto_mcp/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/atproto_mcp/src/atproto_mcp/__main__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/atproto_mcp/src/atproto_mcp/_atproto/__init__.py +4 -4
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/atproto_mcp/src/atproto_mcp/_atproto/_client.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/atproto_mcp/src/atproto_mcp/_atproto/_posts.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/atproto_mcp/src/atproto_mcp/_atproto/_profile.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/atproto_mcp/src/atproto_mcp/_atproto/_read.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/atproto_mcp/src/atproto_mcp/_atproto/_social.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/atproto_mcp/src/atproto_mcp/py.typed +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/atproto_mcp/src/atproto_mcp/server.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/atproto_mcp/src/atproto_mcp/settings.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/atproto_mcp/src/atproto_mcp/types.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/auth/authkit_dcr/README.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/auth/authkit_dcr/client.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/auth/authkit_dcr/server.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/auth/aws_oauth/README.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/auth/aws_oauth/client.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/auth/aws_oauth/requirements.txt +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/auth/aws_oauth/server.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/auth/azure_oauth/README.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/auth/azure_oauth/client.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/auth/github_oauth/README.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/auth/github_oauth/client.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/auth/github_oauth/server.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/auth/google_oauth/README.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/auth/google_oauth/client.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/auth/google_oauth/server.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/auth/scalekit_oauth/README.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/auth/scalekit_oauth/client.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/auth/scalekit_oauth/server.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/auth/workos_oauth/README.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/auth/workos_oauth/client.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/auth/workos_oauth/server.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/complex_inputs.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/config_server.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/desktop.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/echo.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/fastmcp_config/env_interpolation_example.json +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/fastmcp_config/fastmcp.json +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/fastmcp_config/full_example.fastmcp.json +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/fastmcp_config/server.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/fastmcp_config/simple.fastmcp.json +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/fastmcp_config_demo/README.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/fastmcp_config_demo/fastmcp.json +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/fastmcp_config_demo/server.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/in_memory_proxy_example.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/memory.fastmcp.json +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/mount_example.fastmcp.json +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/mount_example.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/sampling.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/sampling_fallback.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/screenshot.fastmcp.json +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/screenshot.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/serializer.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/simple_echo.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/smart_home/README.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/smart_home/hub.fastmcp.json +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/smart_home/lights.fastmcp.json +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/smart_home/pyproject.toml +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/smart_home/src/smart_home/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/smart_home/src/smart_home/__main__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/smart_home/src/smart_home/hub.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/smart_home/src/smart_home/lights/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/smart_home/src/smart_home/lights/hue_utils.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/smart_home/src/smart_home/lights/server.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/smart_home/src/smart_home/py.typed +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/smart_home/src/smart_home/settings.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/tags_example.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/text_me.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/justfile +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/logo.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/scripts/auto_close_duplicates.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/scripts/auto_close_needs_mre.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/__init__.py +2 -2
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/cli/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/cli/install/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/cli/install/claude_code.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/cli/install/claude_desktop.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/cli/install/cursor.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/cli/install/gemini_cli.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/cli/install/mcp_json.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/cli/install/shared.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/cli/run.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/client/__init__.py +9 -9
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/client/auth/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/client/auth/bearer.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/client/elicitation.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/client/logging.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/client/messages.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/client/oauth_callback.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/client/progress.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/client/roots.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/contrib/README.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/contrib/component_manager/README.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/contrib/component_manager/component_service.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/contrib/component_manager/example.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/contrib/mcp_mixin/README.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/contrib/mcp_mixin/__init__.py +2 -2
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/contrib/mcp_mixin/example.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/exceptions.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/experimental/sampling/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/experimental/sampling/handlers/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/experimental/sampling/handlers/base.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/experimental/server/openapi/README.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/experimental/server/openapi/routing.py +2 -2
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/experimental/server/openapi/server.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/experimental/utilities/openapi/README.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/experimental/utilities/openapi/formatters.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/experimental/utilities/openapi/models.py +3 -3
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/experimental/utilities/openapi/schemas.py +2 -2
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/prompts/__init__.py +1 -1
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/prompts/prompt_manager.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/py.typed +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/resources/__init__.py +5 -5
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/resources/template.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/resources/types.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/__init__.py +5 -5
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/handlers/authorize.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/jwt_issuer.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/middleware.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/oauth_proxy.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/providers/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/providers/auth0.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/providers/aws.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/providers/descope.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/providers/github.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/providers/google.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/providers/scalekit.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/redirect_validation.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/elicitation.py +1 -1
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/low_level.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/middleware/__init__.py +1 -1
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/middleware/logging.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/middleware/middleware.py +1 -1
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/middleware/rate_limiting.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/middleware/timing.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/middleware/tool_injection.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/sampling/handler.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/settings.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/tools/tool_manager.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/utilities/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/utilities/auth.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/utilities/components.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/utilities/exceptions.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/utilities/http.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/utilities/json_schema.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/utilities/mcp_config.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/utilities/mcp_server_config/__init__.py +3 -3
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/utilities/types.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/utilities/ui.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/cli/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/cli/test_cli.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/cli/test_config.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/cli/test_cursor.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/cli/test_install.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/cli/test_mcp_server_config_integration.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/cli/test_mcp_server_config_schema.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/cli/test_project_prepare.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/cli/test_run.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/cli/test_run_config.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/cli/test_server_args.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/cli/test_shared.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/cli/test_with_argv.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/client/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/client/auth/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/client/auth/test_oauth_client.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/client/test_client.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/client/test_elicitation.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/client/test_logs.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/client/test_notifications.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/client/test_oauth_callback_xss.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/client/test_openapi_experimental.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/client/test_openapi_legacy.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/client/test_progress.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/client/test_roots.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/client/test_sampling.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/client/test_sse.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/client/test_stdio.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/client/test_streamable_http.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/client/transports/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/client/transports/test_uv_transport.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/conftest.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/contrib/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/contrib/test_bulk_tool_caller.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/contrib/test_component_manager.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/contrib/test_mcp_mixin.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/deprecated/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/deprecated/test_bearer_auth_provider.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/deprecated/test_dependencies.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/deprecated/test_deprecated.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/deprecated/test_mount_import_arg_order.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/deprecated/test_mount_separators.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/deprecated/test_output_schema_false.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/deprecated/test_proxy_client.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/deprecated/test_resource_prefixes.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/deprecated/test_route_type_ignore.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/deprecated/test_settings.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/README.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/README.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/conftest.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/server/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/server/openapi/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/server/openapi/test_comprehensive.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/server/openapi/test_deepobject_style.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/server/openapi/test_end_to_end_compatibility.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/server/openapi/test_openapi_features.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/server/openapi/test_openapi_performance.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/server/openapi/test_parameter_collisions.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/server/openapi/test_performance_comparison.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/server/openapi/test_server.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/utilities/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/utilities/openapi/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/utilities/openapi/conftest.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/utilities/openapi/test_allof_requestbody.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/utilities/openapi/test_direct_array_schemas.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/utilities/openapi/test_director.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/utilities/openapi/test_legacy_compatibility.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/utilities/openapi/test_models.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/utilities/openapi/test_nullable_fields.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/utilities/openapi/test_parser.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/utilities/openapi/test_schemas.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/utilities/openapi/test_transitive_references.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/sampling/test_openai_handler.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/integration_tests/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/integration_tests/auth/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/integration_tests/auth/test_github_provider_integration.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/integration_tests/conftest.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/integration_tests/test_github_mcp_remote.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/prompts/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/prompts/test_prompt.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/prompts/test_prompt_manager.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/resources/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/resources/test_file_resources.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/resources/test_function_resources.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/resources/test_resource_manager.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/resources/test_resource_template.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/resources/test_resource_template_meta.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/resources/test_resources.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/auth/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/auth/providers/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/auth/providers/test_auth0.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/auth/providers/test_aws.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/auth/providers/test_descope.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/auth/providers/test_github.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/auth/providers/test_google.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/auth/providers/test_introspection.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/auth/providers/test_scalekit.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/auth/providers/test_supabase.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/auth/providers/test_workos.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/auth/test_auth_provider.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/auth/test_enhanced_error_responses.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/auth/test_jwt_issuer.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/auth/test_jwt_provider.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/auth/test_oauth_consent_flow.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/auth/test_oauth_mounting.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/auth/test_oauth_proxy.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/auth/test_oauth_proxy_redirect_validation.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/auth/test_oauth_proxy_storage.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/auth/test_oidc_proxy.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/auth/test_redirect_validation.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/auth/test_remote_auth_provider.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/auth/test_static_token_verifier.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/http/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/http/test_bearer_auth_backend.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/http/test_custom_routes.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/http/test_http_auth_middleware.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/http/test_http_dependencies.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/http/test_http_middleware.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/middleware/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/middleware/test_caching.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/middleware/test_error_handling.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/middleware/test_initialization_middleware.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/middleware/test_logging.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/middleware/test_middleware.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/middleware/test_rate_limiting.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/middleware/test_timing.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/middleware/test_tool_injection.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/openapi/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/openapi/conftest.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/openapi/test_advanced_behavior.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/openapi/test_basic_functionality.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/openapi/test_configuration.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/openapi/test_deepobject_style.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/openapi/test_description_propagation.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/openapi/test_explode_integration.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/openapi/test_openapi_compatibility.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/openapi/test_openapi_path_parameters.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/openapi/test_optional_parameters.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/openapi/test_parameter_collisions.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/openapi/test_route_map_fn.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/proxy/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/proxy/test_proxy_client.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/proxy/test_proxy_server.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/proxy/test_stateful_proxy_client.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/test_app_state.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/test_auth_integration.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/test_context.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/test_experimental_openapi_feature_flag.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/test_file_server.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/test_icons.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/test_import_server.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/test_input_validation.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/test_log_level.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/test_logging.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/test_mount.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/test_resource_prefix_formats.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/test_run_server.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/test_server.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/test_server_interactions.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/test_server_lifespan.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/test_streamable_http_no_redirect.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/test_tool_annotations.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/test_tool_exclude_args.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/test_tool_transformation.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/test_examples.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/test_mcp_config.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/tools/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/tools/test_tool.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/tools/test_tool_future_annotations.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/tools/test_tool_manager.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/tools/test_tool_transform.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/utilities/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/utilities/openapi/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/utilities/openapi/conftest.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/utilities/openapi/test_nullable_fields.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/utilities/openapi/test_openapi.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/utilities/openapi/test_openapi_advanced.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/utilities/openapi/test_openapi_fastapi.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/utilities/openapi/test_openapi_output_schemas.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/utilities/test_cli.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/utilities/test_components.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/utilities/test_json_schema.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/utilities/test_json_schema_type.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/utilities/test_logging.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/utilities/test_tests.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/utilities/test_typeadapter.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/utilities/test_types.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/uv.lock +0 -0
|
@@ -59,6 +59,31 @@ jobs:
|
|
|
59
59
|
- name: Run client process tests separately
|
|
60
60
|
run: uv run pytest --inline-snapshot=disable tests -m "client_process" -x
|
|
61
61
|
|
|
62
|
+
run_tests_lowest_direct:
|
|
63
|
+
name: "Run tests with lowest-direct dependencies"
|
|
64
|
+
runs-on: ubuntu-latest
|
|
65
|
+
timeout-minutes: 10
|
|
66
|
+
|
|
67
|
+
steps:
|
|
68
|
+
- uses: actions/checkout@v5
|
|
69
|
+
|
|
70
|
+
- name: Install uv
|
|
71
|
+
uses: astral-sh/setup-uv@v7
|
|
72
|
+
with:
|
|
73
|
+
enable-cache: true
|
|
74
|
+
cache-dependency-glob: "uv.lock"
|
|
75
|
+
python-version: "3.10"
|
|
76
|
+
|
|
77
|
+
- name: Install FastMCP with lowest-direct resolution
|
|
78
|
+
# run with lowest-direct to test against the minimum allowed dependency versions
|
|
79
|
+
run: uv sync --resolution lowest-direct
|
|
80
|
+
|
|
81
|
+
- name: Run tests (excluding integration and client_process)
|
|
82
|
+
run: uv run pytest --inline-snapshot=disable tests -m "not integration and not client_process" --numprocesses auto --maxprocesses 4 --dist worksteal
|
|
83
|
+
|
|
84
|
+
- name: Run client process tests separately
|
|
85
|
+
run: uv run pytest --inline-snapshot=disable tests -m "client_process" -x
|
|
86
|
+
|
|
62
87
|
run_integration_tests:
|
|
63
88
|
name: "Run integration tests"
|
|
64
89
|
runs-on: ubuntu-latest
|
|
@@ -4,6 +4,40 @@ icon: "list-check"
|
|
|
4
4
|
rss: true
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
+
<Update label="v2.13.0" description="2025-10-25">
|
|
8
|
+
|
|
9
|
+
**[v2.13.0: Cache Me If You Can](https://github.com/jlowin/fastmcp/releases/tag/v2.13.0)**
|
|
10
|
+
|
|
11
|
+
FastMCP 2.13 "Cache Me If You Can" represents a fundamental maturation of the framework. After months of community feedback on authentication and state management, this release delivers the infrastructure FastMCP needs to handle production workloads: persistent storage, response caching, and pragmatic OAuth improvements that reflect real-world deployment challenges.
|
|
12
|
+
|
|
13
|
+
💾 **Pluggable storage backends** bring persistent state to FastMCP servers. Built on [py-key-value-aio](https://github.com/strawgate/py-key-value), a new library from FastMCP maintainer Bill Easton ([@strawgate](https://github.com/strawgate)), the storage layer provides encrypted disk storage by default, platform-aware token management, and a simple key-value interface for application state. We're excited to bring this elegantly designed library into the FastMCP ecosystem - it's both powerful and remarkably easy to use, including wrappers to add encryption, TTLs, caching, and more to backends ranging from Elasticsearch, Redis, DynamoDB, filesystem, in-memory, and more! OAuth providers now automatically persist tokens across restarts, and developers can store arbitrary state without reaching for external databases. This foundation enables long-running sessions, cached credentials, and stateful applications built on MCP.
|
|
14
|
+
|
|
15
|
+
🔐 **OAuth maturity** brings months of production learnings into the framework. The new consent screen prevents confused deputy and authorization bypass attacks discovered in earlier versions while providing a clean UX with customizable branding. The OAuth proxy now issues its own tokens with automatic key derivation from client secrets, and RFC 7662 token introspection support enables enterprise auth flows. Path prefix mounting enables OAuth-protected servers to integrate into existing web applications under custom paths like `/api`, and MCP 1.17+ compliance with RFC 9728 ensures protocol compatibility. Combined with improved error handling and platform-aware token storage, OAuth is now production-ready and security-hardened for serious applications.
|
|
16
|
+
|
|
17
|
+
FastMCP now supports out-of-the-box authentication with:
|
|
18
|
+
- **[WorkOS](https://gofastmcp.com/integrations/workos)** and **[AuthKit](https://gofastmcp.com/integrations/authkit)**
|
|
19
|
+
- **[GitHub](https://gofastmcp.com/integrations/github)**
|
|
20
|
+
- **[Google](https://gofastmcp.com/integrations/google)**
|
|
21
|
+
- **[Azure](https://gofastmcp.com/integrations/azure)** (Entra ID)
|
|
22
|
+
- **[AWS Cognito](https://gofastmcp.com/integrations/aws-cognito)**
|
|
23
|
+
- **[Auth0](https://gofastmcp.com/integrations/auth0)**
|
|
24
|
+
- **[Descope](https://gofastmcp.com/integrations/descope)**
|
|
25
|
+
- **[Scalekit](https://gofastmcp.com/integrations/scalekit)**
|
|
26
|
+
- **[JWTs](https://gofastmcp.com/servers/auth/token-verification#jwt-token-verification)**
|
|
27
|
+
- **[RFC 7662 token introspection](https://gofastmcp.com/servers/auth/token-verification#token-introspection-protocol)**
|
|
28
|
+
|
|
29
|
+
⚡ **Response Caching Middleware** dramatically improves performance for expensive operations. Cache tool and resource responses with configurable TTLs, reducing redundant API calls and speeding up repeated queries.
|
|
30
|
+
|
|
31
|
+
🔄 **Server lifespans** provide proper initialization and cleanup hooks that run once per server instance instead of per client session. This fixes a long-standing source of confusion in the MCP SDK and enables proper resource management for database connections, background tasks, and other server-level state. Note: this is a breaking behavioral change if you were using the `lifespan` parameter.
|
|
32
|
+
|
|
33
|
+
✨ **Developer experience improvements** include Pydantic input validation for better type safety, icon support for richer UX, RFC 6570 query parameters for resource templates, improved Context API methods (list_resources, list_prompts, get_prompt), and async file/directory resources.
|
|
34
|
+
|
|
35
|
+
This release includes contributions from **20** new contributors and represents the largest feature set in a while. Thank you to everyone who tested preview builds and filed issues - your feedback shaped these improvements!
|
|
36
|
+
|
|
37
|
+
**Full Changelog**: [v2.12.5...v2.13.0](https://github.com/jlowin/fastmcp/compare/v2.12.5...v2.13.0)
|
|
38
|
+
|
|
39
|
+
</Update>
|
|
40
|
+
|
|
7
41
|
<Update label="v2.12.5" description="2025-10-17">
|
|
8
42
|
|
|
9
43
|
**[v2.12.5: Safety Pin](https://github.com/jlowin/fastmcp/releases/tag/v2.12.5)**
|
|
@@ -20,7 +20,10 @@
|
|
|
20
20
|
"primary": "#2d00f7"
|
|
21
21
|
},
|
|
22
22
|
"contextual": {
|
|
23
|
-
"options": [
|
|
23
|
+
"options": [
|
|
24
|
+
"copy",
|
|
25
|
+
"view"
|
|
26
|
+
]
|
|
24
27
|
},
|
|
25
28
|
"description": "The fast, Pythonic way to build MCP servers and clients.",
|
|
26
29
|
"errors": {
|
|
@@ -146,7 +149,10 @@
|
|
|
146
149
|
{
|
|
147
150
|
"group": "Essentials",
|
|
148
151
|
"icon": "cube",
|
|
149
|
-
"pages": [
|
|
152
|
+
"pages": [
|
|
153
|
+
"clients/client",
|
|
154
|
+
"clients/transports"
|
|
155
|
+
]
|
|
150
156
|
},
|
|
151
157
|
{
|
|
152
158
|
"group": "Core Operations",
|
|
@@ -172,7 +178,10 @@
|
|
|
172
178
|
{
|
|
173
179
|
"group": "Authentication",
|
|
174
180
|
"icon": "user-shield",
|
|
175
|
-
"pages": [
|
|
181
|
+
"pages": [
|
|
182
|
+
"clients/auth/oauth",
|
|
183
|
+
"clients/auth/bearer"
|
|
184
|
+
]
|
|
176
185
|
}
|
|
177
186
|
]
|
|
178
187
|
},
|
|
@@ -226,7 +235,10 @@
|
|
|
226
235
|
{
|
|
227
236
|
"group": "API Integration",
|
|
228
237
|
"icon": "globe",
|
|
229
|
-
"pages": [
|
|
238
|
+
"pages": [
|
|
239
|
+
"integrations/fastapi",
|
|
240
|
+
"integrations/openapi"
|
|
241
|
+
]
|
|
230
242
|
}
|
|
231
243
|
]
|
|
232
244
|
},
|
|
@@ -333,6 +345,7 @@
|
|
|
333
345
|
"python-sdk/fastmcp-server-auth-__init__",
|
|
334
346
|
"python-sdk/fastmcp-server-auth-auth",
|
|
335
347
|
"python-sdk/fastmcp-server-auth-jwt_issuer",
|
|
348
|
+
"python-sdk/fastmcp-server-auth-middleware",
|
|
336
349
|
"python-sdk/fastmcp-server-auth-oauth_proxy",
|
|
337
350
|
"python-sdk/fastmcp-server-auth-oidc_proxy",
|
|
338
351
|
{
|
|
@@ -371,7 +384,8 @@
|
|
|
371
384
|
"python-sdk/fastmcp-server-middleware-logging",
|
|
372
385
|
"python-sdk/fastmcp-server-middleware-middleware",
|
|
373
386
|
"python-sdk/fastmcp-server-middleware-rate_limiting",
|
|
374
|
-
"python-sdk/fastmcp-server-middleware-timing"
|
|
387
|
+
"python-sdk/fastmcp-server-middleware-timing",
|
|
388
|
+
"python-sdk/fastmcp-server-middleware-tool_injection"
|
|
375
389
|
]
|
|
376
390
|
},
|
|
377
391
|
"python-sdk/fastmcp-server-openapi",
|
|
@@ -458,17 +472,17 @@
|
|
|
458
472
|
"search": {
|
|
459
473
|
"prompt": "Search the docs..."
|
|
460
474
|
},
|
|
461
|
-
"theme": "almond",
|
|
462
|
-
"thumbnails": {
|
|
463
|
-
"appearance": "light",
|
|
464
|
-
"background": "/assets/brand/thumbnail-background.png"
|
|
465
|
-
},
|
|
466
475
|
"styling": {
|
|
467
476
|
"codeblocks": {
|
|
468
477
|
"theme": {
|
|
469
|
-
"
|
|
470
|
-
"
|
|
478
|
+
"dark": "dark-plus",
|
|
479
|
+
"light": "snazzy-light"
|
|
471
480
|
}
|
|
472
481
|
}
|
|
482
|
+
},
|
|
483
|
+
"theme": "almond",
|
|
484
|
+
"thumbnails": {
|
|
485
|
+
"appearance": "light",
|
|
486
|
+
"background": "/assets/brand/thumbnail-background.png"
|
|
473
487
|
}
|
|
474
488
|
}
|
|
@@ -122,7 +122,7 @@ auth_provider = AzureProvider(
|
|
|
122
122
|
client_secret="your-client-secret", # Your Azure App Client Secret
|
|
123
123
|
tenant_id="08541b6e-646d-43de-a0eb-834e6713d6d5", # Your Azure Tenant ID (REQUIRED)
|
|
124
124
|
base_url="http://localhost:8000", # Must match your App registration
|
|
125
|
-
required_scopes=["your-scope"], #
|
|
125
|
+
required_scopes=["your-scope"], # At least one scope REQUIRED - name of scope from your App
|
|
126
126
|
# identifier_uri defaults to api://{client_id}
|
|
127
127
|
# identifier_uri="api://your-api-id",
|
|
128
128
|
# Optional: request additional upstream scopes in the authorize request
|
|
@@ -159,6 +159,10 @@ async def get_user_info() -> dict:
|
|
|
159
159
|
Using your specific tenant ID is recommended for better security and control.
|
|
160
160
|
</Note>
|
|
161
161
|
|
|
162
|
+
<Note>
|
|
163
|
+
**Important**: The `required_scopes` parameter is **REQUIRED** and must include at least one scope. Azure's OAuth API requires the `scope` parameter in all authorization requests - you cannot authenticate without specifying at least one scope. Use the unprefixed scope names from your Azure App registration (e.g., `["read", "write"]`). These scopes must be created under **Expose an API** in your App registration.
|
|
164
|
+
</Note>
|
|
165
|
+
|
|
162
166
|
## Testing
|
|
163
167
|
|
|
164
168
|
### Running the Server
|
|
@@ -296,8 +300,12 @@ Issuer URL for OAuth metadata (defaults to `BASE_URL`). Set to root-level URL wh
|
|
|
296
300
|
Redirect path configured in your Azure App registration
|
|
297
301
|
</ParamField>
|
|
298
302
|
|
|
299
|
-
<ParamField path="FASTMCP_SERVER_AUTH_AZURE_REQUIRED_SCOPES"
|
|
300
|
-
Comma-, space-, or JSON-separated list of required scopes for your API. These are validated on tokens and used as defaults if the client does not request specific scopes.
|
|
303
|
+
<ParamField path="FASTMCP_SERVER_AUTH_AZURE_REQUIRED_SCOPES" required>
|
|
304
|
+
Comma-, space-, or JSON-separated list of required scopes for your API (at least one scope required). These are validated on tokens and used as defaults if the client does not request specific scopes. Use unprefixed scope names from your Azure App registration (e.g., `read,write`).
|
|
305
|
+
|
|
306
|
+
<Note>
|
|
307
|
+
Azure's OAuth API requires the `scope` parameter - you must provide at least one scope.
|
|
308
|
+
</Note>
|
|
301
309
|
</ParamField>
|
|
302
310
|
|
|
303
311
|
<ParamField path="FASTMCP_SERVER_AUTH_AZURE_ADDITIONAL_AUTHORIZE_SCOPES" default="">
|
|
@@ -105,7 +105,7 @@ fastmcp inspect # auto-detect fastmcp.json
|
|
|
105
105
|
- `server_spec`: Python file to inspect, optionally with \:object suffix, or fastmcp.json
|
|
106
106
|
|
|
107
107
|
|
|
108
|
-
### `prepare` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/cli/cli.py#
|
|
108
|
+
### `prepare` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/cli/cli.py#L786" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
109
109
|
|
|
110
110
|
```python
|
|
111
111
|
prepare(config_path: Annotated[str | None, cyclopts.Parameter(help='Path to fastmcp.json configuration file')] = None, output_dir: Annotated[str | None, cyclopts.Parameter(help='Directory to create the persistent environment in')] = None, skip_source: Annotated[bool, cyclopts.Parameter(help='Skip source preparation (e.g., git clone)')] = False) -> None
|
|
@@ -54,7 +54,7 @@ Set is_binary=True to read file as binary data instead of text.
|
|
|
54
54
|
|
|
55
55
|
**Methods:**
|
|
56
56
|
|
|
57
|
-
#### `validate_absolute_path` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/resources/types.py#
|
|
57
|
+
#### `validate_absolute_path` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/resources/types.py#L63" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
58
58
|
|
|
59
59
|
```python
|
|
60
60
|
validate_absolute_path(cls, path: Path) -> Path
|
|
@@ -63,7 +63,7 @@ validate_absolute_path(cls, path: Path) -> Path
|
|
|
63
63
|
Ensure path is absolute.
|
|
64
64
|
|
|
65
65
|
|
|
66
|
-
#### `set_binary_from_mime_type` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/resources/types.py#
|
|
66
|
+
#### `set_binary_from_mime_type` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/resources/types.py#L71" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
67
67
|
|
|
68
68
|
```python
|
|
69
69
|
set_binary_from_mime_type(cls, is_binary: bool, info: ValidationInfo) -> bool
|
|
@@ -72,7 +72,7 @@ set_binary_from_mime_type(cls, is_binary: bool, info: ValidationInfo) -> bool
|
|
|
72
72
|
Set is_binary based on mime_type if not explicitly set.
|
|
73
73
|
|
|
74
74
|
|
|
75
|
-
#### `read` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/resources/types.py#
|
|
75
|
+
#### `read` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/resources/types.py#L79" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
76
76
|
|
|
77
77
|
```python
|
|
78
78
|
read(self) -> str | bytes
|
|
@@ -81,7 +81,7 @@ read(self) -> str | bytes
|
|
|
81
81
|
Read the file content.
|
|
82
82
|
|
|
83
83
|
|
|
84
|
-
### `HttpResource` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/resources/types.py#
|
|
84
|
+
### `HttpResource` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/resources/types.py#L89" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
85
85
|
|
|
86
86
|
|
|
87
87
|
A resource that reads from an HTTP endpoint.
|
|
@@ -89,7 +89,7 @@ A resource that reads from an HTTP endpoint.
|
|
|
89
89
|
|
|
90
90
|
**Methods:**
|
|
91
91
|
|
|
92
|
-
#### `read` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/resources/types.py#
|
|
92
|
+
#### `read` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/resources/types.py#L98" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
93
93
|
|
|
94
94
|
```python
|
|
95
95
|
read(self) -> str | bytes
|
|
@@ -98,7 +98,7 @@ read(self) -> str | bytes
|
|
|
98
98
|
Read the HTTP content.
|
|
99
99
|
|
|
100
100
|
|
|
101
|
-
### `DirectoryResource` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/resources/types.py#
|
|
101
|
+
### `DirectoryResource` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/resources/types.py#L106" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
102
102
|
|
|
103
103
|
|
|
104
104
|
A resource that lists files in a directory.
|
|
@@ -106,7 +106,7 @@ A resource that lists files in a directory.
|
|
|
106
106
|
|
|
107
107
|
**Methods:**
|
|
108
108
|
|
|
109
|
-
#### `validate_absolute_path` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/resources/types.py#
|
|
109
|
+
#### `validate_absolute_path` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/resources/types.py#L126" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
110
110
|
|
|
111
111
|
```python
|
|
112
112
|
validate_absolute_path(cls, path: Path) -> Path
|
|
@@ -115,7 +115,7 @@ validate_absolute_path(cls, path: Path) -> Path
|
|
|
115
115
|
Ensure path is absolute.
|
|
116
116
|
|
|
117
117
|
|
|
118
|
-
#### `list_files` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/resources/types.py#
|
|
118
|
+
#### `list_files` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/resources/types.py#L132" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
119
119
|
|
|
120
120
|
```python
|
|
121
121
|
list_files(self) -> list[Path]
|
|
@@ -124,7 +124,7 @@ list_files(self) -> list[Path]
|
|
|
124
124
|
List files in the directory.
|
|
125
125
|
|
|
126
126
|
|
|
127
|
-
#### `read` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/resources/types.py#
|
|
127
|
+
#### `read` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/resources/types.py#L148" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
128
128
|
|
|
129
129
|
```python
|
|
130
130
|
read(self) -> str
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: jwt_issuer
|
|
3
|
+
sidebarTitle: jwt_issuer
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `fastmcp.server.auth.jwt_issuer`
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
JWT token issuance and verification for FastMCP OAuth Proxy.
|
|
10
|
+
|
|
11
|
+
This module implements the token factory pattern for OAuth proxies, where the proxy
|
|
12
|
+
issues its own JWT tokens to clients instead of forwarding upstream provider tokens.
|
|
13
|
+
This maintains proper OAuth 2.0 token audience boundaries.
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
## Functions
|
|
17
|
+
|
|
18
|
+
### `derive_jwt_key` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/jwt_issuer.py#L37" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
19
|
+
|
|
20
|
+
```python
|
|
21
|
+
derive_jwt_key() -> bytes
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
Derive JWT signing key from a high-entropy or low-entropy key material and server salt.
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
## Classes
|
|
29
|
+
|
|
30
|
+
### `JWTIssuer` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/jwt_issuer.py#L74" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
Issues and validates FastMCP-signed JWT tokens using HS256.
|
|
34
|
+
|
|
35
|
+
This issuer creates JWT tokens for MCP clients with proper audience claims,
|
|
36
|
+
maintaining OAuth 2.0 token boundaries. Tokens are signed with HS256 using
|
|
37
|
+
a key derived from the upstream client secret.
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
**Methods:**
|
|
41
|
+
|
|
42
|
+
#### `issue_access_token` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/jwt_issuer.py#L100" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
43
|
+
|
|
44
|
+
```python
|
|
45
|
+
issue_access_token(self, client_id: str, scopes: list[str], jti: str, expires_in: int = 3600) -> str
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Issue a minimal FastMCP access token.
|
|
49
|
+
|
|
50
|
+
FastMCP tokens are reference tokens containing only the minimal claims
|
|
51
|
+
needed for validation and lookup. The JTI maps to the upstream token
|
|
52
|
+
which contains actual user identity and authorization data.
|
|
53
|
+
|
|
54
|
+
**Args:**
|
|
55
|
+
- `client_id`: MCP client ID
|
|
56
|
+
- `scopes`: Token scopes
|
|
57
|
+
- `jti`: Unique token identifier (maps to upstream token)
|
|
58
|
+
- `expires_in`: Token lifetime in seconds
|
|
59
|
+
|
|
60
|
+
**Returns:**
|
|
61
|
+
- Signed JWT token
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
#### `issue_refresh_token` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/jwt_issuer.py#L147" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
65
|
+
|
|
66
|
+
```python
|
|
67
|
+
issue_refresh_token(self, client_id: str, scopes: list[str], jti: str, expires_in: int) -> str
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Issue a minimal FastMCP refresh token.
|
|
71
|
+
|
|
72
|
+
FastMCP refresh tokens are reference tokens containing only the minimal
|
|
73
|
+
claims needed for validation and lookup. The JTI maps to the upstream
|
|
74
|
+
token which contains actual user identity and authorization data.
|
|
75
|
+
|
|
76
|
+
**Args:**
|
|
77
|
+
- `client_id`: MCP client ID
|
|
78
|
+
- `scopes`: Token scopes
|
|
79
|
+
- `jti`: Unique token identifier (maps to upstream token)
|
|
80
|
+
- `expires_in`: Token lifetime in seconds (should match upstream refresh expiry)
|
|
81
|
+
|
|
82
|
+
**Returns:**
|
|
83
|
+
- Signed JWT token
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
#### `verify_token` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/jwt_issuer.py#L195" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
87
|
+
|
|
88
|
+
```python
|
|
89
|
+
verify_token(self, token: str) -> dict[str, Any]
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Verify and decode a FastMCP token.
|
|
93
|
+
|
|
94
|
+
Validates JWT signature, expiration, issuer, and audience.
|
|
95
|
+
|
|
96
|
+
**Args:**
|
|
97
|
+
- `token`: JWT token to verify
|
|
98
|
+
|
|
99
|
+
**Returns:**
|
|
100
|
+
- Decoded token payload
|
|
101
|
+
|
|
102
|
+
**Raises:**
|
|
103
|
+
- `JoseError`: If token is invalid, expired, or has wrong claims
|
|
104
|
+
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: middleware
|
|
3
|
+
sidebarTitle: middleware
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `fastmcp.server.auth.middleware`
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
Enhanced authentication middleware with better error messages.
|
|
10
|
+
|
|
11
|
+
This module provides enhanced versions of MCP SDK authentication middleware
|
|
12
|
+
that return more helpful error messages for developers troubleshooting
|
|
13
|
+
authentication issues.
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
## Classes
|
|
17
|
+
|
|
18
|
+
### `RequireAuthMiddleware` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/middleware.py#L22" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
Enhanced authentication middleware with detailed error messages.
|
|
22
|
+
|
|
23
|
+
Extends the SDK's RequireAuthMiddleware to provide more actionable
|
|
24
|
+
error messages when authentication fails. This helps developers
|
|
25
|
+
understand what went wrong and how to fix it.
|
|
26
|
+
|
|
@@ -26,7 +26,7 @@ production use with enterprise identity providers.
|
|
|
26
26
|
|
|
27
27
|
## Functions
|
|
28
28
|
|
|
29
|
-
### `create_consent_html` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#
|
|
29
|
+
### `create_consent_html` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L236" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
30
30
|
|
|
31
31
|
```python
|
|
32
32
|
create_consent_html(client_id: str, redirect_uri: str, scopes: list[str], txn_id: str, csrf_token: str, client_name: str | None = None, title: str = 'Application Access Request', server_name: str | None = None, server_icon_url: str | None = None, server_website_url: str | None = None, client_website_url: str | None = None) -> str
|
|
@@ -38,7 +38,7 @@ Create a styled HTML consent page for OAuth authorization requests.
|
|
|
38
38
|
|
|
39
39
|
## Classes
|
|
40
40
|
|
|
41
|
-
### `OAuthTransaction` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#
|
|
41
|
+
### `OAuthTransaction` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L108" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
42
42
|
|
|
43
43
|
|
|
44
44
|
OAuth transaction state for consent flow.
|
|
@@ -47,7 +47,7 @@ Stored server-side to track active authorization flows with client context.
|
|
|
47
47
|
Includes CSRF tokens for consent protection per MCP security best practices.
|
|
48
48
|
|
|
49
49
|
|
|
50
|
-
### `ClientCode` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#
|
|
50
|
+
### `ClientCode` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L129" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
51
51
|
|
|
52
52
|
|
|
53
53
|
Client authorization code with PKCE and upstream tokens.
|
|
@@ -56,16 +56,17 @@ Stored server-side after upstream IdP callback. Contains the upstream
|
|
|
56
56
|
tokens bound to the client's PKCE challenge for secure token exchange.
|
|
57
57
|
|
|
58
58
|
|
|
59
|
-
### `UpstreamTokenSet` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#
|
|
59
|
+
### `UpstreamTokenSet` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L147" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
60
60
|
|
|
61
61
|
|
|
62
62
|
Stored upstream OAuth tokens from identity provider.
|
|
63
63
|
|
|
64
64
|
These tokens are obtained from the upstream provider (Google, GitHub, etc.)
|
|
65
|
-
and
|
|
65
|
+
and stored in plaintext within this model. Encryption is handled transparently
|
|
66
|
+
at the storage layer via FernetEncryptionWrapper. Tokens are never exposed to MCP clients.
|
|
66
67
|
|
|
67
68
|
|
|
68
|
-
### `JTIMapping` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#
|
|
69
|
+
### `JTIMapping` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L169" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
69
70
|
|
|
70
71
|
|
|
71
72
|
Maps FastMCP token JTI to upstream token ID.
|
|
@@ -74,7 +75,7 @@ This allows stateless JWT validation while still being able to look up
|
|
|
74
75
|
the corresponding upstream token when tools need to access upstream APIs.
|
|
75
76
|
|
|
76
77
|
|
|
77
|
-
### `ProxyDCRClient` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#
|
|
78
|
+
### `ProxyDCRClient` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L181" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
78
79
|
|
|
79
80
|
|
|
80
81
|
Client for DCR proxy with configurable redirect URI validation.
|
|
@@ -104,7 +105,7 @@ arise from accepting arbitrary redirect URIs.
|
|
|
104
105
|
|
|
105
106
|
**Methods:**
|
|
106
107
|
|
|
107
|
-
#### `validate_redirect_uri` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#
|
|
108
|
+
#### `validate_redirect_uri` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L210" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
108
109
|
|
|
109
110
|
```python
|
|
110
111
|
validate_redirect_uri(self, redirect_uri: AnyUrl | None) -> AnyUrl
|
|
@@ -118,7 +119,7 @@ This is essential for cached token scenarios where the client may
|
|
|
118
119
|
reconnect with a different port.
|
|
119
120
|
|
|
120
121
|
|
|
121
|
-
### `TokenHandler` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#
|
|
122
|
+
### `TokenHandler` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L383" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
122
123
|
|
|
123
124
|
|
|
124
125
|
TokenHandler that returns OAuth 2.1 compliant error responses.
|
|
@@ -141,7 +142,7 @@ Per MCP spec: "Invalid or expired tokens MUST receive a HTTP 401 response."
|
|
|
141
142
|
|
|
142
143
|
**Methods:**
|
|
143
144
|
|
|
144
|
-
#### `response` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#
|
|
145
|
+
#### `response` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L402" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
145
146
|
|
|
146
147
|
```python
|
|
147
148
|
response(self, obj: TokenSuccessResponse | TokenErrorResponse)
|
|
@@ -150,7 +151,7 @@ response(self, obj: TokenSuccessResponse | TokenErrorResponse)
|
|
|
150
151
|
Override response method to provide OAuth 2.1 compliant error handling.
|
|
151
152
|
|
|
152
153
|
|
|
153
|
-
### `OAuthProxy` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#
|
|
154
|
+
### `OAuthProxy` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L432" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
154
155
|
|
|
155
156
|
|
|
156
157
|
OAuth provider that presents a DCR-compliant interface while proxying to non-DCR IDPs.
|
|
@@ -260,7 +261,7 @@ Handles provider-specific requirements:
|
|
|
260
261
|
|
|
261
262
|
**Methods:**
|
|
262
263
|
|
|
263
|
-
#### `get_client` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#
|
|
264
|
+
#### `get_client` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L813" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
264
265
|
|
|
265
266
|
```python
|
|
266
267
|
get_client(self, client_id: str) -> OAuthClientInformationFull | None
|
|
@@ -272,7 +273,7 @@ provided to the DCR client during registration, not the upstream client ID.
|
|
|
272
273
|
For unregistered clients, returns None (which will raise an error in the SDK).
|
|
273
274
|
|
|
274
275
|
|
|
275
|
-
#### `register_client` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#
|
|
276
|
+
#### `register_client` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L829" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
276
277
|
|
|
277
278
|
```python
|
|
278
279
|
register_client(self, client_info: OAuthClientInformationFull) -> None
|
|
@@ -286,7 +287,7 @@ redirect URI will likely be localhost or unknown to the proxied IDP. The
|
|
|
286
287
|
proxied IDP only knows about this server's fixed redirect URI.
|
|
287
288
|
|
|
288
289
|
|
|
289
|
-
#### `authorize` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#
|
|
290
|
+
#### `authorize` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L876" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
290
291
|
|
|
291
292
|
```python
|
|
292
293
|
authorize(self, client: OAuthClientInformationFull, params: AuthorizationParams) -> str
|
|
@@ -303,7 +304,7 @@ If consent is disabled (require_authorization_consent=False), skip the consent s
|
|
|
303
304
|
and redirect directly to the upstream IdP.
|
|
304
305
|
|
|
305
306
|
|
|
306
|
-
#### `load_authorization_code` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#
|
|
307
|
+
#### `load_authorization_code` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L951" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
307
308
|
|
|
308
309
|
```python
|
|
309
310
|
load_authorization_code(self, client: OAuthClientInformationFull, authorization_code: str) -> AuthorizationCode | None
|
|
@@ -315,7 +316,7 @@ Look up our client code and return authorization code object
|
|
|
315
316
|
with PKCE challenge for validation.
|
|
316
317
|
|
|
317
318
|
|
|
318
|
-
#### `exchange_authorization_code` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#
|
|
319
|
+
#### `exchange_authorization_code` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L994" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
319
320
|
|
|
320
321
|
```python
|
|
321
322
|
exchange_authorization_code(self, client: OAuthClientInformationFull, authorization_code: AuthorizationCode) -> OAuthToken
|
|
@@ -333,7 +334,7 @@ Implements the token factory pattern:
|
|
|
333
334
|
PKCE validation is handled by the MCP framework before this method is called.
|
|
334
335
|
|
|
335
336
|
|
|
336
|
-
#### `load_refresh_token` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#
|
|
337
|
+
#### `load_refresh_token` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L1159" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
337
338
|
|
|
338
339
|
```python
|
|
339
340
|
load_refresh_token(self, client: OAuthClientInformationFull, refresh_token: str) -> RefreshToken | None
|
|
@@ -342,7 +343,7 @@ load_refresh_token(self, client: OAuthClientInformationFull, refresh_token: str)
|
|
|
342
343
|
Load refresh token from local storage.
|
|
343
344
|
|
|
344
345
|
|
|
345
|
-
#### `exchange_refresh_token` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#
|
|
346
|
+
#### `exchange_refresh_token` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L1167" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
346
347
|
|
|
347
348
|
```python
|
|
348
349
|
exchange_refresh_token(self, client: OAuthClientInformationFull, refresh_token: RefreshToken, scopes: list[str]) -> OAuthToken
|
|
@@ -359,7 +360,7 @@ Implements two-tier refresh:
|
|
|
359
360
|
6. Keep same FastMCP refresh token (unless upstream rotates)
|
|
360
361
|
|
|
361
362
|
|
|
362
|
-
#### `load_access_token` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#
|
|
363
|
+
#### `load_access_token` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L1368" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
363
364
|
|
|
364
365
|
```python
|
|
365
366
|
load_access_token(self, token: str) -> AccessToken | None
|
|
@@ -378,7 +379,7 @@ The FastMCP JWT is a reference token - all authorization data comes
|
|
|
378
379
|
from validating the upstream token via the TokenVerifier.
|
|
379
380
|
|
|
380
381
|
|
|
381
|
-
#### `revoke_token` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#
|
|
382
|
+
#### `revoke_token` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L1424" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
382
383
|
|
|
383
384
|
```python
|
|
384
385
|
revoke_token(self, token: AccessToken | RefreshToken) -> None
|
|
@@ -390,16 +391,17 @@ Removes tokens from local storage and attempts to revoke them with
|
|
|
390
391
|
the upstream server if a revocation endpoint is configured.
|
|
391
392
|
|
|
392
393
|
|
|
393
|
-
#### `get_routes` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#
|
|
394
|
+
#### `get_routes` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L1468" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
394
395
|
|
|
395
396
|
```python
|
|
396
397
|
get_routes(self, mcp_path: str | None = None) -> list[Route]
|
|
397
398
|
```
|
|
398
399
|
|
|
399
|
-
Get OAuth routes with custom
|
|
400
|
+
Get OAuth routes with custom handlers for better error UX.
|
|
400
401
|
|
|
401
|
-
This method creates standard OAuth routes and replaces
|
|
402
|
-
|
|
402
|
+
This method creates standard OAuth routes and replaces:
|
|
403
|
+
- /authorize endpoint: Enhanced error responses for unregistered clients
|
|
404
|
+
- /token endpoint: OAuth 2.1 compliant error codes
|
|
403
405
|
|
|
404
406
|
**Args:**
|
|
405
407
|
- `mcp_path`: The path where the MCP endpoint is mounted (e.g., "/mcp")
|