fastmcp 2.13.0rc3__tar.gz → 2.13.0.2__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.2}/.github/workflows/run-tests.yml +25 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/PKG-INFO +3 -3
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/changelog.mdx +34 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/docs.json +26 -12
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/integrations/azure.mdx +11 -3
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-cli-cli.mdx +1 -1
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-resources-types.mdx +9 -9
- fastmcp-2.13.0.2/docs/python-sdk/fastmcp-server-auth-jwt_issuer.mdx +104 -0
- fastmcp-2.13.0.2/docs/python-sdk/fastmcp-server-auth-middleware.mdx +26 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-server-auth-oauth_proxy.mdx +26 -24
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-server-auth-oidc_proxy.mdx +2 -2
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-server-auth-providers-auth0.mdx +1 -1
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-server-auth-providers-aws.mdx +4 -4
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-server-auth-providers-azure.mdx +16 -6
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-server-auth-providers-github.mdx +3 -3
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-server-auth-providers-google.mdx +3 -3
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-server-auth-providers-workos.mdx +6 -6
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-server-context.mdx +68 -28
- fastmcp-2.13.0.2/docs/python-sdk/fastmcp-server-middleware-tool_injection.mdx +91 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-server-server.mdx +54 -54
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-settings.mdx +11 -11
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-tools-tool_manager.mdx +10 -10
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-utilities-cli.mdx +1 -1
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/updates.mdx +18 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/auth/azure_oauth/server.py +8 -3
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/get_file.py +6 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/memory.py +7 -5
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/pyproject.toml +25 -3
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/cli/cli.py +2 -2
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/client/auth/oauth.py +7 -6
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/client/client.py +10 -10
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/client/sampling.py +1 -1
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/client/transports.py +34 -34
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/contrib/component_manager/__init__.py +1 -1
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/contrib/component_manager/component_manager.py +2 -2
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/experimental/sampling/handlers/openai.py +2 -2
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/experimental/server/openapi/__init__.py +5 -8
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/experimental/server/openapi/components.py +11 -7
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/experimental/utilities/openapi/__init__.py +10 -15
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/experimental/utilities/openapi/director.py +1 -1
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/experimental/utilities/openapi/json_schema_converter.py +2 -2
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/experimental/utilities/openapi/parser.py +3 -5
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/mcp_config.py +2 -3
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/prompts/prompt.py +9 -13
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/resources/resource.py +1 -3
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/resources/resource_manager.py +1 -1
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/server/__init__.py +1 -1
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/server/auth/auth.py +2 -2
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/server/auth/oidc_proxy.py +2 -2
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/server/auth/providers/azure.py +48 -25
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/server/auth/providers/bearer.py +1 -1
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/server/auth/providers/in_memory.py +2 -2
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/server/auth/providers/introspection.py +2 -2
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/server/auth/providers/jwt.py +17 -18
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/server/auth/providers/supabase.py +1 -1
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/server/auth/providers/workos.py +2 -2
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/server/context.py +8 -10
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/server/dependencies.py +5 -6
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/server/http.py +2 -3
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/server/middleware/caching.py +1 -1
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/server/middleware/error_handling.py +8 -8
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/server/openapi.py +10 -6
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/server/proxy.py +5 -4
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/server/server.py +27 -29
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/tools/__init__.py +1 -1
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/tools/tool.py +12 -12
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/tools/tool_transform.py +6 -6
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/utilities/cli.py +5 -6
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/utilities/inspect.py +2 -2
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/utilities/json_schema_type.py +4 -4
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/utilities/logging.py +14 -18
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/utilities/mcp_server_config/v1/environments/base.py +1 -2
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -1
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/utilities/openapi.py +9 -9
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/utilities/tests.py +2 -4
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/auth/providers/test_azure.py +103 -38
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/utilities/test_inspect.py +4 -4
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/uv.lock +97 -249
- fastmcp-2.13.0rc3/docs/python-sdk/fastmcp-server-auth-jwt_issuer.mdx +0 -195
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/.ccignore +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/.cursor/rules/core-mcp-objects.mdc +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/.cursor/worktrees.json +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/.github/ISSUE_TEMPLATE/bug.yml +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/.github/ISSUE_TEMPLATE/enhancement.yml +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/.github/copilot-instructions.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/.github/dependabot.yml +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/.github/pull_request_template.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/.github/release.yml +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/.github/workflows/auto-close-duplicates.yml +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/.github/workflows/auto-close-needs-mre.yml +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/.github/workflows/martian-issue-triage.yml +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/.github/workflows/marvin-dedupe-issues.yml +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/.github/workflows/marvin-label-triage.yml +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/.github/workflows/marvin.yml +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/.github/workflows/publish.yml +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/.github/workflows/run-static.yml +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/.github/workflows/update-config-schema.yml +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/.github/workflows/update-sdk-docs.yml +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/.gitignore +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/.pre-commit-config.yaml +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/AGENTS.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/CLAUDE.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/CODE_OF_CONDUCT.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/LICENSE +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/README.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/SECURITY.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/.ccignore +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/.cursor/rules/mintlify.mdc +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/assets/brand/blue-logo.png +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/assets/brand/f-watercolor-waves-dark.png +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/assets/brand/f-watercolor-waves.png +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/assets/brand/favicon.svg +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/assets/brand/thumbnail-background.png +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/assets/brand/wordmark-padded.png +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/assets/brand/wordmark-watercolor-rainbow-dark.png +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/assets/brand/wordmark-watercolor-rainbow.png +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/assets/brand/wordmark-watercolor-waves-dark.png +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/assets/brand/wordmark-watercolor-waves.png +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/assets/brand/wordmark-white-padded.png +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/assets/brand/wordmark-white.png +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/assets/brand/wordmark.png +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/assets/images/fastmcp_cloud/connect.png +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/assets/images/fastmcp_cloud/create_project.png +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/assets/images/fastmcp_cloud/deployment.png +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/assets/images/fastmcp_cloud/quickstart.png +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/assets/images/oauth-proxy-consent-screen.png +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/assets/images/tutorial-rest-api-result.png +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/assets/schemas/mcp_server_config/latest.json +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/assets/schemas/mcp_server_config/v1.json +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/assets/updates/release-2-7.png +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/clients/auth/bearer.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/clients/auth/oauth.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/clients/client.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/clients/elicitation.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/clients/logging.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/clients/messages.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/clients/progress.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/clients/prompts.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/clients/resources.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/clients/roots.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/clients/sampling.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/clients/tools.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/clients/transports.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/community/README.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/community/showcase.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/css/banner.css +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/css/python-sdk.css +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/css/style.css +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/css/version-badge.css +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/deployment/fastmcp-cloud.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/deployment/http.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/deployment/running-server.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/deployment/server-configuration.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/development/contributing.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/development/releases.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/development/tests.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/development/upgrade-guide.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/getting-started/installation.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/getting-started/quickstart.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/getting-started/welcome.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/integrations/anthropic.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/integrations/auth0.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/integrations/authkit.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/integrations/aws-cognito.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/integrations/chatgpt.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/integrations/claude-code.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/integrations/claude-desktop.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/integrations/cursor-install-mcp.png +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/integrations/cursor.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/integrations/descope.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/integrations/eunomia-authorization.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/integrations/fastapi.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/integrations/gemini-cli.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/integrations/gemini.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/integrations/github.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/integrations/google.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/integrations/images/authkit/enable_dcr.png +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/integrations/images/permit/abac_condition_example.png +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/integrations/images/permit/abac_policy_example.png +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/integrations/images/permit/policy_mapping.png +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/integrations/images/permit/role_assignement.png +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/integrations/mcp-json-configuration.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/integrations/openai.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/integrations/openapi.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/integrations/permit.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/integrations/scalekit.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/integrations/workos.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/patterns/cli.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/patterns/contrib.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/patterns/decorating-methods.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/patterns/testing.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/patterns/tool-transformation.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/public/schemas/fastmcp.json/latest.json +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/public/schemas/fastmcp.json/v1.json +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-cli-__init__.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-cli-install-__init__.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-cli-install-claude_code.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-cli-install-claude_desktop.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-cli-install-cursor.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-cli-install-gemini_cli.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-cli-install-mcp_json.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-cli-install-shared.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-cli-run.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-client-__init__.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-client-auth-__init__.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-client-auth-bearer.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-client-auth-oauth.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-client-client.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-client-elicitation.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-client-logging.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-client-messages.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-client-oauth_callback.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-client-progress.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-client-roots.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-client-sampling.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-client-transports.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-exceptions.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-mcp_config.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-prompts-__init__.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-prompts-prompt.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-prompts-prompt_manager.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-resources-__init__.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-resources-resource.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-resources-resource_manager.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-resources-template.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-server-__init__.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-server-auth-__init__.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-server-auth-auth.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-server-auth-providers-__init__.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-server-auth-providers-bearer.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-server-auth-providers-descope.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-server-auth-providers-in_memory.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-server-auth-providers-introspection.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-server-auth-providers-jwt.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-server-auth-providers-scalekit.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-server-auth-providers-supabase.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-server-auth-redirect_validation.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-server-dependencies.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-server-elicitation.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-server-http.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-server-low_level.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-server-middleware-__init__.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-server-middleware-caching.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-server-middleware-error_handling.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-server-middleware-logging.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-server-middleware-middleware.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-server-middleware-rate_limiting.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-server-middleware-timing.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-server-openapi.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-server-proxy.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-tools-__init__.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-tools-tool.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-tools-tool_transform.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-utilities-__init__.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-utilities-auth.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-utilities-components.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-utilities-exceptions.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-utilities-http.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-utilities-inspect.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-utilities-json_schema.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-utilities-json_schema_type.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-utilities-logging.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-utilities-mcp_config.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-utilities-mcp_server_config-__init__.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-__init__.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-environments-__init__.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-environments-base.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-environments-uv.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-mcp_server_config.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-sources-__init__.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-sources-base.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-sources-filesystem.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-utilities-openapi.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-utilities-tests.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-utilities-types.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/python-sdk/fastmcp-utilities-ui.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/servers/auth/authentication.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/servers/auth/full-oauth-server.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/servers/auth/oauth-proxy.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/servers/auth/oidc-proxy.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/servers/auth/remote-oauth.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/servers/auth/token-verification.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/servers/composition.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/servers/context.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/servers/elicitation.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/servers/icons.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/servers/logging.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/servers/middleware.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/servers/progress.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/servers/prompts.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/servers/proxy.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/servers/resources.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/servers/sampling.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/servers/server.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/servers/storage-backends.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/servers/tools.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/snippets/local-focus.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/snippets/version-badge.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/snippets/youtube-embed.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/tutorials/create-mcp-server.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/tutorials/mcp.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/docs/tutorials/rest-api.mdx +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/atproto_mcp/README.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/atproto_mcp/demo.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/atproto_mcp/fastmcp.json +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/atproto_mcp/pyproject.toml +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/atproto_mcp/src/atproto_mcp/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/atproto_mcp/src/atproto_mcp/__main__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/atproto_mcp/src/atproto_mcp/_atproto/__init__.py +4 -4
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/atproto_mcp/src/atproto_mcp/_atproto/_client.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/atproto_mcp/src/atproto_mcp/_atproto/_posts.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/atproto_mcp/src/atproto_mcp/_atproto/_profile.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/atproto_mcp/src/atproto_mcp/_atproto/_read.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/atproto_mcp/src/atproto_mcp/_atproto/_social.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/atproto_mcp/src/atproto_mcp/py.typed +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/atproto_mcp/src/atproto_mcp/server.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/atproto_mcp/src/atproto_mcp/settings.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/atproto_mcp/src/atproto_mcp/types.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/auth/authkit_dcr/README.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/auth/authkit_dcr/client.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/auth/authkit_dcr/server.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/auth/aws_oauth/README.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/auth/aws_oauth/client.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/auth/aws_oauth/requirements.txt +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/auth/aws_oauth/server.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/auth/azure_oauth/README.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/auth/azure_oauth/client.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/auth/github_oauth/README.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/auth/github_oauth/client.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/auth/github_oauth/server.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/auth/google_oauth/README.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/auth/google_oauth/client.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/auth/google_oauth/server.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/auth/scalekit_oauth/README.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/auth/scalekit_oauth/client.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/auth/scalekit_oauth/server.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/auth/workos_oauth/README.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/auth/workos_oauth/client.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/auth/workos_oauth/server.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/complex_inputs.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/config_server.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/desktop.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/echo.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/fastmcp_config/env_interpolation_example.json +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/fastmcp_config/fastmcp.json +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/fastmcp_config/full_example.fastmcp.json +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/fastmcp_config/server.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/fastmcp_config/simple.fastmcp.json +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/fastmcp_config_demo/README.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/fastmcp_config_demo/fastmcp.json +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/fastmcp_config_demo/server.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/in_memory_proxy_example.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/memory.fastmcp.json +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/mount_example.fastmcp.json +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/mount_example.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/sampling.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/sampling_fallback.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/screenshot.fastmcp.json +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/screenshot.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/serializer.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/simple_echo.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/smart_home/README.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/smart_home/hub.fastmcp.json +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/smart_home/lights.fastmcp.json +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/smart_home/pyproject.toml +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/smart_home/src/smart_home/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/smart_home/src/smart_home/__main__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/smart_home/src/smart_home/hub.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/smart_home/src/smart_home/lights/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/smart_home/src/smart_home/lights/hue_utils.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/smart_home/src/smart_home/lights/server.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/smart_home/src/smart_home/py.typed +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/smart_home/src/smart_home/settings.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/tags_example.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/examples/text_me.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/justfile +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/logo.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/scripts/auto_close_duplicates.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/scripts/auto_close_needs_mre.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/__init__.py +2 -2
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/cli/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/cli/install/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/cli/install/claude_code.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/cli/install/claude_desktop.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/cli/install/cursor.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/cli/install/gemini_cli.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/cli/install/mcp_json.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/cli/install/shared.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/cli/run.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/client/__init__.py +9 -9
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/client/auth/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/client/auth/bearer.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/client/elicitation.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/client/logging.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/client/messages.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/client/oauth_callback.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/client/progress.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/client/roots.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/contrib/README.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/contrib/component_manager/README.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/contrib/component_manager/component_service.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/contrib/component_manager/example.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/contrib/mcp_mixin/README.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/contrib/mcp_mixin/__init__.py +2 -2
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/contrib/mcp_mixin/example.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/exceptions.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/experimental/sampling/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/experimental/sampling/handlers/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/experimental/sampling/handlers/base.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/experimental/server/openapi/README.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/experimental/server/openapi/routing.py +2 -2
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/experimental/server/openapi/server.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/experimental/utilities/openapi/README.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/experimental/utilities/openapi/formatters.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/experimental/utilities/openapi/models.py +3 -3
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/experimental/utilities/openapi/schemas.py +2 -2
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/prompts/__init__.py +1 -1
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/prompts/prompt_manager.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/py.typed +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/resources/__init__.py +5 -5
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/resources/template.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/resources/types.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/server/auth/__init__.py +5 -5
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/server/auth/handlers/authorize.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/server/auth/jwt_issuer.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/server/auth/middleware.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/server/auth/oauth_proxy.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/server/auth/providers/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/server/auth/providers/auth0.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/server/auth/providers/aws.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/server/auth/providers/descope.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/server/auth/providers/github.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/server/auth/providers/google.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/server/auth/providers/scalekit.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/server/auth/redirect_validation.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/server/elicitation.py +1 -1
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/server/low_level.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/server/middleware/__init__.py +1 -1
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/server/middleware/logging.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/server/middleware/middleware.py +1 -1
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/server/middleware/rate_limiting.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/server/middleware/timing.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/server/middleware/tool_injection.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/server/sampling/handler.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/settings.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/tools/tool_manager.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/utilities/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/utilities/auth.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/utilities/components.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/utilities/exceptions.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/utilities/http.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/utilities/json_schema.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/utilities/mcp_config.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/utilities/mcp_server_config/__init__.py +3 -3
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/utilities/types.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/src/fastmcp/utilities/ui.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/cli/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/cli/test_cli.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/cli/test_config.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/cli/test_cursor.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/cli/test_install.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/cli/test_mcp_server_config_integration.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/cli/test_mcp_server_config_schema.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/cli/test_project_prepare.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/cli/test_run.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/cli/test_run_config.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/cli/test_server_args.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/cli/test_shared.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/cli/test_with_argv.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/client/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/client/auth/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/client/auth/test_oauth_client.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/client/test_client.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/client/test_elicitation.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/client/test_logs.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/client/test_notifications.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/client/test_oauth_callback_xss.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/client/test_openapi_experimental.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/client/test_openapi_legacy.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/client/test_progress.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/client/test_roots.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/client/test_sampling.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/client/test_sse.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/client/test_stdio.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/client/test_streamable_http.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/client/transports/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/client/transports/test_uv_transport.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/conftest.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/contrib/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/contrib/test_bulk_tool_caller.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/contrib/test_component_manager.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/contrib/test_mcp_mixin.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/deprecated/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/deprecated/test_bearer_auth_provider.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/deprecated/test_dependencies.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/deprecated/test_deprecated.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/deprecated/test_mount_import_arg_order.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/deprecated/test_mount_separators.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/deprecated/test_output_schema_false.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/deprecated/test_proxy_client.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/deprecated/test_resource_prefixes.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/deprecated/test_route_type_ignore.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/deprecated/test_settings.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/experimental/README.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/experimental/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/experimental/openapi_parser/README.md +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/experimental/openapi_parser/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/experimental/openapi_parser/conftest.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/experimental/openapi_parser/server/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/experimental/openapi_parser/server/openapi/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/experimental/openapi_parser/server/openapi/test_comprehensive.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/experimental/openapi_parser/server/openapi/test_deepobject_style.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/experimental/openapi_parser/server/openapi/test_end_to_end_compatibility.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/experimental/openapi_parser/server/openapi/test_openapi_features.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/experimental/openapi_parser/server/openapi/test_openapi_performance.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/experimental/openapi_parser/server/openapi/test_parameter_collisions.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/experimental/openapi_parser/server/openapi/test_performance_comparison.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/experimental/openapi_parser/server/openapi/test_server.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/experimental/openapi_parser/utilities/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/experimental/openapi_parser/utilities/openapi/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/experimental/openapi_parser/utilities/openapi/conftest.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/experimental/openapi_parser/utilities/openapi/test_allof_requestbody.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/experimental/openapi_parser/utilities/openapi/test_direct_array_schemas.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/experimental/openapi_parser/utilities/openapi/test_director.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/experimental/openapi_parser/utilities/openapi/test_legacy_compatibility.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/experimental/openapi_parser/utilities/openapi/test_models.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/experimental/openapi_parser/utilities/openapi/test_nullable_fields.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/experimental/openapi_parser/utilities/openapi/test_parser.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/experimental/openapi_parser/utilities/openapi/test_schemas.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/experimental/openapi_parser/utilities/openapi/test_transitive_references.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/experimental/sampling/test_openai_handler.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/integration_tests/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/integration_tests/auth/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/integration_tests/auth/test_github_provider_integration.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/integration_tests/conftest.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/integration_tests/test_github_mcp_remote.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/prompts/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/prompts/test_prompt.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/prompts/test_prompt_manager.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/resources/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/resources/test_file_resources.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/resources/test_function_resources.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/resources/test_resource_manager.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/resources/test_resource_template.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/resources/test_resource_template_meta.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/resources/test_resources.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/auth/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/auth/providers/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/auth/providers/test_auth0.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/auth/providers/test_aws.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/auth/providers/test_descope.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/auth/providers/test_github.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/auth/providers/test_google.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/auth/providers/test_introspection.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/auth/providers/test_scalekit.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/auth/providers/test_supabase.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/auth/providers/test_workos.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/auth/test_auth_provider.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/auth/test_enhanced_error_responses.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/auth/test_jwt_issuer.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/auth/test_jwt_provider.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/auth/test_oauth_consent_flow.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/auth/test_oauth_mounting.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/auth/test_oauth_proxy.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/auth/test_oauth_proxy_redirect_validation.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/auth/test_oauth_proxy_storage.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/auth/test_oidc_proxy.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/auth/test_redirect_validation.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/auth/test_remote_auth_provider.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/auth/test_static_token_verifier.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/http/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/http/test_bearer_auth_backend.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/http/test_custom_routes.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/http/test_http_auth_middleware.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/http/test_http_dependencies.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/http/test_http_middleware.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/middleware/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/middleware/test_caching.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/middleware/test_error_handling.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/middleware/test_initialization_middleware.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/middleware/test_logging.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/middleware/test_middleware.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/middleware/test_rate_limiting.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/middleware/test_timing.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/middleware/test_tool_injection.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/openapi/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/openapi/conftest.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/openapi/test_advanced_behavior.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/openapi/test_basic_functionality.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/openapi/test_configuration.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/openapi/test_deepobject_style.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/openapi/test_description_propagation.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/openapi/test_explode_integration.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/openapi/test_openapi_compatibility.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/openapi/test_openapi_path_parameters.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/openapi/test_optional_parameters.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/openapi/test_parameter_collisions.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/openapi/test_route_map_fn.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/proxy/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/proxy/test_proxy_client.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/proxy/test_proxy_server.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/proxy/test_stateful_proxy_client.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/test_app_state.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/test_auth_integration.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/test_context.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/test_experimental_openapi_feature_flag.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/test_file_server.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/test_icons.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/test_import_server.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/test_input_validation.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/test_log_level.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/test_logging.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/test_mount.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/test_resource_prefix_formats.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/test_run_server.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/test_server.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/test_server_interactions.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/test_server_lifespan.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/test_streamable_http_no_redirect.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/test_tool_annotations.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/test_tool_exclude_args.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/server/test_tool_transformation.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/test_examples.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/test_mcp_config.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/tools/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/tools/test_tool.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/tools/test_tool_future_annotations.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/tools/test_tool_manager.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/tools/test_tool_transform.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/utilities/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/utilities/openapi/__init__.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/utilities/openapi/conftest.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/utilities/openapi/test_nullable_fields.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/utilities/openapi/test_openapi.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/utilities/openapi/test_openapi_advanced.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/utilities/openapi/test_openapi_fastapi.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/utilities/openapi/test_openapi_output_schemas.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/utilities/test_cli.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/utilities/test_components.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/utilities/test_json_schema.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/utilities/test_json_schema_type.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/utilities/test_logging.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/utilities/test_tests.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/utilities/test_typeadapter.py +0 -0
- {fastmcp-2.13.0rc3 → fastmcp-2.13.0.2}/tests/utilities/test_types.py +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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fastmcp
|
|
3
|
-
Version: 2.13.
|
|
3
|
+
Version: 2.13.0.2
|
|
4
4
|
Summary: The fast, Pythonic way to build MCP servers and clients.
|
|
5
5
|
Project-URL: Homepage, https://gofastmcp.com
|
|
6
6
|
Project-URL: Repository, https://github.com/jlowin/fastmcp
|
|
@@ -22,11 +22,11 @@ Requires-Dist: authlib>=1.5.2
|
|
|
22
22
|
Requires-Dist: cyclopts>=3.0.0
|
|
23
23
|
Requires-Dist: exceptiongroup>=1.2.2
|
|
24
24
|
Requires-Dist: httpx>=0.28.1
|
|
25
|
+
Requires-Dist: jsonschema-path>=0.3.4
|
|
25
26
|
Requires-Dist: mcp<2.0.0,>=1.17.0
|
|
26
|
-
Requires-Dist: openapi-core>=0.19.5
|
|
27
27
|
Requires-Dist: openapi-pydantic>=0.5.1
|
|
28
28
|
Requires-Dist: platformdirs>=4.0.0
|
|
29
|
-
Requires-Dist: py-key-value-aio[disk,keyring,memory]<0.3.0,>=0.2.
|
|
29
|
+
Requires-Dist: py-key-value-aio[disk,keyring,memory]<0.3.0,>=0.2.8
|
|
30
30
|
Requires-Dist: pydantic[email]>=2.11.7
|
|
31
31
|
Requires-Dist: pyperclip>=1.9.0
|
|
32
32
|
Requires-Dist: python-dotenv>=1.1.0
|
|
@@ -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
|
+
|