fastmcp 2.12.3__tar.gz → 2.12.5__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.3 → fastmcp-2.12.5}/.github/pull_request_template.md +2 -2
- {fastmcp-2.12.3 → fastmcp-2.12.5}/.github/workflows/run-tests.yml +3 -3
- {fastmcp-2.12.3 → fastmcp-2.12.5}/.pre-commit-config.yaml +7 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/AGENTS.md +20 -20
- {fastmcp-2.12.3 → fastmcp-2.12.5}/PKG-INFO +121 -48
- {fastmcp-2.12.3 → fastmcp-2.12.5}/README.md +119 -46
- fastmcp-2.12.5/docs/assets/brand/f-watercolor-waves-dark.png +0 -0
- fastmcp-2.12.5/docs/assets/brand/f-watercolor-waves.png +0 -0
- fastmcp-2.12.5/docs/assets/brand/thumbnail-background.png +0 -0
- fastmcp-2.12.5/docs/assets/brand/wordmark-padded.png +0 -0
- fastmcp-2.12.5/docs/assets/brand/wordmark-watercolor-rainbow-dark.png +0 -0
- fastmcp-2.12.5/docs/assets/brand/wordmark-watercolor-rainbow.png +0 -0
- fastmcp-2.12.5/docs/assets/brand/wordmark-watercolor-waves-dark.png +0 -0
- fastmcp-2.12.5/docs/assets/brand/wordmark-watercolor-waves.png +0 -0
- fastmcp-2.12.5/docs/assets/brand/wordmark-white-padded.png +0 -0
- fastmcp-2.12.5/docs/assets/brand/wordmark-white.png +0 -0
- fastmcp-2.12.5/docs/assets/brand/wordmark.png +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/changelog.mdx +1 -1
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/css/style.css +1 -1
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/development/tests.mdx +1 -1
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/docs.json +22 -16
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/getting-started/quickstart.mdx +3 -4
- fastmcp-2.12.5/docs/getting-started/welcome.mdx +110 -0
- fastmcp-2.12.5/docs/integrations/auth0.mdx +231 -0
- fastmcp-2.12.5/docs/integrations/aws-cognito.mdx +322 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/integrations/cursor.mdx +1 -2
- fastmcp-2.12.5/docs/integrations/descope.mdx +154 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/integrations/gemini-cli.mdx +2 -1
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/integrations/mcp-json-configuration.mdx +1 -2
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-client-client.mdx +5 -3
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/servers/auth/authentication.mdx +4 -4
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/servers/auth/oauth-proxy.mdx +66 -34
- fastmcp-2.12.5/docs/servers/auth/oidc-proxy.mdx +204 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/servers/auth/remote-oauth.mdx +4 -4
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/updates.mdx +3 -3
- fastmcp-2.12.5/examples/auth/aws_oauth/README.md +47 -0
- fastmcp-2.12.5/examples/auth/aws_oauth/client.py +42 -0
- fastmcp-2.12.5/examples/auth/aws_oauth/requirements.txt +2 -0
- fastmcp-2.12.5/examples/auth/aws_oauth/server.py +59 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/pyproject.toml +6 -2
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/cli/install/gemini_cli.py +0 -1
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/cli/run.py +2 -2
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/client/auth/oauth.py +49 -36
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/client/client.py +12 -2
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/contrib/mcp_mixin/README.md +2 -2
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/experimental/utilities/openapi/schemas.py +31 -5
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/server/auth/auth.py +3 -3
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/server/auth/oauth_proxy.py +42 -12
- fastmcp-2.12.5/src/fastmcp/server/auth/oidc_proxy.py +348 -0
- fastmcp-2.12.5/src/fastmcp/server/auth/providers/auth0.py +174 -0
- fastmcp-2.12.5/src/fastmcp/server/auth/providers/aws.py +237 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/server/auth/providers/azure.py +6 -2
- fastmcp-2.12.5/src/fastmcp/server/auth/providers/descope.py +172 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/server/auth/providers/github.py +6 -2
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/server/auth/providers/google.py +6 -2
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/server/auth/providers/workos.py +6 -2
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/server/context.py +7 -6
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/server/http.py +1 -1
- fastmcp-2.12.5/src/fastmcp/server/middleware/logging.py +245 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/server/middleware/middleware.py +3 -2
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/server/openapi.py +5 -1
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/server/server.py +36 -31
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/settings.py +27 -5
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/tools/tool.py +4 -2
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/utilities/json_schema.py +18 -1
- fastmcp-2.12.5/src/fastmcp/utilities/logging.py +120 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +2 -1
- fastmcp-2.12.5/src/fastmcp/utilities/storage.py +204 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/utilities/tests.py +8 -6
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/cli/test_run_config.py +41 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/client/auth/test_oauth_client.py +1 -1
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/client/auth/test_oauth_token_expiry.py +19 -8
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/client/test_client.py +2 -2
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/client/test_openapi_experimental.py +3 -3
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/client/test_openapi_legacy.py +3 -3
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/client/test_sse.py +3 -3
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/client/test_streamable_http.py +2 -2
- fastmcp-2.12.5/tests/conftest.py +59 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/contrib/test_bulk_tool_caller.py +1 -1
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/experimental/openapi_parser/server/openapi/test_openapi_features.py +14 -0
- fastmcp-2.12.5/tests/experimental/openapi_parser/utilities/openapi/test_direct_array_schemas.py +323 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/experimental/openapi_parser/utilities/openapi/test_schemas.py +101 -0
- fastmcp-2.12.5/tests/server/auth/providers/test_auth0.py +277 -0
- fastmcp-2.12.5/tests/server/auth/providers/test_aws.py +245 -0
- fastmcp-2.12.5/tests/server/auth/providers/test_descope.py +170 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/auth/providers/test_workos.py +1 -1
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/auth/test_jwt_provider.py +1 -1
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/auth/test_oauth_proxy.py +17 -6
- fastmcp-2.12.5/tests/server/auth/test_oauth_proxy_storage.py +213 -0
- fastmcp-2.12.5/tests/server/auth/test_oidc_proxy.py +645 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/auth/test_remote_auth_provider.py +23 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/http/test_http_dependencies.py +2 -2
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/middleware/test_error_handling.py +73 -52
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/middleware/test_logging.py +299 -215
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/middleware/test_timing.py +23 -22
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/test_context.py +1 -1
- fastmcp-2.12.5/tests/server/test_log_level.py +88 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/test_server.py +57 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/test_server_interactions.py +14 -9
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/test_mcp_config.py +2 -2
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/tools/test_tool.py +33 -43
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/tools/test_tool_transform.py +12 -28
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/utilities/test_json_schema.py +72 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/utilities/test_logging.py +4 -4
- fastmcp-2.12.5/tests/utilities/test_storage.py +143 -0
- fastmcp-2.12.5/uv.lock +2431 -0
- fastmcp-2.12.3/docs/assets/brand/card-background.png +0 -0
- fastmcp-2.12.3/docs/assets/brand/logo-wordmark-dark.svg +0 -4
- fastmcp-2.12.3/docs/assets/brand/logo-wordmark.svg +0 -4
- fastmcp-2.12.3/docs/getting-started/welcome.mdx +0 -78
- fastmcp-2.12.3/examples/smart_home/uv.lock +0 -657
- fastmcp-2.12.3/src/fastmcp/server/middleware/logging.py +0 -214
- fastmcp-2.12.3/src/fastmcp/utilities/logging.py +0 -58
- fastmcp-2.12.3/tests/conftest.py +0 -24
- fastmcp-2.12.3/uv.lock +0 -2207
- {fastmcp-2.12.3 → fastmcp-2.12.5}/.ccignore +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/.cursor/rules/core-mcp-objects.mdc +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/.github/ISSUE_TEMPLATE/bug.yml +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/.github/ISSUE_TEMPLATE/enhancement.yml +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/.github/copilot-instructions.md +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/.github/dependabot.yml +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/.github/release.yml +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/.github/workflows/auto-close-duplicates.yml +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/.github/workflows/marvin-dedupe-issues.yml +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/.github/workflows/marvin-label-triage.yml +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/.github/workflows/marvin.yml +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/.github/workflows/publish.yml +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/.github/workflows/run-static.yml +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/.github/workflows/update-config-schema.yml +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/.github/workflows/update-sdk-docs.yml +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/.gitignore +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/CLAUDE.md +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/CODE_OF_CONDUCT.md +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/LICENSE +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/README_OPENAPI.md +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/Windows_Notes.md +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/.ccignore +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/.cursor/rules/mintlify.mdc +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/assets/brand/blue-logo.png +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/assets/brand/favicon.svg +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/assets/images/fastmcp_cloud/connect.png +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/assets/images/fastmcp_cloud/create_project.png +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/assets/images/fastmcp_cloud/deployment.png +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/assets/images/fastmcp_cloud/quickstart.png +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/assets/images/tutorial-rest-api-result.png +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/assets/schemas/mcp_server_config/latest.json +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/assets/schemas/mcp_server_config/v1.json +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/assets/updates/release-2-7.png +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/clients/auth/bearer.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/clients/auth/oauth.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/clients/client.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/clients/elicitation.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/clients/logging.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/clients/messages.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/clients/progress.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/clients/prompts.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/clients/resources.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/clients/roots.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/clients/sampling.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/clients/tools.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/clients/transports.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/community/README.md +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/community/showcase.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/css/banner.css +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/css/python-sdk.css +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/css/version-badge.css +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/deployment/fastmcp-cloud.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/deployment/running-server.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/deployment/self-hosted.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/deployment/server-configuration.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/development/contributing.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/development/releases.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/getting-started/installation.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/integrations/anthropic.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/integrations/asgi.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/integrations/authkit.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/integrations/azure.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/integrations/chatgpt.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/integrations/claude-code.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/integrations/claude-desktop.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/integrations/cursor-install-mcp.png +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/integrations/eunomia-authorization.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/integrations/fastapi.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/integrations/gemini.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/integrations/github.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/integrations/google.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/integrations/images/authkit/enable_dcr.png +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/integrations/images/permit/abac_condition_example.png +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/integrations/images/permit/abac_policy_example.png +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/integrations/images/permit/policy_mapping.png +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/integrations/images/permit/role_assignement.png +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/integrations/openai.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/integrations/openapi.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/integrations/permit.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/integrations/workos.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/patterns/cli.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/patterns/contrib.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/patterns/decorating-methods.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/patterns/tool-transformation.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/public/schemas/fastmcp.json/latest.json +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/public/schemas/fastmcp.json/v1.json +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-cli-__init__.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-cli-claude.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-cli-cli.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-cli-install-__init__.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-cli-install-claude_code.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-cli-install-claude_desktop.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-cli-install-cursor.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-cli-install-gemini_cli.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-cli-install-mcp_json.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-cli-install-shared.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-cli-run.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-client-__init__.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-client-auth-__init__.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-client-auth-bearer.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-client-auth-oauth.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-client-elicitation.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-client-logging.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-client-messages.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-client-oauth_callback.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-client-progress.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-client-roots.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-client-sampling.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-client-transports.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-exceptions.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-mcp_config.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-prompts-__init__.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-prompts-prompt.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-prompts-prompt_manager.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-resources-__init__.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-resources-resource.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-resources-resource_manager.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-resources-template.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-resources-types.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-server-__init__.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-server-auth-__init__.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-server-auth-auth.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-server-auth-oauth_proxy.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-server-auth-providers-__init__.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-server-auth-providers-azure.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-server-auth-providers-bearer.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-server-auth-providers-github.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-server-auth-providers-google.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-server-auth-providers-in_memory.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-server-auth-providers-jwt.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-server-auth-providers-workos.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-server-auth-redirect_validation.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-server-context.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-server-dependencies.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-server-elicitation.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-server-http.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-server-low_level.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-server-middleware-__init__.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-server-middleware-error_handling.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-server-middleware-logging.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-server-middleware-middleware.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-server-middleware-rate_limiting.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-server-middleware-timing.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-server-openapi.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-server-proxy.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-server-server.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-settings.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-tools-__init__.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-tools-tool.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-tools-tool_manager.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-tools-tool_transform.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-utilities-__init__.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-utilities-auth.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-utilities-cli.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-utilities-components.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-utilities-exceptions.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-utilities-http.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-utilities-inspect.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-utilities-json_schema.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-utilities-json_schema_type.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-utilities-logging.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-utilities-mcp_config.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-utilities-mcp_server_config-__init__.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-__init__.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-environments-__init__.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-environments-base.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-environments-uv.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-mcp_server_config.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-sources-__init__.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-sources-base.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-sources-filesystem.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-utilities-openapi.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-utilities-tests.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/python-sdk/fastmcp-utilities-types.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/servers/auth/full-oauth-server.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/servers/auth/token-verification.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/servers/composition.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/servers/context.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/servers/elicitation.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/servers/logging.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/servers/middleware.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/servers/progress.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/servers/prompts.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/servers/proxy.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/servers/resources.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/servers/sampling.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/servers/server.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/servers/tools.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/snippets/local-focus.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/snippets/version-badge.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/snippets/youtube-embed.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/tutorials/create-mcp-server.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/tutorials/mcp.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/docs/tutorials/rest-api.mdx +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/atproto_mcp/README.md +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/atproto_mcp/demo.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/atproto_mcp/fastmcp.json +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/atproto_mcp/pyproject.toml +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/atproto_mcp/src/atproto_mcp/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/atproto_mcp/src/atproto_mcp/__main__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/atproto_mcp/src/atproto_mcp/_atproto/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/atproto_mcp/src/atproto_mcp/_atproto/_client.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/atproto_mcp/src/atproto_mcp/_atproto/_posts.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/atproto_mcp/src/atproto_mcp/_atproto/_profile.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/atproto_mcp/src/atproto_mcp/_atproto/_read.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/atproto_mcp/src/atproto_mcp/_atproto/_social.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/atproto_mcp/src/atproto_mcp/py.typed +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/atproto_mcp/src/atproto_mcp/server.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/atproto_mcp/src/atproto_mcp/settings.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/atproto_mcp/src/atproto_mcp/types.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/auth/azure_oauth/README.md +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/auth/azure_oauth/client.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/auth/azure_oauth/server.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/auth/github_oauth/README.md +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/auth/github_oauth/client.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/auth/github_oauth/server.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/auth/google_oauth/README.md +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/auth/google_oauth/client.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/auth/google_oauth/server.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/auth/workos_oauth/README.md +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/auth/workos_oauth/client.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/auth/workos_oauth/server.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/complex_inputs.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/config_server.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/desktop.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/echo.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/fastmcp_config/env_interpolation_example.json +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/fastmcp_config/fastmcp.json +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/fastmcp_config/full_example.fastmcp.json +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/fastmcp_config/server.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/fastmcp_config/simple.fastmcp.json +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/fastmcp_config_demo/README.md +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/fastmcp_config_demo/fastmcp.json +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/fastmcp_config_demo/server.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/get_file.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/in_memory_proxy_example.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/memory.fastmcp.json +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/memory.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/mount_example.fastmcp.json +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/mount_example.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/sampling.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/sampling_fallback.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/screenshot.fastmcp.json +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/screenshot.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/serializer.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/simple_echo.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/smart_home/README.md +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/smart_home/hub.fastmcp.json +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/smart_home/lights.fastmcp.json +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/smart_home/pyproject.toml +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/smart_home/src/smart_home/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/smart_home/src/smart_home/__main__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/smart_home/src/smart_home/hub.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/smart_home/src/smart_home/lights/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/smart_home/src/smart_home/lights/hue_utils.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/smart_home/src/smart_home/lights/server.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/smart_home/src/smart_home/py.typed +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/smart_home/src/smart_home/settings.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/tags_example.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/examples/text_me.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/justfile +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/scripts/auto_close_duplicates.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/cli/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/cli/claude.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/cli/cli.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/cli/install/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/cli/install/claude_code.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/cli/install/claude_desktop.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/cli/install/cursor.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/cli/install/mcp_json.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/cli/install/shared.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/client/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/client/auth/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/client/auth/bearer.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/client/elicitation.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/client/logging.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/client/messages.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/client/oauth_callback.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/client/progress.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/client/roots.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/client/sampling.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/client/transports.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/contrib/README.md +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/contrib/component_manager/README.md +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/contrib/component_manager/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/contrib/component_manager/component_manager.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/contrib/component_manager/component_service.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/contrib/component_manager/example.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/contrib/mcp_mixin/example.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/exceptions.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/experimental/sampling/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/experimental/sampling/handlers/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/experimental/sampling/handlers/base.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/experimental/sampling/handlers/openai.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/experimental/server/openapi/README.md +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/experimental/server/openapi/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/experimental/server/openapi/components.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/experimental/server/openapi/routing.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/experimental/server/openapi/server.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/experimental/utilities/openapi/README.md +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/experimental/utilities/openapi/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/experimental/utilities/openapi/director.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/experimental/utilities/openapi/formatters.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/experimental/utilities/openapi/json_schema_converter.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/experimental/utilities/openapi/models.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/experimental/utilities/openapi/parser.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/mcp_config.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/prompts/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/prompts/prompt.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/prompts/prompt_manager.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/py.typed +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/resources/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/resources/resource.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/resources/resource_manager.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/resources/template.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/resources/types.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/server/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/server/auth/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/server/auth/providers/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/server/auth/providers/bearer.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/server/auth/providers/in_memory.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/server/auth/providers/jwt.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/server/auth/redirect_validation.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/server/dependencies.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/server/elicitation.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/server/low_level.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/server/middleware/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/server/middleware/error_handling.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/server/middleware/rate_limiting.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/server/middleware/timing.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/server/proxy.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/server/sampling/handler.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/tools/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/tools/tool_manager.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/tools/tool_transform.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/utilities/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/utilities/auth.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/utilities/cli.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/utilities/components.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/utilities/exceptions.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/utilities/http.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/utilities/inspect.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/utilities/json_schema_type.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/utilities/mcp_config.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/utilities/openapi.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/src/fastmcp/utilities/types.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/cli/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/cli/test_cli.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/cli/test_config.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/cli/test_cursor.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/cli/test_install.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/cli/test_mcp_server_config_integration.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/cli/test_mcp_server_config_schema.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/cli/test_project_prepare.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/cli/test_run.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/cli/test_server_args.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/cli/test_shared.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/cli/test_with_argv.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/client/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/client/auth/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/client/test_elicitation.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/client/test_logs.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/client/test_notifications.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/client/test_progress.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/client/test_roots.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/client/test_sampling.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/client/test_stdio.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/client/transports/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/client/transports/test_uv_transport.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/contrib/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/contrib/test_component_manager.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/contrib/test_mcp_mixin.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/deprecated/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/deprecated/test_bearer_auth_provider.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/deprecated/test_dependencies.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/deprecated/test_deprecated.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/deprecated/test_mount_import_arg_order.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/deprecated/test_mount_separators.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/deprecated/test_output_schema_false.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/deprecated/test_proxy_client.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/deprecated/test_resource_prefixes.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/deprecated/test_route_type_ignore.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/deprecated/test_settings.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/experimental/README.md +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/experimental/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/experimental/openapi_parser/README.md +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/experimental/openapi_parser/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/experimental/openapi_parser/conftest.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/experimental/openapi_parser/server/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/experimental/openapi_parser/server/openapi/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/experimental/openapi_parser/server/openapi/test_comprehensive.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/experimental/openapi_parser/server/openapi/test_deepobject_style.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/experimental/openapi_parser/server/openapi/test_end_to_end_compatibility.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/experimental/openapi_parser/server/openapi/test_openapi_performance.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/experimental/openapi_parser/server/openapi/test_parameter_collisions.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/experimental/openapi_parser/server/openapi/test_performance_comparison.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/experimental/openapi_parser/server/openapi/test_server.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/experimental/openapi_parser/utilities/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/experimental/openapi_parser/utilities/openapi/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/experimental/openapi_parser/utilities/openapi/conftest.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/experimental/openapi_parser/utilities/openapi/test_allof_requestbody.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/experimental/openapi_parser/utilities/openapi/test_director.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/experimental/openapi_parser/utilities/openapi/test_legacy_compatibility.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/experimental/openapi_parser/utilities/openapi/test_models.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/experimental/openapi_parser/utilities/openapi/test_nullable_fields.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/experimental/openapi_parser/utilities/openapi/test_parser.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/experimental/openapi_parser/utilities/openapi/test_transitive_references.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/experimental/sampling/test_openai_handler.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/integration_tests/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/integration_tests/auth/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/integration_tests/auth/test_github_provider_integration.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/integration_tests/conftest.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/integration_tests/test_github_mcp_remote.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/prompts/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/prompts/test_prompt.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/prompts/test_prompt_manager.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/resources/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/resources/test_file_resources.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/resources/test_function_resources.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/resources/test_resource_manager.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/resources/test_resource_template.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/resources/test_resource_template_meta.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/resources/test_resources.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/auth/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/auth/providers/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/auth/providers/test_azure.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/auth/providers/test_github.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/auth/providers/test_google.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/auth/test_auth_provider.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/auth/test_oauth_proxy_redirect_validation.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/auth/test_redirect_validation.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/auth/test_static_token_verifier.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/http/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/http/test_bearer_auth_backend.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/http/test_custom_routes.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/http/test_http_auth_middleware.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/http/test_http_middleware.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/middleware/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/middleware/test_middleware.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/middleware/test_rate_limiting.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/openapi/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/openapi/conftest.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/openapi/test_advanced_behavior.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/openapi/test_basic_functionality.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/openapi/test_configuration.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/openapi/test_deepobject_style.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/openapi/test_description_propagation.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/openapi/test_explode_integration.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/openapi/test_openapi_compatibility.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/openapi/test_openapi_path_parameters.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/openapi/test_optional_parameters.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/openapi/test_parameter_collisions.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/openapi/test_route_map_fn.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/proxy/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/proxy/test_proxy_client.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/proxy/test_proxy_server.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/proxy/test_stateful_proxy_client.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/test_app_state.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/test_auth_integration.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/test_experimental_openapi_feature_flag.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/test_file_server.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/test_import_server.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/test_logging.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/test_mount.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/test_resource_prefix_formats.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/test_run_server.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/test_streamable_http_no_redirect.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/test_tool_annotations.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/test_tool_exclude_args.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/server/test_tool_transformation.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/test_examples.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/tools/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/tools/test_tool_future_annotations.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/tools/test_tool_manager.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/utilities/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/utilities/openapi/__init__.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/utilities/openapi/conftest.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/utilities/openapi/test_nullable_fields.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/utilities/openapi/test_openapi.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/utilities/openapi/test_openapi_advanced.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/utilities/openapi/test_openapi_fastapi.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/utilities/openapi/test_openapi_output_schemas.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/utilities/test_cli.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/utilities/test_components.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/utilities/test_inspect.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/utilities/test_json_schema_type.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/utilities/test_tests.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/utilities/test_typeadapter.py +0 -0
- {fastmcp-2.12.3 → fastmcp-2.12.5}/tests/utilities/test_types.py +0 -0
|
@@ -14,7 +14,7 @@ NOTE:
|
|
|
14
14
|
If you do not follow these steps, your Pull Request will be closed without review.
|
|
15
15
|
-->
|
|
16
16
|
|
|
17
|
-
- [ ] My change
|
|
17
|
+
- [ ] My change closes #(issue number)
|
|
18
18
|
- [ ] I have followed the repository's development workflow
|
|
19
19
|
- [ ] I have tested my changes manually and by adding relevant tests
|
|
20
20
|
- [ ] I have performed all required documentation updates
|
|
@@ -25,4 +25,4 @@ If you do not follow these steps, your Pull Request will be closed without revie
|
|
|
25
25
|
- [ ] I have self-reviewed my changes
|
|
26
26
|
- [ ] My Pull Request is ready for review
|
|
27
27
|
|
|
28
|
-
---
|
|
28
|
+
---
|
|
@@ -48,10 +48,10 @@ jobs:
|
|
|
48
48
|
run: uv sync --frozen
|
|
49
49
|
|
|
50
50
|
- name: Run tests (excluding integration and client_process)
|
|
51
|
-
run: uv run pytest -v tests -m "not integration and not client_process"
|
|
51
|
+
run: uv run pytest --inline-snapshot=disable -v tests -m "not integration and not client_process" --numprocesses auto --maxprocesses 4 --dist worksteal
|
|
52
52
|
|
|
53
53
|
- name: Run client process tests separately
|
|
54
|
-
run: uv run pytest -v tests -m "client_process" -x
|
|
54
|
+
run: uv run pytest --inline-snapshot=disable -v tests -m "client_process" -x
|
|
55
55
|
|
|
56
56
|
run_integration_tests:
|
|
57
57
|
name: "Run integration tests"
|
|
@@ -74,7 +74,7 @@ jobs:
|
|
|
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
|
+
run: uv run pytest -v tests -m "integration" --timeout=15 --numprocesses auto --maxprocesses 2 --dist worksteal
|
|
78
78
|
env:
|
|
79
79
|
FASTMCP_GITHUB_TOKEN: ${{ secrets.FASTMCP_GITHUB_TOKEN }}
|
|
80
80
|
FASTMCP_TEST_AUTH_GITHUB_CLIENT_ID: ${{ secrets.FASTMCP_TEST_AUTH_GITHUB_CLIENT_ID }}
|
|
@@ -39,3 +39,10 @@ repos:
|
|
|
39
39
|
- id: no-commit-to-branch
|
|
40
40
|
name: prevent commits to main
|
|
41
41
|
args: [--branch, main]
|
|
42
|
+
|
|
43
|
+
- repo: https://github.com/codespell-project/codespell
|
|
44
|
+
rev: v2.4.1
|
|
45
|
+
hooks:
|
|
46
|
+
- id: codespell # See pyproject.toml for args
|
|
47
|
+
additional_dependencies:
|
|
48
|
+
- tomli
|
|
@@ -20,24 +20,24 @@ uv run pytest # Run full test suite
|
|
|
20
20
|
|
|
21
21
|
## Repository Structure
|
|
22
22
|
|
|
23
|
-
| Path
|
|
24
|
-
|
|
|
25
|
-
| `src/fastmcp/`
|
|
26
|
-
| `├─server/`
|
|
27
|
-
| `│ ├─auth/`
|
|
28
|
-
| `│ └─middleware/` | Error handling, logging, rate limiting
|
|
29
|
-
| `├─client/`
|
|
30
|
-
| `│ └─auth/`
|
|
31
|
-
| `├─tools/`
|
|
32
|
-
| `├─resources/`
|
|
33
|
-
| `├─prompts/`
|
|
34
|
-
| `├─cli/`
|
|
35
|
-
| `├─contrib/`
|
|
36
|
-
| `├─experimental/`
|
|
37
|
-
| `└─utilities/`
|
|
38
|
-
| `tests/`
|
|
39
|
-
| `docs/`
|
|
40
|
-
| `examples/`
|
|
23
|
+
| Path | Purpose |
|
|
24
|
+
| ------------------ | --------------------------------------------------- |
|
|
25
|
+
| `src/fastmcp/` | Library source code (Python ≥ 3.10) |
|
|
26
|
+
| `├─server/` | Server implementation, `FastMCP`, auth, networking |
|
|
27
|
+
| `│ ├─auth/` | Authentication providers (Bearer, JWT, WorkOS) |
|
|
28
|
+
| `│ └─middleware/` | Error handling, logging, rate limiting |
|
|
29
|
+
| `├─client/` | High-level client SDK + transports |
|
|
30
|
+
| `│ └─auth/` | Client authentication (Bearer, OAuth) |
|
|
31
|
+
| `├─tools/` | Tool implementations + `ToolManager` |
|
|
32
|
+
| `├─resources/` | Resources, templates + `ResourceManager` |
|
|
33
|
+
| `├─prompts/` | Prompt templates + `PromptManager` |
|
|
34
|
+
| `├─cli/` | FastMCP CLI commands (`run`, `dev`, `install`) |
|
|
35
|
+
| `├─contrib/` | Community contributions (bulk caller, mixins) |
|
|
36
|
+
| `├─experimental/` | Experimental features (new OpenAPI parser) |
|
|
37
|
+
| `└─utilities/` | Shared utilities (logging, JSON schema, HTTP) |
|
|
38
|
+
| `tests/` | Comprehensive pytest suite with markers |
|
|
39
|
+
| `docs/` | Mintlify documentation (published to gofastmcp.com) |
|
|
40
|
+
| `examples/` | Runnable demo servers (echo, smart_home, atproto) |
|
|
41
41
|
|
|
42
42
|
## Core MCP Objects
|
|
43
43
|
|
|
@@ -64,13 +64,13 @@ When modifying MCP functionality, changes typically need to be applied across al
|
|
|
64
64
|
- Every test: atomic, self-contained, single functionality
|
|
65
65
|
- Use parameterization for multiple examples of same functionality
|
|
66
66
|
- Use separate tests for different functionality pieces
|
|
67
|
-
- Put imports at the top of the file, not in the test body
|
|
67
|
+
- **ALWAYS** Put imports at the top of the file, not in the test body
|
|
68
68
|
- **NEVER** add `@pytest.mark.asyncio` to tests - `asyncio_mode = "auto"` is set globally
|
|
69
69
|
- **ALWAYS** run pytest after significant changes
|
|
70
70
|
|
|
71
71
|
### Inline Snapshots
|
|
72
72
|
|
|
73
|
-
FastMCP uses `inline-snapshot` for testing complex data structures. On first run with empty `snapshot()`, pytest will auto-populate the expected value
|
|
73
|
+
FastMCP uses `inline-snapshot` for testing complex data structures. On first run with empty `snapshot()`, pytest will auto-populate the expected value when running `pytest --inline-snapshot=create`. To update snapshots after intentional changes, run `pytest --inline-snapshot=fix`. This is particularly useful for testing JSON schemas and API responses.
|
|
74
74
|
|
|
75
75
|
### Always Use In-Memory Transport
|
|
76
76
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fastmcp
|
|
3
|
-
Version: 2.12.
|
|
3
|
+
Version: 2.12.5
|
|
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
|
|
@@ -21,7 +21,7 @@ Requires-Dist: authlib>=1.5.2
|
|
|
21
21
|
Requires-Dist: cyclopts>=3.0.0
|
|
22
22
|
Requires-Dist: exceptiongroup>=1.2.2
|
|
23
23
|
Requires-Dist: httpx>=0.28.1
|
|
24
|
-
Requires-Dist: mcp<
|
|
24
|
+
Requires-Dist: mcp<1.17.0,>=1.12.4
|
|
25
25
|
Requires-Dist: openapi-core>=0.19.5
|
|
26
26
|
Requires-Dist: openapi-pydantic>=0.5.1
|
|
27
27
|
Requires-Dist: pydantic[email]>=2.11.7
|
|
@@ -37,6 +37,13 @@ Description-Content-Type: text/markdown
|
|
|
37
37
|
<div align="center">
|
|
38
38
|
|
|
39
39
|
<!-- omit in toc -->
|
|
40
|
+
|
|
41
|
+
<picture>
|
|
42
|
+
<source width="550" media="(prefers-color-scheme: dark)" srcset="docs/assets/brand/wordmark-watercolor-waves-dark.png">
|
|
43
|
+
<source width="550" media="(prefers-color-scheme: light)" srcset="docs/assets/brand/wordmark-watercolor-waves.png">
|
|
44
|
+
<img width="550" alt="FastMCP Logo" src="docs/assets/brand/wordmark-watercolor-waves.png">
|
|
45
|
+
</picture>
|
|
46
|
+
|
|
40
47
|
# FastMCP v2 🚀
|
|
41
48
|
|
|
42
49
|
<strong>The fast, Pythonic way to build MCP servers and clients.</strong>
|
|
@@ -53,19 +60,19 @@ Description-Content-Type: text/markdown
|
|
|
53
60
|
|
|
54
61
|
> [!Note]
|
|
55
62
|
>
|
|
56
|
-
> ####
|
|
57
|
-
>
|
|
58
|
-
> FastMCP is the standard framework for working with the Model Context Protocol. FastMCP 1.0 was incorporated into the [official MCP Python SDK](https://github.com/modelcontextprotocol/python-sdk) in 2024.
|
|
63
|
+
> #### FastMCP 2.0: The Standard Framework
|
|
59
64
|
>
|
|
60
|
-
>
|
|
65
|
+
> FastMCP pioneered Python MCP development, and FastMCP 1.0 was incorporated into the [official MCP SDK](https://github.com/modelcontextprotocol/python-sdk) in 2024.
|
|
61
66
|
>
|
|
62
|
-
> FastMCP 2.0
|
|
67
|
+
> **This is FastMCP 2.0** — the actively maintained, production-ready framework that extends far beyond basic protocol implementation. While the SDK provides core functionality, FastMCP 2.0 delivers everything needed for production: advanced MCP patterns (server composition, proxying, OpenAPI/FastAPI generation, tool transformation), enterprise auth (Google, GitHub, WorkOS, Azure, Auth0, and more), deployment tools, testing utilities, and comprehensive client libraries.
|
|
63
68
|
>
|
|
64
|
-
>
|
|
69
|
+
> **For production MCP applications, install FastMCP:** `pip install fastmcp`
|
|
65
70
|
|
|
66
71
|
---
|
|
67
72
|
|
|
68
|
-
|
|
73
|
+
**FastMCP is the standard framework for building MCP applications**, providing the fastest path from idea to production.
|
|
74
|
+
|
|
75
|
+
The [Model Context Protocol (MCP)](https://modelcontextprotocol.io) is a standardized way to provide context and tools to LLMs. FastMCP makes building production-ready MCP servers simple, with enterprise auth, deployment tools, and a complete ecosystem built in.
|
|
69
76
|
|
|
70
77
|
```python
|
|
71
78
|
# server.py
|
|
@@ -104,28 +111,33 @@ There are two ways to access the LLM-friendly documentation:
|
|
|
104
111
|
<!-- omit in toc -->
|
|
105
112
|
## Table of Contents
|
|
106
113
|
|
|
107
|
-
- [
|
|
108
|
-
- [
|
|
109
|
-
- [
|
|
110
|
-
- [
|
|
111
|
-
- [
|
|
112
|
-
- [
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
- [
|
|
118
|
-
|
|
119
|
-
- [
|
|
120
|
-
|
|
121
|
-
- [
|
|
122
|
-
- [
|
|
123
|
-
- [
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
- [
|
|
128
|
-
- [
|
|
114
|
+
- [FastMCP v2 🚀](#fastmcp-v2-)
|
|
115
|
+
- [📚 Documentation](#-documentation)
|
|
116
|
+
- [What is MCP?](#what-is-mcp)
|
|
117
|
+
- [Why FastMCP?](#why-fastmcp)
|
|
118
|
+
- [Installation](#installation)
|
|
119
|
+
- [Core Concepts](#core-concepts)
|
|
120
|
+
- [The `FastMCP` Server](#the-fastmcp-server)
|
|
121
|
+
- [Tools](#tools)
|
|
122
|
+
- [Resources \& Templates](#resources--templates)
|
|
123
|
+
- [Prompts](#prompts)
|
|
124
|
+
- [Context](#context)
|
|
125
|
+
- [MCP Clients](#mcp-clients)
|
|
126
|
+
- [Authentication](#authentication)
|
|
127
|
+
- [Enterprise Authentication, Zero Configuration](#enterprise-authentication-zero-configuration)
|
|
128
|
+
- [Deployment](#deployment)
|
|
129
|
+
- [From Development to Production](#from-development-to-production)
|
|
130
|
+
- [Advanced Features](#advanced-features)
|
|
131
|
+
- [Proxy Servers](#proxy-servers)
|
|
132
|
+
- [Composing MCP Servers](#composing-mcp-servers)
|
|
133
|
+
- [OpenAPI \& FastAPI Generation](#openapi--fastapi-generation)
|
|
134
|
+
- [Running Your Server](#running-your-server)
|
|
135
|
+
- [Contributing](#contributing)
|
|
136
|
+
- [Prerequisites](#prerequisites)
|
|
137
|
+
- [Setup](#setup)
|
|
138
|
+
- [Unit Tests](#unit-tests)
|
|
139
|
+
- [Static Checks](#static-checks)
|
|
140
|
+
- [Pull Requests](#pull-requests)
|
|
129
141
|
|
|
130
142
|
---
|
|
131
143
|
|
|
@@ -142,11 +154,7 @@ FastMCP provides a high-level, Pythonic interface for building, managing, and in
|
|
|
142
154
|
|
|
143
155
|
## Why FastMCP?
|
|
144
156
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
FastMCP 2.0 has evolved into a comprehensive platform that goes far beyond basic protocol implementation. While 1.0 provided server-building capabilities (and is now part of the official MCP SDK), 2.0 offers a complete ecosystem including client libraries, authentication systems, deployment tools, integrations with major AI platforms, testing frameworks, and production-ready infrastructure patterns.
|
|
148
|
-
|
|
149
|
-
FastMCP aims to be:
|
|
157
|
+
FastMCP handles all the complex protocol details so you can focus on building. In most cases, decorating a Python function is all you need — FastMCP handles the rest.
|
|
150
158
|
|
|
151
159
|
🚀 **Fast:** High-level interface means less code and faster development
|
|
152
160
|
|
|
@@ -154,7 +162,9 @@ FastMCP aims to be:
|
|
|
154
162
|
|
|
155
163
|
🐍 **Pythonic:** Feels natural to Python developers
|
|
156
164
|
|
|
157
|
-
🔍 **Complete:**
|
|
165
|
+
🔍 **Complete:** Everything for production — enterprise auth (Google, GitHub, Azure, Auth0, WorkOS), deployment tools, testing frameworks, client libraries, and more
|
|
166
|
+
|
|
167
|
+
FastMCP provides the shortest path from idea to production. Deploy locally, to the cloud with [FastMCP Cloud](https://fastmcp.cloud), or to your own infrastructure.
|
|
158
168
|
|
|
159
169
|
## Installation
|
|
160
170
|
|
|
@@ -324,9 +334,82 @@ async def main():
|
|
|
324
334
|
|
|
325
335
|
Learn more in the [**Client Documentation**](https://gofastmcp.com/clients/client) and [**Transports Documentation**](https://gofastmcp.com/clients/transports).
|
|
326
336
|
|
|
337
|
+
## Authentication
|
|
338
|
+
|
|
339
|
+
### Enterprise Authentication, Zero Configuration
|
|
340
|
+
|
|
341
|
+
FastMCP provides comprehensive authentication support that sets it apart from basic MCP implementations. Secure your servers and authenticate your clients with the same enterprise-grade providers used by major corporations.
|
|
342
|
+
|
|
343
|
+
**Built-in OAuth Providers:**
|
|
344
|
+
|
|
345
|
+
- **Google**
|
|
346
|
+
- **GitHub**
|
|
347
|
+
- **Microsoft Azure**
|
|
348
|
+
- **Auth0**
|
|
349
|
+
- **WorkOS**
|
|
350
|
+
- **Descope**
|
|
351
|
+
- **JWT/Custom**
|
|
352
|
+
- **API Keys**
|
|
353
|
+
|
|
354
|
+
Protecting a server takes just two lines:
|
|
355
|
+
|
|
356
|
+
```python
|
|
357
|
+
from fastmcp.server.auth import GoogleProvider
|
|
358
|
+
|
|
359
|
+
auth = GoogleProvider(client_id="...", client_secret="...", base_url="https://myserver.com")
|
|
360
|
+
mcp = FastMCP("Protected Server", auth=auth)
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
Connecting to protected servers is even simpler:
|
|
364
|
+
|
|
365
|
+
```python
|
|
366
|
+
async with Client("https://protected-server.com/mcp", auth="oauth") as client:
|
|
367
|
+
# Automatic browser-based OAuth flow
|
|
368
|
+
result = await client.call_tool("protected_tool")
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
**Why FastMCP Auth Matters:**
|
|
372
|
+
|
|
373
|
+
- **Production-Ready:** Persistent storage, token refresh, comprehensive error handling
|
|
374
|
+
- **Zero-Config OAuth:** Just pass `auth="oauth"` for automatic setup
|
|
375
|
+
- **Enterprise Integration:** WorkOS SSO, Azure Active Directory, Auth0 tenants
|
|
376
|
+
- **Developer Experience:** Automatic browser launch, local callback server, environment variable support
|
|
377
|
+
- **Advanced Architecture:** Full OIDC support, Dynamic Client Registration (DCR), and unique OAuth proxy pattern that enables DCR with any provider
|
|
378
|
+
|
|
379
|
+
*Authentication this comprehensive is unique to FastMCP 2.0.*
|
|
380
|
+
|
|
381
|
+
Learn more in the **Authentication Documentation** for [servers](https://gofastmcp.com/servers/auth) and [clients](https://gofastmcp.com/clients/auth).
|
|
382
|
+
|
|
383
|
+
## Deployment
|
|
384
|
+
|
|
385
|
+
### From Development to Production
|
|
386
|
+
|
|
387
|
+
FastMCP supports every deployment scenario from local development to global scale:
|
|
388
|
+
|
|
389
|
+
**Development:** Run locally with a single command
|
|
390
|
+
|
|
391
|
+
```bash
|
|
392
|
+
fastmcp run server.py
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
**Production:** Deploy to [**FastMCP Cloud**](https://fastmcp.cloud) — Remote MCP that just works
|
|
396
|
+
|
|
397
|
+
- Instant HTTPS endpoints
|
|
398
|
+
- Built-in authentication
|
|
399
|
+
- Zero configuration
|
|
400
|
+
- Free for personal servers
|
|
401
|
+
|
|
402
|
+
**Self-Hosted:** Use HTTP or SSE transports for your own infrastructure
|
|
403
|
+
|
|
404
|
+
```python
|
|
405
|
+
mcp.run(transport="http", host="0.0.0.0", port=8000)
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
Learn more in the [**Deployment Documentation**](https://gofastmcp.com/deployment).
|
|
409
|
+
|
|
327
410
|
## Advanced Features
|
|
328
411
|
|
|
329
|
-
FastMCP introduces powerful ways to structure and
|
|
412
|
+
FastMCP introduces powerful ways to structure and compose your MCP applications.
|
|
330
413
|
|
|
331
414
|
### Proxy Servers
|
|
332
415
|
|
|
@@ -346,16 +429,6 @@ Automatically generate FastMCP servers from existing OpenAPI specifications (`Fa
|
|
|
346
429
|
|
|
347
430
|
Learn more: [**OpenAPI Integration**](https://gofastmcp.com/integrations/openapi) | [**FastAPI Integration**](https://gofastmcp.com/integrations/fastapi).
|
|
348
431
|
|
|
349
|
-
### Authentication & Security
|
|
350
|
-
|
|
351
|
-
FastMCP provides built-in authentication support to secure both your MCP servers and clients in production environments. Protect your server endpoints from unauthorized access and authenticate your clients against secured MCP servers using industry-standard protocols.
|
|
352
|
-
|
|
353
|
-
- **Server Protection**: Secure your FastMCP server endpoints with configurable authentication providers
|
|
354
|
-
- **Client Authentication**: Connect to authenticated MCP servers with automatic credential management
|
|
355
|
-
- **Production Ready**: Support for common authentication patterns used in enterprise environments
|
|
356
|
-
|
|
357
|
-
Learn more in the **Authentication Documentation** for [servers](https://gofastmcp.com/servers/auth) and [clients](https://gofastmcp.com/clients/auth).
|
|
358
|
-
|
|
359
432
|
## Running Your Server
|
|
360
433
|
|
|
361
434
|
The main way to run a FastMCP server is by calling the `run()` method on your server instance:
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
<div align="center">
|
|
2
2
|
|
|
3
3
|
<!-- omit in toc -->
|
|
4
|
+
|
|
5
|
+
<picture>
|
|
6
|
+
<source width="550" media="(prefers-color-scheme: dark)" srcset="docs/assets/brand/wordmark-watercolor-waves-dark.png">
|
|
7
|
+
<source width="550" media="(prefers-color-scheme: light)" srcset="docs/assets/brand/wordmark-watercolor-waves.png">
|
|
8
|
+
<img width="550" alt="FastMCP Logo" src="docs/assets/brand/wordmark-watercolor-waves.png">
|
|
9
|
+
</picture>
|
|
10
|
+
|
|
4
11
|
# FastMCP v2 🚀
|
|
5
12
|
|
|
6
13
|
<strong>The fast, Pythonic way to build MCP servers and clients.</strong>
|
|
@@ -17,19 +24,19 @@
|
|
|
17
24
|
|
|
18
25
|
> [!Note]
|
|
19
26
|
>
|
|
20
|
-
> ####
|
|
21
|
-
>
|
|
22
|
-
> FastMCP is the standard framework for working with the Model Context Protocol. FastMCP 1.0 was incorporated into the [official MCP Python SDK](https://github.com/modelcontextprotocol/python-sdk) in 2024.
|
|
27
|
+
> #### FastMCP 2.0: The Standard Framework
|
|
23
28
|
>
|
|
24
|
-
>
|
|
29
|
+
> FastMCP pioneered Python MCP development, and FastMCP 1.0 was incorporated into the [official MCP SDK](https://github.com/modelcontextprotocol/python-sdk) in 2024.
|
|
25
30
|
>
|
|
26
|
-
> FastMCP 2.0
|
|
31
|
+
> **This is FastMCP 2.0** — the actively maintained, production-ready framework that extends far beyond basic protocol implementation. While the SDK provides core functionality, FastMCP 2.0 delivers everything needed for production: advanced MCP patterns (server composition, proxying, OpenAPI/FastAPI generation, tool transformation), enterprise auth (Google, GitHub, WorkOS, Azure, Auth0, and more), deployment tools, testing utilities, and comprehensive client libraries.
|
|
27
32
|
>
|
|
28
|
-
>
|
|
33
|
+
> **For production MCP applications, install FastMCP:** `pip install fastmcp`
|
|
29
34
|
|
|
30
35
|
---
|
|
31
36
|
|
|
32
|
-
|
|
37
|
+
**FastMCP is the standard framework for building MCP applications**, providing the fastest path from idea to production.
|
|
38
|
+
|
|
39
|
+
The [Model Context Protocol (MCP)](https://modelcontextprotocol.io) is a standardized way to provide context and tools to LLMs. FastMCP makes building production-ready MCP servers simple, with enterprise auth, deployment tools, and a complete ecosystem built in.
|
|
33
40
|
|
|
34
41
|
```python
|
|
35
42
|
# server.py
|
|
@@ -68,28 +75,33 @@ There are two ways to access the LLM-friendly documentation:
|
|
|
68
75
|
<!-- omit in toc -->
|
|
69
76
|
## Table of Contents
|
|
70
77
|
|
|
71
|
-
- [
|
|
72
|
-
- [
|
|
73
|
-
- [
|
|
74
|
-
- [
|
|
75
|
-
- [
|
|
76
|
-
- [
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
- [
|
|
82
|
-
|
|
83
|
-
- [
|
|
84
|
-
|
|
85
|
-
- [
|
|
86
|
-
- [
|
|
87
|
-
- [
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
- [
|
|
92
|
-
- [
|
|
78
|
+
- [FastMCP v2 🚀](#fastmcp-v2-)
|
|
79
|
+
- [📚 Documentation](#-documentation)
|
|
80
|
+
- [What is MCP?](#what-is-mcp)
|
|
81
|
+
- [Why FastMCP?](#why-fastmcp)
|
|
82
|
+
- [Installation](#installation)
|
|
83
|
+
- [Core Concepts](#core-concepts)
|
|
84
|
+
- [The `FastMCP` Server](#the-fastmcp-server)
|
|
85
|
+
- [Tools](#tools)
|
|
86
|
+
- [Resources \& Templates](#resources--templates)
|
|
87
|
+
- [Prompts](#prompts)
|
|
88
|
+
- [Context](#context)
|
|
89
|
+
- [MCP Clients](#mcp-clients)
|
|
90
|
+
- [Authentication](#authentication)
|
|
91
|
+
- [Enterprise Authentication, Zero Configuration](#enterprise-authentication-zero-configuration)
|
|
92
|
+
- [Deployment](#deployment)
|
|
93
|
+
- [From Development to Production](#from-development-to-production)
|
|
94
|
+
- [Advanced Features](#advanced-features)
|
|
95
|
+
- [Proxy Servers](#proxy-servers)
|
|
96
|
+
- [Composing MCP Servers](#composing-mcp-servers)
|
|
97
|
+
- [OpenAPI \& FastAPI Generation](#openapi--fastapi-generation)
|
|
98
|
+
- [Running Your Server](#running-your-server)
|
|
99
|
+
- [Contributing](#contributing)
|
|
100
|
+
- [Prerequisites](#prerequisites)
|
|
101
|
+
- [Setup](#setup)
|
|
102
|
+
- [Unit Tests](#unit-tests)
|
|
103
|
+
- [Static Checks](#static-checks)
|
|
104
|
+
- [Pull Requests](#pull-requests)
|
|
93
105
|
|
|
94
106
|
---
|
|
95
107
|
|
|
@@ -106,11 +118,7 @@ FastMCP provides a high-level, Pythonic interface for building, managing, and in
|
|
|
106
118
|
|
|
107
119
|
## Why FastMCP?
|
|
108
120
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
FastMCP 2.0 has evolved into a comprehensive platform that goes far beyond basic protocol implementation. While 1.0 provided server-building capabilities (and is now part of the official MCP SDK), 2.0 offers a complete ecosystem including client libraries, authentication systems, deployment tools, integrations with major AI platforms, testing frameworks, and production-ready infrastructure patterns.
|
|
112
|
-
|
|
113
|
-
FastMCP aims to be:
|
|
121
|
+
FastMCP handles all the complex protocol details so you can focus on building. In most cases, decorating a Python function is all you need — FastMCP handles the rest.
|
|
114
122
|
|
|
115
123
|
🚀 **Fast:** High-level interface means less code and faster development
|
|
116
124
|
|
|
@@ -118,7 +126,9 @@ FastMCP aims to be:
|
|
|
118
126
|
|
|
119
127
|
🐍 **Pythonic:** Feels natural to Python developers
|
|
120
128
|
|
|
121
|
-
🔍 **Complete:**
|
|
129
|
+
🔍 **Complete:** Everything for production — enterprise auth (Google, GitHub, Azure, Auth0, WorkOS), deployment tools, testing frameworks, client libraries, and more
|
|
130
|
+
|
|
131
|
+
FastMCP provides the shortest path from idea to production. Deploy locally, to the cloud with [FastMCP Cloud](https://fastmcp.cloud), or to your own infrastructure.
|
|
122
132
|
|
|
123
133
|
## Installation
|
|
124
134
|
|
|
@@ -288,9 +298,82 @@ async def main():
|
|
|
288
298
|
|
|
289
299
|
Learn more in the [**Client Documentation**](https://gofastmcp.com/clients/client) and [**Transports Documentation**](https://gofastmcp.com/clients/transports).
|
|
290
300
|
|
|
301
|
+
## Authentication
|
|
302
|
+
|
|
303
|
+
### Enterprise Authentication, Zero Configuration
|
|
304
|
+
|
|
305
|
+
FastMCP provides comprehensive authentication support that sets it apart from basic MCP implementations. Secure your servers and authenticate your clients with the same enterprise-grade providers used by major corporations.
|
|
306
|
+
|
|
307
|
+
**Built-in OAuth Providers:**
|
|
308
|
+
|
|
309
|
+
- **Google**
|
|
310
|
+
- **GitHub**
|
|
311
|
+
- **Microsoft Azure**
|
|
312
|
+
- **Auth0**
|
|
313
|
+
- **WorkOS**
|
|
314
|
+
- **Descope**
|
|
315
|
+
- **JWT/Custom**
|
|
316
|
+
- **API Keys**
|
|
317
|
+
|
|
318
|
+
Protecting a server takes just two lines:
|
|
319
|
+
|
|
320
|
+
```python
|
|
321
|
+
from fastmcp.server.auth import GoogleProvider
|
|
322
|
+
|
|
323
|
+
auth = GoogleProvider(client_id="...", client_secret="...", base_url="https://myserver.com")
|
|
324
|
+
mcp = FastMCP("Protected Server", auth=auth)
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
Connecting to protected servers is even simpler:
|
|
328
|
+
|
|
329
|
+
```python
|
|
330
|
+
async with Client("https://protected-server.com/mcp", auth="oauth") as client:
|
|
331
|
+
# Automatic browser-based OAuth flow
|
|
332
|
+
result = await client.call_tool("protected_tool")
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
**Why FastMCP Auth Matters:**
|
|
336
|
+
|
|
337
|
+
- **Production-Ready:** Persistent storage, token refresh, comprehensive error handling
|
|
338
|
+
- **Zero-Config OAuth:** Just pass `auth="oauth"` for automatic setup
|
|
339
|
+
- **Enterprise Integration:** WorkOS SSO, Azure Active Directory, Auth0 tenants
|
|
340
|
+
- **Developer Experience:** Automatic browser launch, local callback server, environment variable support
|
|
341
|
+
- **Advanced Architecture:** Full OIDC support, Dynamic Client Registration (DCR), and unique OAuth proxy pattern that enables DCR with any provider
|
|
342
|
+
|
|
343
|
+
*Authentication this comprehensive is unique to FastMCP 2.0.*
|
|
344
|
+
|
|
345
|
+
Learn more in the **Authentication Documentation** for [servers](https://gofastmcp.com/servers/auth) and [clients](https://gofastmcp.com/clients/auth).
|
|
346
|
+
|
|
347
|
+
## Deployment
|
|
348
|
+
|
|
349
|
+
### From Development to Production
|
|
350
|
+
|
|
351
|
+
FastMCP supports every deployment scenario from local development to global scale:
|
|
352
|
+
|
|
353
|
+
**Development:** Run locally with a single command
|
|
354
|
+
|
|
355
|
+
```bash
|
|
356
|
+
fastmcp run server.py
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
**Production:** Deploy to [**FastMCP Cloud**](https://fastmcp.cloud) — Remote MCP that just works
|
|
360
|
+
|
|
361
|
+
- Instant HTTPS endpoints
|
|
362
|
+
- Built-in authentication
|
|
363
|
+
- Zero configuration
|
|
364
|
+
- Free for personal servers
|
|
365
|
+
|
|
366
|
+
**Self-Hosted:** Use HTTP or SSE transports for your own infrastructure
|
|
367
|
+
|
|
368
|
+
```python
|
|
369
|
+
mcp.run(transport="http", host="0.0.0.0", port=8000)
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
Learn more in the [**Deployment Documentation**](https://gofastmcp.com/deployment).
|
|
373
|
+
|
|
291
374
|
## Advanced Features
|
|
292
375
|
|
|
293
|
-
FastMCP introduces powerful ways to structure and
|
|
376
|
+
FastMCP introduces powerful ways to structure and compose your MCP applications.
|
|
294
377
|
|
|
295
378
|
### Proxy Servers
|
|
296
379
|
|
|
@@ -310,16 +393,6 @@ Automatically generate FastMCP servers from existing OpenAPI specifications (`Fa
|
|
|
310
393
|
|
|
311
394
|
Learn more: [**OpenAPI Integration**](https://gofastmcp.com/integrations/openapi) | [**FastAPI Integration**](https://gofastmcp.com/integrations/fastapi).
|
|
312
395
|
|
|
313
|
-
### Authentication & Security
|
|
314
|
-
|
|
315
|
-
FastMCP provides built-in authentication support to secure both your MCP servers and clients in production environments. Protect your server endpoints from unauthorized access and authenticate your clients against secured MCP servers using industry-standard protocols.
|
|
316
|
-
|
|
317
|
-
- **Server Protection**: Secure your FastMCP server endpoints with configurable authentication providers
|
|
318
|
-
- **Client Authentication**: Connect to authenticated MCP servers with automatic credential management
|
|
319
|
-
- **Production Ready**: Support for common authentication patterns used in enterprise environments
|
|
320
|
-
|
|
321
|
-
Learn more in the **Authentication Documentation** for [servers](https://gofastmcp.com/servers/auth) and [clients](https://gofastmcp.com/clients/auth).
|
|
322
|
-
|
|
323
396
|
## Running Your Server
|
|
324
397
|
|
|
325
398
|
The main way to run a FastMCP server is by calling the `run()` method on your server instance:
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1757,7 +1757,7 @@ This release is highlighted by the ability to handle complex JSON objects as MCP
|
|
|
1757
1757
|
### New Features 🎉
|
|
1758
1758
|
|
|
1759
1759
|
* Set up multiple os tests by [@jlowin](https://github.com/jlowin) in [#44](https://github.com/jlowin/fastmcp/pull/44)
|
|
1760
|
-
* Changes to
|
|
1760
|
+
* Changes to accommodate windows users. by [@justjoehere](https://github.com/justjoehere) in [#42](https://github.com/jlowin/fastmcp/pull/42)
|
|
1761
1761
|
* Handle complex inputs by [@jurasofish](https://github.com/jurasofish) in [#31](https://github.com/jlowin/fastmcp/pull/31)
|
|
1762
1762
|
|
|
1763
1763
|
### Docs 📚
|
|
@@ -211,7 +211,7 @@ Try not to have too many assertions in a single test unless you truly need to ch
|
|
|
211
211
|
|
|
212
212
|
#### Inline Snapshots
|
|
213
213
|
|
|
214
|
-
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.
|
|
214
|
+
FastMCP uses `inline-snapshot` for testing complex data structures. On first run of `pytest --inline-snapshot=create` with an 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.
|
|
215
215
|
|
|
216
216
|
```python
|
|
217
217
|
from inline_snapshot import snapshot
|