fastmcp 2.12.0rc1__tar.gz → 2.12.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.12.0rc1 → fastmcp-2.12.1}/.github/workflows/run-tests.yml +2 -1
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/AGENTS.md +14 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/PKG-INFO +3 -2
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/changelog.mdx +54 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/deployment/self-hosted.mdx +1 -1
- fastmcp-2.12.1/docs/development/contributing.mdx +187 -0
- fastmcp-2.12.1/docs/development/releases.mdx +79 -0
- fastmcp-2.12.1/docs/development/tests.mdx +350 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/docs.json +145 -160
- fastmcp-2.12.1/docs/getting-started/installation.mdx +82 -0
- fastmcp-2.12.1/docs/getting-started/quickstart.mdx +137 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/integrations/authkit.mdx +40 -10
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/integrations/azure.mdx +12 -8
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/integrations/github.mdx +12 -8
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/integrations/google.mdx +18 -11
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/integrations/workos-oauth.mdx +10 -8
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-client-auth-oauth.mdx +34 -16
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-client-elicitation.mdx +2 -2
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-server-auth-auth.mdx +29 -23
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-server-auth-oauth_proxy.mdx +22 -37
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-server-auth-providers-azure.mdx +4 -4
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-server-auth-providers-github.mdx +4 -4
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-server-auth-providers-google.mdx +4 -4
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-server-auth-providers-in_memory.mdx +10 -10
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-server-auth-providers-jwt.mdx +11 -11
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-server-auth-providers-workos.mdx +10 -6
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-server-context.mdx +28 -28
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-server-dependencies.mdx +4 -4
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-server-elicitation.mdx +7 -7
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-server-http.mdx +8 -8
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-server-server.mdx +51 -51
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-mcp_server_config.mdx +1 -1
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/servers/auth/authentication.mdx +22 -14
- fastmcp-2.12.1/docs/servers/auth/oauth-proxy.mdx +322 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/servers/auth/remote-oauth.mdx +3 -3
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/servers/auth/token-verification.mdx +3 -1
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/servers/composition.mdx +5 -1
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/servers/proxy.mdx +6 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/auth/azure_oauth/server.py +0 -1
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/auth/github_oauth/server.py +0 -1
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/auth/google_oauth/server.py +0 -1
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/auth/workos_oauth/server.py +0 -1
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/sampling_fallback.py +4 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/pyproject.toml +11 -9
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/client/auth/oauth.py +78 -2
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/client/elicitation.py +3 -2
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/experimental/sampling/handlers/openai.py +16 -9
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/server/auth/auth.py +130 -59
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/server/auth/oauth_proxy.py +122 -221
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/server/auth/providers/azure.py +3 -12
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/server/auth/providers/github.py +5 -13
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/server/auth/providers/google.py +4 -11
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/server/auth/providers/in_memory.py +0 -2
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/server/auth/providers/jwt.py +5 -7
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/server/auth/providers/workos.py +16 -16
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/server/context.py +3 -2
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/server/dependencies.py +1 -4
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/server/elicitation.py +3 -2
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/server/http.py +22 -59
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/server/middleware/middleware.py +3 -3
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/server/server.py +2 -3
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/settings.py +14 -6
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/tools/tool.py +2 -2
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/utilities/components.py +3 -3
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +1 -1
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/utilities/types.py +2 -2
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/server/auth/providers/test_azure.py +1 -1
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/server/auth/providers/test_github.py +1 -1
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/server/auth/providers/test_google.py +1 -1
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/server/auth/providers/test_workos.py +56 -2
- fastmcp-2.12.1/tests/server/auth/test_auth_provider.py +102 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/server/auth/test_jwt_provider.py +4 -0
- fastmcp-2.12.1/tests/server/auth/test_oauth_proxy.py +795 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/server/auth/test_oauth_proxy_redirect_validation.py +6 -5
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/server/auth/test_remote_auth_provider.py +150 -98
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/server/http/test_http_auth_middleware.py +2 -2
- fastmcp-2.12.1/tests/tools/__init__.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/uv.lock +11 -207
- fastmcp-2.12.0rc1/docs/deployment/testing.mdx +0 -159
- fastmcp-2.12.0rc1/docs/getting-started/installation.mdx +0 -110
- fastmcp-2.12.0rc1/docs/getting-started/quickstart.mdx +0 -129
- fastmcp-2.12.0rc1/docs/python-sdk/fastmcp-server-auth-registry.mdx +0 -43
- fastmcp-2.12.0rc1/docs/servers/auth/oauth-proxy.mdx +0 -381
- fastmcp-2.12.0rc1/src/fastmcp/experimental/sampling/handlers/__init__.py +0 -3
- fastmcp-2.12.0rc1/src/fastmcp/server/auth/registry.py +0 -52
- fastmcp-2.12.0rc1/test_github_oauth.py +0 -21
- fastmcp-2.12.0rc1/test_google_oauth.py +0 -22
- fastmcp-2.12.0rc1/tests/server/auth/test_oauth_proxy.py +0 -594
- fastmcp-2.12.0rc1/tests/server/auth/test_workos.py +0 -58
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/.ccignore +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/.cursor/rules/core-mcp-objects.mdc +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/.github/ISSUE_TEMPLATE/bug.yml +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/.github/ISSUE_TEMPLATE/enhancement.yml +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/.github/copilot-instructions.md +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/.github/dependabot.yml +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/.github/pull_request_template.md +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/.github/release.yml +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/.github/workflows/auto-close-duplicates.yml +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/.github/workflows/marvin-dedupe-issues.yml +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/.github/workflows/marvin-label-triage.yml +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/.github/workflows/marvin.yml +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/.github/workflows/publish.yml +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/.github/workflows/run-static.yml +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/.github/workflows/update-config-schema.yml +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/.github/workflows/update-sdk-docs.yml +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/.gitignore +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/.pre-commit-config.yaml +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/CLAUDE.md +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/CODE_OF_CONDUCT.md +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/LICENSE +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/README.md +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/README_OPENAPI.md +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/Windows_Notes.md +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/.ccignore +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/.cursor/rules/mintlify.mdc +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/assets/brand/blue-logo.png +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/assets/brand/card-background.png +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/assets/brand/favicon.svg +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/assets/brand/logo-wordmark-dark.svg +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/assets/brand/logo-wordmark.svg +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/assets/images/fastmcp_cloud/connect.png +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/assets/images/fastmcp_cloud/create_project.png +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/assets/images/fastmcp_cloud/deployment.png +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/assets/images/fastmcp_cloud/quickstart.png +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/assets/images/tutorial-rest-api-result.png +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/assets/schemas/mcp_server_config/latest.json +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/assets/schemas/mcp_server_config/v1.json +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/assets/updates/release-2-7.png +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/clients/auth/bearer.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/clients/auth/oauth.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/clients/client.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/clients/elicitation.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/clients/logging.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/clients/messages.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/clients/progress.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/clients/prompts.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/clients/resources.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/clients/roots.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/clients/sampling.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/clients/tools.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/clients/transports.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/community/README.md +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/community/showcase.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/css/banner.css +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/css/python-sdk.css +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/css/style.css +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/css/version-badge.css +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/deployment/fastmcp-cloud.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/deployment/running-server.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/deployment/server-configuration.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/getting-started/welcome.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/integrations/anthropic.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/integrations/asgi.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/integrations/chatgpt.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/integrations/claude-code.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/integrations/claude-desktop.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/integrations/cursor-install-mcp.png +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/integrations/cursor.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/integrations/eunomia-authorization.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/integrations/fastapi.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/integrations/gemini.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/integrations/images/authkit/enable_dcr.png +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/integrations/images/permit/abac_condition_example.png +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/integrations/images/permit/abac_policy_example.png +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/integrations/images/permit/policy_mapping.png +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/integrations/images/permit/role_assignement.png +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/integrations/mcp-json-configuration.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/integrations/openai.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/integrations/openapi.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/integrations/permit.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/patterns/cli.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/patterns/contrib.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/patterns/decorating-methods.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/patterns/tool-transformation.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/public/schemas/fastmcp.json/latest.json +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/public/schemas/fastmcp.json/v1.json +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-cli-__init__.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-cli-claude.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-cli-cli.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-cli-install-__init__.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-cli-install-claude_code.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-cli-install-claude_desktop.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-cli-install-cursor.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-cli-install-mcp_json.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-cli-install-shared.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-cli-run.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-client-__init__.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-client-auth-__init__.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-client-auth-bearer.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-client-client.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-client-logging.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-client-messages.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-client-oauth_callback.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-client-progress.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-client-roots.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-client-sampling.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-client-transports.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-exceptions.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-mcp_config.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-prompts-__init__.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-prompts-prompt.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-prompts-prompt_manager.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-resources-__init__.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-resources-resource.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-resources-resource_manager.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-resources-template.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-resources-types.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-server-__init__.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-server-auth-__init__.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-server-auth-providers-__init__.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-server-auth-providers-bearer.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-server-auth-redirect_validation.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-server-low_level.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-server-middleware-__init__.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-server-middleware-error_handling.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-server-middleware-logging.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-server-middleware-middleware.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-server-middleware-rate_limiting.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-server-middleware-timing.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-server-openapi.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-server-proxy.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-settings.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-tools-__init__.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-tools-tool.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-tools-tool_manager.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-tools-tool_transform.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-utilities-__init__.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-utilities-auth.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-utilities-cli.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-utilities-components.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-utilities-exceptions.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-utilities-http.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-utilities-inspect.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-utilities-json_schema.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-utilities-json_schema_type.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-utilities-logging.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-utilities-mcp_config.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-utilities-mcp_server_config-__init__.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-__init__.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-environments-__init__.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-environments-base.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-environments-uv.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-sources-__init__.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-sources-base.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-sources-filesystem.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-utilities-openapi.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-utilities-tests.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/python-sdk/fastmcp-utilities-types.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/servers/auth/full-oauth-server.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/servers/context.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/servers/elicitation.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/servers/logging.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/servers/middleware.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/servers/progress.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/servers/prompts.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/servers/resources.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/servers/sampling.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/servers/server.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/servers/tools.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/snippets/local-focus.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/snippets/version-badge.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/snippets/youtube-embed.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/tutorials/create-mcp-server.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/tutorials/mcp.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/tutorials/rest-api.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/docs/updates.mdx +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/atproto_mcp/README.md +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/atproto_mcp/demo.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/atproto_mcp/fastmcp.json +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/atproto_mcp/pyproject.toml +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/atproto_mcp/src/atproto_mcp/__init__.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/atproto_mcp/src/atproto_mcp/__main__.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/atproto_mcp/src/atproto_mcp/_atproto/__init__.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/atproto_mcp/src/atproto_mcp/_atproto/_client.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/atproto_mcp/src/atproto_mcp/_atproto/_posts.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/atproto_mcp/src/atproto_mcp/_atproto/_profile.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/atproto_mcp/src/atproto_mcp/_atproto/_read.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/atproto_mcp/src/atproto_mcp/_atproto/_social.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/atproto_mcp/src/atproto_mcp/py.typed +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/atproto_mcp/src/atproto_mcp/server.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/atproto_mcp/src/atproto_mcp/settings.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/atproto_mcp/src/atproto_mcp/types.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/auth/azure_oauth/README.md +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/auth/azure_oauth/client.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/auth/github_oauth/README.md +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/auth/github_oauth/client.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/auth/google_oauth/README.md +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/auth/google_oauth/client.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/auth/workos_oauth/README.md +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/auth/workos_oauth/client.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/complex_inputs.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/config_server.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/desktop.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/echo.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/fastmcp_config/env_interpolation_example.json +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/fastmcp_config/fastmcp.json +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/fastmcp_config/full_example.fastmcp.json +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/fastmcp_config/server.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/fastmcp_config/simple.fastmcp.json +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/fastmcp_config_demo/README.md +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/fastmcp_config_demo/fastmcp.json +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/fastmcp_config_demo/server.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/get_file.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/in_memory_proxy_example.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/memory.fastmcp.json +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/memory.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/mount_example.fastmcp.json +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/mount_example.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/sampling.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/screenshot.fastmcp.json +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/screenshot.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/serializer.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/simple_echo.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/smart_home/README.md +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/smart_home/hub.fastmcp.json +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/smart_home/lights.fastmcp.json +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/smart_home/pyproject.toml +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/smart_home/src/smart_home/__init__.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/smart_home/src/smart_home/__main__.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/smart_home/src/smart_home/hub.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/smart_home/src/smart_home/lights/__init__.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/smart_home/src/smart_home/lights/hue_utils.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/smart_home/src/smart_home/lights/server.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/smart_home/src/smart_home/py.typed +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/smart_home/src/smart_home/settings.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/smart_home/uv.lock +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/tags_example.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/examples/text_me.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/justfile +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/scripts/auto_close_duplicates.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/__init__.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/cli/__init__.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/cli/claude.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/cli/cli.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/cli/install/__init__.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/cli/install/claude_code.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/cli/install/claude_desktop.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/cli/install/cursor.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/cli/install/mcp_json.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/cli/install/shared.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/cli/run.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/client/__init__.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/client/auth/__init__.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/client/auth/bearer.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/client/client.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/client/logging.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/client/messages.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/client/oauth_callback.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/client/progress.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/client/roots.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/client/sampling.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/client/transports.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/contrib/README.md +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/contrib/component_manager/README.md +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/contrib/component_manager/__init__.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/contrib/component_manager/component_manager.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/contrib/component_manager/component_service.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/contrib/component_manager/example.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/contrib/mcp_mixin/README.md +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/contrib/mcp_mixin/example.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/exceptions.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/experimental/sampling/__init__.py +0 -0
- {fastmcp-2.12.0rc1/src/fastmcp/server/auth/providers → fastmcp-2.12.1/src/fastmcp/experimental/sampling/handlers}/__init__.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/experimental/sampling/handlers/base.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/experimental/server/openapi/README.md +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/experimental/server/openapi/__init__.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/experimental/server/openapi/components.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/experimental/server/openapi/routing.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/experimental/server/openapi/server.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/experimental/utilities/openapi/README.md +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/experimental/utilities/openapi/__init__.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/experimental/utilities/openapi/director.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/experimental/utilities/openapi/formatters.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/experimental/utilities/openapi/json_schema_converter.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/experimental/utilities/openapi/models.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/experimental/utilities/openapi/parser.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/experimental/utilities/openapi/schemas.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/mcp_config.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/prompts/__init__.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/prompts/prompt.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/prompts/prompt_manager.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/py.typed +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/resources/__init__.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/resources/resource.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/resources/resource_manager.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/resources/template.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/resources/types.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/server/__init__.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/server/auth/__init__.py +0 -0
- {fastmcp-2.12.0rc1/src/fastmcp/utilities/mcp_server_config/v1 → fastmcp-2.12.1/src/fastmcp/server/auth/providers}/__init__.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/server/auth/providers/bearer.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/server/auth/redirect_validation.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/server/low_level.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/server/middleware/__init__.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/server/middleware/error_handling.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/server/middleware/logging.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/server/middleware/rate_limiting.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/server/middleware/timing.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/server/openapi.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/server/proxy.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/server/sampling/handler.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/tools/__init__.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/tools/tool_manager.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/tools/tool_transform.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/utilities/__init__.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/utilities/auth.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/utilities/cli.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/utilities/exceptions.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/utilities/http.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/utilities/inspect.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/utilities/json_schema.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/utilities/json_schema_type.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/utilities/logging.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/utilities/mcp_config.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
- {fastmcp-2.12.0rc1/src/fastmcp/utilities/mcp_server_config/v1/sources → fastmcp-2.12.1/src/fastmcp/utilities/mcp_server_config/v1}/__init__.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
- {fastmcp-2.12.0rc1/tests → fastmcp-2.12.1/src/fastmcp/utilities/mcp_server_config/v1/sources}/__init__.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/utilities/openapi.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/src/fastmcp/utilities/tests.py +0 -0
- {fastmcp-2.12.0rc1/tests/client → fastmcp-2.12.1/tests}/__init__.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/cli/__init__.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/cli/test_cli.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/cli/test_config.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/cli/test_cursor.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/cli/test_install.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/cli/test_mcp_server_config_integration.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/cli/test_mcp_server_config_schema.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/cli/test_project_prepare.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/cli/test_run.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/cli/test_run_config.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/cli/test_run_with_uv.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/cli/test_server_args.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/cli/test_shared.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/cli/test_with_argv.py +0 -0
- {fastmcp-2.12.0rc1/tests/client/auth → fastmcp-2.12.1/tests/client}/__init__.py +0 -0
- {fastmcp-2.12.0rc1/tests/client/transports → fastmcp-2.12.1/tests/client/auth}/__init__.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/client/auth/test_oauth_client.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/client/auth/test_oauth_token_expiry.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/client/test_client.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/client/test_elicitation.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/client/test_logs.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/client/test_notifications.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/client/test_openapi_experimental.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/client/test_openapi_legacy.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/client/test_progress.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/client/test_roots.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/client/test_sampling.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/client/test_sse.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/client/test_stdio.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/client/test_streamable_http.py +0 -0
- {fastmcp-2.12.0rc1/tests/experimental → fastmcp-2.12.1/tests/client/transports}/__init__.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/client/transports/test_uv_transport.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/conftest.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/contrib/__init__.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/contrib/test_bulk_tool_caller.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/contrib/test_component_manager.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/contrib/test_mcp_mixin.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/deprecated/__init__.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/deprecated/test_bearer_auth_provider.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/deprecated/test_dependencies.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/deprecated/test_deprecated.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/deprecated/test_mount_import_arg_order.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/deprecated/test_mount_separators.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/deprecated/test_output_schema_false.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/deprecated/test_proxy_client.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/deprecated/test_resource_prefixes.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/deprecated/test_route_type_ignore.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/deprecated/test_settings.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/experimental/README.md +0 -0
- {fastmcp-2.12.0rc1/tests/experimental/openapi_parser → fastmcp-2.12.1/tests/experimental}/__init__.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/experimental/openapi_parser/README.md +0 -0
- {fastmcp-2.12.0rc1/tests/experimental/openapi_parser/server → fastmcp-2.12.1/tests/experimental/openapi_parser}/__init__.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/experimental/openapi_parser/conftest.py +0 -0
- {fastmcp-2.12.0rc1/tests/experimental/openapi_parser/utilities → fastmcp-2.12.1/tests/experimental/openapi_parser/server}/__init__.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/experimental/openapi_parser/server/openapi/__init__.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/experimental/openapi_parser/server/openapi/test_comprehensive.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/experimental/openapi_parser/server/openapi/test_deepobject_style.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/experimental/openapi_parser/server/openapi/test_end_to_end_compatibility.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/experimental/openapi_parser/server/openapi/test_openapi_features.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/experimental/openapi_parser/server/openapi/test_openapi_performance.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/experimental/openapi_parser/server/openapi/test_parameter_collisions.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/experimental/openapi_parser/server/openapi/test_performance_comparison.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/experimental/openapi_parser/server/openapi/test_server.py +0 -0
- {fastmcp-2.12.0rc1/tests/integration_tests → fastmcp-2.12.1/tests/experimental/openapi_parser/utilities}/__init__.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/experimental/openapi_parser/utilities/openapi/__init__.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/experimental/openapi_parser/utilities/openapi/conftest.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/experimental/openapi_parser/utilities/openapi/test_allof_requestbody.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/experimental/openapi_parser/utilities/openapi/test_director.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/experimental/openapi_parser/utilities/openapi/test_legacy_compatibility.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/experimental/openapi_parser/utilities/openapi/test_models.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/experimental/openapi_parser/utilities/openapi/test_nullable_fields.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/experimental/openapi_parser/utilities/openapi/test_parser.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/experimental/openapi_parser/utilities/openapi/test_schemas.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/experimental/openapi_parser/utilities/openapi/test_transitive_references.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/experimental/sampling/test_openai_handler.py +0 -0
- {fastmcp-2.12.0rc1/tests/integration_tests/auth → fastmcp-2.12.1/tests/integration_tests}/__init__.py +0 -0
- {fastmcp-2.12.0rc1/tests/prompts → fastmcp-2.12.1/tests/integration_tests/auth}/__init__.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/integration_tests/auth/test_github_provider_integration.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/integration_tests/conftest.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/integration_tests/test_github_mcp_remote.py +0 -0
- {fastmcp-2.12.0rc1/tests/resources → fastmcp-2.12.1/tests/prompts}/__init__.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/prompts/test_prompt.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/prompts/test_prompt_manager.py +0 -0
- {fastmcp-2.12.0rc1/tests/server → fastmcp-2.12.1/tests/resources}/__init__.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/resources/test_file_resources.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/resources/test_function_resources.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/resources/test_resource_manager.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/resources/test_resource_template.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/resources/test_resource_template_meta.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/resources/test_resources.py +0 -0
- {fastmcp-2.12.0rc1/tests/server/auth → fastmcp-2.12.1/tests/server}/__init__.py +0 -0
- {fastmcp-2.12.0rc1/tests/server/auth/providers → fastmcp-2.12.1/tests/server/auth}/__init__.py +0 -0
- {fastmcp-2.12.0rc1/tests/server/http → fastmcp-2.12.1/tests/server/auth/providers}/__init__.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/server/auth/test_redirect_validation.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/server/auth/test_static_token_verifier.py +0 -0
- {fastmcp-2.12.0rc1/tests/server/middleware → fastmcp-2.12.1/tests/server/http}/__init__.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/server/http/test_bearer_auth_backend.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/server/http/test_custom_routes.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/server/http/test_http_dependencies.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/server/http/test_http_middleware.py +0 -0
- {fastmcp-2.12.0rc1/tests/server/openapi → fastmcp-2.12.1/tests/server/middleware}/__init__.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/server/middleware/test_error_handling.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/server/middleware/test_logging.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/server/middleware/test_middleware.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/server/middleware/test_rate_limiting.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/server/middleware/test_timing.py +0 -0
- {fastmcp-2.12.0rc1/tests/server/proxy → fastmcp-2.12.1/tests/server/openapi}/__init__.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/server/openapi/conftest.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/server/openapi/test_advanced_behavior.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/server/openapi/test_basic_functionality.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/server/openapi/test_configuration.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/server/openapi/test_deepobject_style.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/server/openapi/test_description_propagation.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/server/openapi/test_explode_integration.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/server/openapi/test_openapi_compatibility.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/server/openapi/test_openapi_path_parameters.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/server/openapi/test_optional_parameters.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/server/openapi/test_parameter_collisions.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/server/openapi/test_route_map_fn.py +0 -0
- {fastmcp-2.12.0rc1/tests/tools → fastmcp-2.12.1/tests/server/proxy}/__init__.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/server/proxy/test_proxy_client.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/server/proxy/test_proxy_server.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/server/proxy/test_stateful_proxy_client.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/server/test_app_state.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/server/test_auth_integration.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/server/test_context.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/server/test_experimental_openapi_feature_flag.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/server/test_file_server.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/server/test_import_server.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/server/test_logging.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/server/test_mount.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/server/test_resource_prefix_formats.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/server/test_run_server.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/server/test_server.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/server/test_server_interactions.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/server/test_streamable_http_no_redirect.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/server/test_tool_annotations.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/server/test_tool_exclude_args.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/server/test_tool_transformation.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/test_examples.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/test_mcp_config.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/tools/test_tool.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/tools/test_tool_future_annotations.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/tools/test_tool_manager.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/tools/test_tool_transform.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/utilities/__init__.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/utilities/openapi/__init__.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/utilities/openapi/conftest.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/utilities/openapi/test_nullable_fields.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/utilities/openapi/test_openapi.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/utilities/openapi/test_openapi_advanced.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/utilities/openapi/test_openapi_fastapi.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/utilities/openapi/test_openapi_output_schemas.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/utilities/test_cli.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/utilities/test_components.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/utilities/test_inspect.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/utilities/test_json_schema.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/utilities/test_json_schema_type.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/utilities/test_logging.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/utilities/test_tests.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/utilities/test_typeadapter.py +0 -0
- {fastmcp-2.12.0rc1 → fastmcp-2.12.1}/tests/utilities/test_types.py +0 -0
|
@@ -73,7 +73,8 @@ jobs:
|
|
|
73
73
|
run: uv sync --frozen
|
|
74
74
|
|
|
75
75
|
- name: Run integration tests
|
|
76
|
-
|
|
76
|
+
# use longer per-test timeout than the default 3s
|
|
77
|
+
run: uv run pytest -v tests -m "integration" --timeout=15
|
|
77
78
|
env:
|
|
78
79
|
FASTMCP_GITHUB_TOKEN: ${{ secrets.FASTMCP_GITHUB_TOKEN }}
|
|
79
80
|
FASTMCP_TEST_AUTH_GITHUB_CLIENT_ID: ${{ secrets.FASTMCP_TEST_AUTH_GITHUB_CLIENT_ID }}
|
|
@@ -48,6 +48,15 @@ When modifying MCP functionality, changes typically need to be applied across al
|
|
|
48
48
|
- **Resource Templates** (`src/resources/` + `ResourceManager`)
|
|
49
49
|
- **Prompts** (`src/prompts/` + `PromptManager`)
|
|
50
50
|
|
|
51
|
+
## Writing Style
|
|
52
|
+
|
|
53
|
+
- Be brief and to the point. Do not regurgitate information that can easily be gleaned from the code, except to guide the reader to where the code is located.
|
|
54
|
+
- **NEVER** use "This isn't..." or "not just..." constructions. State what something IS directly. Avoid defensive writing patterns like:
|
|
55
|
+
- "This isn't X, it's Y" or "Not just X, but Y" → Just say "This is Y"
|
|
56
|
+
- "Not just about X" → State the actual purpose
|
|
57
|
+
- "We're not doing X, we're doing Y" → Just explain what you're doing
|
|
58
|
+
- Any variation of explaining what something isn't before what it is
|
|
59
|
+
|
|
51
60
|
## Testing Best Practices
|
|
52
61
|
|
|
53
62
|
### Testing Standards
|
|
@@ -59,6 +68,10 @@ When modifying MCP functionality, changes typically need to be applied across al
|
|
|
59
68
|
- **NEVER** add `@pytest.mark.asyncio` to tests - `asyncio_mode = "auto"` is set globally
|
|
60
69
|
- **ALWAYS** run pytest after significant changes
|
|
61
70
|
|
|
71
|
+
### Inline Snapshots
|
|
72
|
+
|
|
73
|
+
FastMCP uses `inline-snapshot` for testing complex data structures. On first run with empty `snapshot()`, pytest will auto-populate the expected value. To update snapshots after intentional changes, run `pytest --inline-snapshot=fix`. This is particularly useful for testing JSON schemas and API responses.
|
|
74
|
+
|
|
62
75
|
### Always Use In-Memory Transport
|
|
63
76
|
|
|
64
77
|
Pass FastMCP servers directly to clients for testing:
|
|
@@ -203,6 +216,7 @@ If something needs work, your review should help it get there through specific,
|
|
|
203
216
|
### Review Checklist
|
|
204
217
|
|
|
205
218
|
Before approving, verify:
|
|
219
|
+
|
|
206
220
|
- [ ] All required development workflow steps completed (uv sync, pre-commit, pytest)
|
|
207
221
|
- [ ] Changes align with repository patterns and conventions
|
|
208
222
|
- [ ] API changes are documented and backwards-compatible where possible
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fastmcp
|
|
3
|
-
Version: 2.12.
|
|
3
|
+
Version: 2.12.1
|
|
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,13 +22,14 @@ Requires-Dist: cyclopts>=3.0.0
|
|
|
22
22
|
Requires-Dist: exceptiongroup>=1.2.2
|
|
23
23
|
Requires-Dist: httpx>=0.28.1
|
|
24
24
|
Requires-Dist: mcp<2.0.0,>=1.12.4
|
|
25
|
-
Requires-Dist: openai>=1.95.1
|
|
26
25
|
Requires-Dist: openapi-core>=0.19.5
|
|
27
26
|
Requires-Dist: openapi-pydantic>=0.5.1
|
|
28
27
|
Requires-Dist: pydantic[email]>=2.11.7
|
|
29
28
|
Requires-Dist: pyperclip>=1.9.0
|
|
30
29
|
Requires-Dist: python-dotenv>=1.1.0
|
|
31
30
|
Requires-Dist: rich>=13.9.4
|
|
31
|
+
Provides-Extra: openai
|
|
32
|
+
Requires-Dist: openai>=1.102.0; extra == 'openai'
|
|
32
33
|
Provides-Extra: websockets
|
|
33
34
|
Requires-Dist: websockets>=15.0.1; extra == 'websockets'
|
|
34
35
|
Description-Content-Type: text/markdown
|
|
@@ -4,6 +4,60 @@ icon: "list-check"
|
|
|
4
4
|
rss: true
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
+
<Update label="v2.12.0" description="2025-08-31">
|
|
8
|
+
|
|
9
|
+
**[v2.12.0: Auth to the Races](https://github.com/jlowin/fastmcp/releases/tag/v2.12.0)**
|
|
10
|
+
|
|
11
|
+
This release introduces major authentication and configuration enhancements that make FastMCP more accessible and powerful for developers working with various identity providers and deployment scenarios.
|
|
12
|
+
|
|
13
|
+
## OAuth Proxy: Broader Provider Support
|
|
14
|
+
|
|
15
|
+
The OAuth Proxy bridges the gap for authentication providers that don't support Dynamic Client Registration (DCR), a requirement for standard MCP OAuth flows. This feature enables seamless integration with major platforms that previously required complex workarounds.
|
|
16
|
+
|
|
17
|
+
**Native integrations now available:**
|
|
18
|
+
- GitHub
|
|
19
|
+
- Google
|
|
20
|
+
- WorkOS
|
|
21
|
+
- Azure
|
|
22
|
+
|
|
23
|
+
With the OAuth Proxy, you can authenticate users through these providers with minimal configuration, expanding the ecosystem of supported identity platforms and making FastMCP servers more accessible to enterprise environments.
|
|
24
|
+
|
|
25
|
+
## Declarative JSON Configuration
|
|
26
|
+
|
|
27
|
+
The new `fastmcp.json` configuration system establishes a single source of truth for server settings, replacing scattered configuration across multiple files and environment variables.
|
|
28
|
+
|
|
29
|
+
**Configure everything in one place:**
|
|
30
|
+
- Dependencies and requirements
|
|
31
|
+
- Transport settings
|
|
32
|
+
- Server entrypoints
|
|
33
|
+
- Metadata and descriptions
|
|
34
|
+
- Environment variables
|
|
35
|
+
|
|
36
|
+
This standardization not only simplifies deployment but also enables portable server descriptions that can be shared and reused across projects. The typed source system provides validation and autocompletion, reducing configuration errors.
|
|
37
|
+
|
|
38
|
+
## Sampling API Fallback
|
|
39
|
+
|
|
40
|
+
Not all MCP clients support advanced features like the Sampling API for LLM completions. The new fallback mechanism solves this adoption challenge by allowing servers to generate sampling completions server-side when clients lack support.
|
|
41
|
+
|
|
42
|
+
This approach:
|
|
43
|
+
- Maintains compatibility with all clients
|
|
44
|
+
- Encourages feature adoption without breaking existing integrations
|
|
45
|
+
- Provides a smooth upgrade path as client capabilities evolve
|
|
46
|
+
|
|
47
|
+
## Breaking Changes
|
|
48
|
+
- The `inspect` command now provides structured output with format options for better integration with tooling
|
|
49
|
+
|
|
50
|
+
## Additional Enhancements
|
|
51
|
+
- Improved CLI configuration parsing with better error messages
|
|
52
|
+
- Support for multiple `--with-editable` flags for development workflows
|
|
53
|
+
- Comma-separated OAuth scope support for fine-grained permissions
|
|
54
|
+
- Configurable logging middleware for better debugging
|
|
55
|
+
- Support for importing custom route endpoints
|
|
56
|
+
|
|
57
|
+
**Full Changelog**: [v2.11.3...v2.12.0](https://github.com/jlowin/fastmcp/compare/v2.11.3...v2.12.0)
|
|
58
|
+
|
|
59
|
+
</Update>
|
|
60
|
+
|
|
7
61
|
<Update label="v2.11.3" description="2025-08-11">
|
|
8
62
|
|
|
9
63
|
**[v2.11.3: API-tite for Change](https://github.com/jlowin/fastmcp/releases/tag/v2.11.3)**
|
|
@@ -194,7 +194,7 @@ MCP_AUTH_TOKEN=secret uvicorn app:app --host 0.0.0.0 --port 8000
|
|
|
194
194
|
|
|
195
195
|
## Testing Your Deployment
|
|
196
196
|
|
|
197
|
-
Once your server is deployed, you'll need to verify it's accessible and functioning correctly. For comprehensive testing strategies including connectivity tests, client testing, and authentication testing, see the [Testing Your Server](/
|
|
197
|
+
Once your server is deployed, you'll need to verify it's accessible and functioning correctly. For comprehensive testing strategies including connectivity tests, client testing, and authentication testing, see the [Testing Your Server](/development/tests) guide.
|
|
198
198
|
|
|
199
199
|
## Hosting Your Server
|
|
200
200
|
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Contributing"
|
|
3
|
+
description: "Development workflow for FastMCP contributors"
|
|
4
|
+
icon: code-pull-request
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Contributing to FastMCP means joining a community that values clean, maintainable code and thoughtful API design. All contributions are valued - from fixing typos in documentation to implementing major features.
|
|
8
|
+
|
|
9
|
+
## Issues
|
|
10
|
+
|
|
11
|
+
### Issue First, Code Second
|
|
12
|
+
|
|
13
|
+
**Every pull request requires a corresponding issue - no exceptions.** This requirement creates a collaborative space where approach, scope, and alignment are established before code is written. Issues serve as design documents where maintainers and contributors discuss implementation strategy, identify potential conflicts with existing patterns, and ensure proposed changes advance FastMCP's vision.
|
|
14
|
+
|
|
15
|
+
**FastMCP is an opinionated framework, not a kitchen sink.** The maintainers have strong beliefs about what FastMCP should and shouldn't do. Just because something takes N lines of code and you want it in fewer lines doesn't mean FastMCP should take on the maintenance burden or endorse that pattern. This is judged at the maintainers' discretion.
|
|
16
|
+
|
|
17
|
+
Use issues to understand scope BEFORE opening PRs. The issue discussion determines whether a feature belongs in core, contrib, or not at all.
|
|
18
|
+
|
|
19
|
+
### Writing Good Issues
|
|
20
|
+
|
|
21
|
+
FastMCP is an extremely highly-trafficked repository maintained by a very small team. Issues that appear to transfer burden to maintainers without any effort to validate the problem will be closed. Please help the maintainers help you by always providing a minimal reproducible example and clearly describing the problem.
|
|
22
|
+
|
|
23
|
+
**LLM-generated issues will be closed immediately.** Issues that contain paragraphs of unnecessary explanation, verbose problem descriptions, or obvious LLM authorship patterns obfuscate the actual problem and transfer burden to maintainers.
|
|
24
|
+
|
|
25
|
+
Write clear, concise issues that:
|
|
26
|
+
- State the problem directly
|
|
27
|
+
- Provide a minimal reproducible example
|
|
28
|
+
- Skip unnecessary background or context
|
|
29
|
+
- Take responsibility for clear communication
|
|
30
|
+
|
|
31
|
+
Issues may be labeled "Invalid" simply due to confusion caused by verbosity or not adhering to the guidelines outlined here.
|
|
32
|
+
|
|
33
|
+
## Pull Requests
|
|
34
|
+
|
|
35
|
+
PRs that deviate from FastMCP's core principles will be rejected regardless of implementation quality. **PRs are NOT for iterating on ideas** - they should only be opened for ideas that already have a bias toward acceptance based on issue discussion.
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
### Development Environment
|
|
39
|
+
|
|
40
|
+
#### Installation
|
|
41
|
+
|
|
42
|
+
To contribute to FastMCP, you'll need to set up a development environment with all necessary tools and dependencies.
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
# Clone the repository
|
|
46
|
+
git clone https://github.com/jlowin/fastmcp.git
|
|
47
|
+
cd fastmcp
|
|
48
|
+
|
|
49
|
+
# Install all dependencies including dev tools
|
|
50
|
+
uv sync
|
|
51
|
+
|
|
52
|
+
# Install pre-commit hooks
|
|
53
|
+
uv run pre-commit install
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
In addition, some development commands require [just](https://github.com/casey/just) to be installed.
|
|
57
|
+
|
|
58
|
+
Pre-commit hooks will run automatically on every commit to catch issues before they reach CI. If you see failures, fix them before committing - never commit broken code expecting to fix it later.
|
|
59
|
+
|
|
60
|
+
### Development Standards
|
|
61
|
+
|
|
62
|
+
#### Scope
|
|
63
|
+
|
|
64
|
+
Large pull requests create review bottlenecks and quality risks. Unless you're fixing a discrete bug or making an incredibly well-scoped change, keep PRs small and focused.
|
|
65
|
+
|
|
66
|
+
A PR that changes 50 lines across 3 files can be thoroughly reviewed in minutes. A PR that changes 500 lines across 20 files requires hours of careful analysis and often hides subtle issues.
|
|
67
|
+
|
|
68
|
+
Breaking large features into smaller PRs:
|
|
69
|
+
- Creates better review experiences
|
|
70
|
+
- Makes git history clear
|
|
71
|
+
- Simplifies debugging with bisect
|
|
72
|
+
- Reduces merge conflicts
|
|
73
|
+
- Gets your code merged faster
|
|
74
|
+
|
|
75
|
+
#### Code Quality
|
|
76
|
+
|
|
77
|
+
FastMCP values clarity over cleverness. Every line you write will be maintained by someone else - possibly years from now, possibly without context about your decisions.
|
|
78
|
+
|
|
79
|
+
**PRs can be rejected for two opposing reasons:**
|
|
80
|
+
1. **Insufficient quality** - Code that doesn't meet our standards for clarity, maintainability, or idiomaticity
|
|
81
|
+
2. **Overengineering** - Code that is overbearing, unnecessarily complex, or tries to be too clever
|
|
82
|
+
|
|
83
|
+
The focus is on idiomatic, high-quality Python. FastMCP uses patterns like `NotSet` type as an alternative to `None` in certain situations - follow existing patterns.
|
|
84
|
+
|
|
85
|
+
#### Required Practices
|
|
86
|
+
|
|
87
|
+
**Full type annotations** on all functions and methods. They catch bugs before runtime and serve as inline documentation.
|
|
88
|
+
|
|
89
|
+
**Async/await patterns** for all I/O operations. Even if your specific use case doesn't need concurrency, consistency means users can compose features without worrying about blocking operations.
|
|
90
|
+
|
|
91
|
+
**Descriptive names** make code self-documenting. `auth_token` is clear; `tok` requires mental translation.
|
|
92
|
+
|
|
93
|
+
**Specific exception types** make error handling predictable. Catching `ValueError` tells readers exactly what error you expect. Never use bare `except` clauses.
|
|
94
|
+
|
|
95
|
+
#### Anti-Patterns to Avoid
|
|
96
|
+
|
|
97
|
+
**Complex one-liners** are hard to debug and modify. Break operations into clear steps.
|
|
98
|
+
|
|
99
|
+
**Mutable default arguments** cause subtle bugs. Use `None` as the default and create the mutable object inside the function.
|
|
100
|
+
|
|
101
|
+
**Breaking established patterns** confuses readers. If you must deviate, discuss in the issue first.
|
|
102
|
+
|
|
103
|
+
### Pre-Commit Checks
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
# Runs automatically on commit, or manually:
|
|
107
|
+
uv run pre-commit run --all-files
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
This runs three critical tools:
|
|
111
|
+
- **Ruff**: Linting and formatting
|
|
112
|
+
- **ty**: Static type checking
|
|
113
|
+
- **Pytest**: Core test suite
|
|
114
|
+
|
|
115
|
+
CI will reject PRs that fail these checks. Always run them locally first.
|
|
116
|
+
|
|
117
|
+
### Testing
|
|
118
|
+
|
|
119
|
+
Tests are documentation that shows how features work. Good tests give reviewers confidence and help future maintainers understand intent.
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
# Run specific test directory
|
|
123
|
+
uv run pytest tests/server/ -v
|
|
124
|
+
|
|
125
|
+
# Run all tests before submitting PR
|
|
126
|
+
uv run pytest
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
Every new feature needs tests. See the [Testing Guide](/development/tests) for patterns and requirements.
|
|
130
|
+
|
|
131
|
+
### Documentation
|
|
132
|
+
|
|
133
|
+
A feature doesn't exist unless it's documented. Note that FastMCP's hosted documentation always tracks the main branch - users who want historical documentation can clone the repo, checkout a specific tag, and host it themselves.
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
# Preview documentation locally
|
|
137
|
+
just docs
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Documentation requirements:
|
|
141
|
+
- **Explain concepts in prose first** - Code without context is just syntax
|
|
142
|
+
- **Complete, runnable examples** - Every code block should be copy-pasteable
|
|
143
|
+
- **Register in docs.json** - Makes pages appear in navigation
|
|
144
|
+
- **Version badges** - Mark when features were added using `<VersionBadge />`
|
|
145
|
+
|
|
146
|
+
#### SDK Documentation
|
|
147
|
+
|
|
148
|
+
FastMCP's SDK documentation is auto-generated from the source code docstrings and type annotations. It is automatically updated on every merge to main by a GitHub Actions workflow, so users are *not* responsible for keeping the documentation up to date. However, to generate it proactively, you can use the following command:
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
just api-ref-all
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### Submitting Your PR
|
|
155
|
+
|
|
156
|
+
#### Before Submitting
|
|
157
|
+
|
|
158
|
+
1. **Run all checks**: `uv run pre-commit run --all-files && uv run pytest`
|
|
159
|
+
2. **Keep scope small**: One feature or fix per PR
|
|
160
|
+
3. **Write clear description**: Your PR description becomes permanent documentation
|
|
161
|
+
4. **Update docs**: Include documentation for API changes
|
|
162
|
+
|
|
163
|
+
#### PR Description
|
|
164
|
+
|
|
165
|
+
Write PR descriptions that explain:
|
|
166
|
+
- What problem you're solving
|
|
167
|
+
- Why you chose this approach
|
|
168
|
+
- Any trade-offs or alternatives considered
|
|
169
|
+
- Migration path for breaking changes
|
|
170
|
+
|
|
171
|
+
Focus on the "why" - the code shows the "what". Keep it concise but complete.
|
|
172
|
+
|
|
173
|
+
#### What We Look For
|
|
174
|
+
|
|
175
|
+
**Framework Philosophy**: FastMCP is NOT trying to do all things or provide all shortcuts. Features are rejected when they don't align with the framework's vision, even if perfectly implemented. The burden of proof is on the PR to demonstrate value.
|
|
176
|
+
|
|
177
|
+
**Code Quality**: We verify code follows existing patterns. Consistency reduces cognitive load. When every module works similarly, developers understand new code quickly.
|
|
178
|
+
|
|
179
|
+
**Test Coverage**: Not every line needs testing, but every behavior does. Tests document intent and protect against regressions.
|
|
180
|
+
|
|
181
|
+
**Breaking Changes**: May be acceptable in minor versions but must be clearly documented. See the [versioning policy](/development/releases#versioning-policy).
|
|
182
|
+
|
|
183
|
+
## Special Modules
|
|
184
|
+
|
|
185
|
+
**`contrib`**: Community-maintained patterns and utilities. Original authors maintain their contributions. Not representative of the core framework.
|
|
186
|
+
|
|
187
|
+
**`experimental`**: Maintainer-developed features that may preview future functionality. Can break or be deleted at any time without notice. Pin your FastMCP version when using these features.
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Releases"
|
|
3
|
+
description: "FastMCP versioning and release process"
|
|
4
|
+
icon: "truck-fast"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
FastMCP releases frequently to deliver features quickly in the rapidly evolving MCP ecosystem. We use semantic versioning pragmatically - the Model Context Protocol is young, patterns are still emerging, and waiting for perfect stability would mean missing opportunities to empower developers with better tools.
|
|
8
|
+
|
|
9
|
+
## Versioning Policy
|
|
10
|
+
|
|
11
|
+
### Semantic Versioning
|
|
12
|
+
|
|
13
|
+
**Major (x.0.0)**: Complete API redesigns
|
|
14
|
+
|
|
15
|
+
Major versions represent fundamental shifts. FastMCP 2.x is entirely different from 1.x in both implementation and design philosophy.
|
|
16
|
+
|
|
17
|
+
**Minor (2.x.0)**: New features and evolution
|
|
18
|
+
|
|
19
|
+
<Warning>
|
|
20
|
+
Unlike traditional semantic versioning, minor versions **may** include [breaking changes](#breaking-changes) when necessary for the ecosystem's evolution. This flexibility is essential in a young ecosystem where perfect backwards compatibility would prevent important improvements.
|
|
21
|
+
</Warning>
|
|
22
|
+
|
|
23
|
+
FastMCP always targets the most current MCP Protocol version. Breaking changes in the MCP spec or MCP SDK automatically flow through to FastMCP - we prioritize staying current with the latest features and conventions over maintaining compatibility with older protocol versions.
|
|
24
|
+
|
|
25
|
+
**Patch (2.0.x)**: Bug fixes and refinements
|
|
26
|
+
|
|
27
|
+
Patch versions contain only bug fixes without breaking changes. These are safe updates you can apply with confidence.
|
|
28
|
+
|
|
29
|
+
### Breaking Changes
|
|
30
|
+
|
|
31
|
+
We permit breaking changes in minor versions because the MCP ecosystem is rapidly evolving. Refusing to break problematic APIs would accumulate design debt that eventually makes the framework unusable. Each breaking change represents a deliberate decision to keep FastMCP aligned with the ecosystem's evolution.
|
|
32
|
+
|
|
33
|
+
When breaking changes occur:
|
|
34
|
+
- They only happen in minor versions (e.g., 2.3.x to 2.4.0)
|
|
35
|
+
- Release notes explain what changed and how to migrate
|
|
36
|
+
- We provide deprecation warnings at least 1 minor version in advance when possible
|
|
37
|
+
- Changes must substantially benefit users to justify disruption
|
|
38
|
+
|
|
39
|
+
The public API is what's covered by our compatibility guarantees - these are the parts of FastMCP you can rely on to remain stable within a minor version. The public API consists of:
|
|
40
|
+
- `FastMCP` server class, `Client` class, and FastMCP `Context`
|
|
41
|
+
- Core MCP components: `Tool`, `Prompt`, `Resource`, `ResourceTemplate`, and transports
|
|
42
|
+
- Their public methods and documented behaviors
|
|
43
|
+
|
|
44
|
+
Everything else (utilities, private methods, internal modules) may change without notice. This boundary lets us refactor internals and improve implementation details without breaking your code. For production stability, pin to specific versions.
|
|
45
|
+
|
|
46
|
+
<Warning>
|
|
47
|
+
The `fastmcp.server.auth` module was introduced in 2.12.0 and is exempted from this policy temporarily, meaning it is *expected* to have breaking changes even on patch versions. This is because auth is a rapidly evolving part of the MCP spec and it would be dangerous to be beholden to old decisions. Please pin your FastMCP version if using authentication in production.
|
|
48
|
+
|
|
49
|
+
We expect this exemption to last through at least the 2.12.x and 2.13.x release series.
|
|
50
|
+
</Warning>
|
|
51
|
+
|
|
52
|
+
### Production Use
|
|
53
|
+
|
|
54
|
+
Pin to exact versions:
|
|
55
|
+
```
|
|
56
|
+
fastmcp==2.11.0 # Good
|
|
57
|
+
fastmcp>=2.11.0 # Bad - will install breaking changes
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Creating Releases
|
|
61
|
+
|
|
62
|
+
Our release process is intentionally simple:
|
|
63
|
+
|
|
64
|
+
1. Create GitHub release with tag `vMAJOR.MINOR.PATCH` (e.g., `v2.11.0`)
|
|
65
|
+
2. Generate release notes automatically, and curate or add additional editorial information as needed
|
|
66
|
+
3. GitHub releases automatically trigger PyPI deployments
|
|
67
|
+
|
|
68
|
+
This automation lets maintainers focus on code quality rather than release mechanics.
|
|
69
|
+
|
|
70
|
+
### Release Cadence
|
|
71
|
+
|
|
72
|
+
We follow a feature-driven release cadence rather than a fixed schedule. Minor versions ship approximately every 3-4 weeks when significant functionality is ready.
|
|
73
|
+
|
|
74
|
+
Patch releases ship promptly for:
|
|
75
|
+
- Critical bug fixes
|
|
76
|
+
- Security updates (immediate release)
|
|
77
|
+
- Regression fixes
|
|
78
|
+
|
|
79
|
+
This approach means you get improvements as soon as they're ready rather than waiting for arbitrary release dates.
|