fastmcp 2.13.0rc2__tar.gz → 2.13.0.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (660) hide show
  1. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/.github/workflows/martian-issue-triage.yml +5 -4
  2. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/.github/workflows/marvin-dedupe-issues.yml +0 -1
  3. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/.github/workflows/run-tests.yml +25 -0
  4. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/AGENTS.md +2 -2
  5. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/PKG-INFO +5 -5
  6. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/README.md +1 -2
  7. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/changelog.mdx +34 -0
  8. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/clients/sampling.mdx +3 -48
  9. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/deployment/http.mdx +24 -16
  10. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/development/tests.mdx +4 -0
  11. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/development/upgrade-guide.mdx +13 -8
  12. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/docs.json +28 -17
  13. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/integrations/auth0.mdx +42 -0
  14. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/integrations/aws-cognito.mdx +42 -0
  15. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/integrations/azure.mdx +53 -3
  16. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/integrations/github.mdx +40 -0
  17. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/integrations/google.mdx +41 -0
  18. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/integrations/workos.mdx +42 -0
  19. fastmcp-2.13.0.1/docs/patterns/testing.mdx +85 -0
  20. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-cli-cli.mdx +1 -1
  21. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-client-oauth_callback.mdx +5 -5
  22. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-client-transports.mdx +7 -7
  23. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-resources-types.mdx +9 -9
  24. fastmcp-2.13.0.1/docs/python-sdk/fastmcp-server-auth-jwt_issuer.mdx +104 -0
  25. fastmcp-2.13.0.1/docs/python-sdk/fastmcp-server-auth-middleware.mdx +26 -0
  26. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-oauth_proxy.mdx +30 -25
  27. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-oidc_proxy.mdx +2 -2
  28. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-providers-auth0.mdx +1 -1
  29. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-providers-aws.mdx +4 -4
  30. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-providers-azure.mdx +16 -6
  31. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-providers-github.mdx +3 -3
  32. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-providers-google.mdx +3 -3
  33. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-providers-workos.mdx +6 -6
  34. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-context.mdx +68 -28
  35. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-http.mdx +8 -8
  36. fastmcp-2.13.0.1/docs/python-sdk/fastmcp-server-middleware-tool_injection.mdx +91 -0
  37. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-server.mdx +54 -54
  38. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-settings.mdx +11 -11
  39. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-tools-tool_manager.mdx +10 -10
  40. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-cli.mdx +3 -3
  41. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-ui.mdx +9 -8
  42. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/servers/auth/oauth-proxy.mdx +63 -40
  43. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/servers/auth/oidc-proxy.mdx +47 -4
  44. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/servers/context.mdx +30 -5
  45. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/servers/middleware.mdx +35 -0
  46. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/servers/sampling.mdx +85 -6
  47. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/servers/storage-backends.mdx +23 -11
  48. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/updates.mdx +18 -0
  49. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/auth/azure_oauth/server.py +8 -3
  50. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/get_file.py +6 -0
  51. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/memory.py +10 -8
  52. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/smart_home/src/smart_home/hub.py +3 -8
  53. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/smart_home/src/smart_home/lights/hue_utils.py +1 -1
  54. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/smart_home/src/smart_home/settings.py +2 -2
  55. fastmcp-2.13.0.1/logo.py +25 -0
  56. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/pyproject.toml +27 -3
  57. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/cli/cli.py +3 -2
  58. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/cli/install/claude_code.py +3 -3
  59. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/client/auth/oauth.py +7 -6
  60. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/client/client.py +10 -10
  61. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/client/oauth_callback.py +6 -2
  62. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/client/sampling.py +1 -1
  63. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/client/transports.py +35 -34
  64. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/contrib/component_manager/__init__.py +1 -1
  65. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/contrib/component_manager/component_manager.py +2 -2
  66. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/experimental/sampling/handlers/openai.py +2 -2
  67. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/experimental/server/openapi/__init__.py +5 -8
  68. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/experimental/server/openapi/components.py +11 -7
  69. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/experimental/utilities/openapi/__init__.py +10 -15
  70. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/experimental/utilities/openapi/director.py +1 -1
  71. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/experimental/utilities/openapi/json_schema_converter.py +2 -2
  72. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/experimental/utilities/openapi/parser.py +3 -5
  73. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/mcp_config.py +2 -3
  74. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/prompts/prompt.py +9 -13
  75. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/resources/resource.py +1 -3
  76. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/resources/resource_manager.py +1 -1
  77. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/resources/types.py +30 -24
  78. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/server/__init__.py +1 -1
  79. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/auth.py +2 -2
  80. fastmcp-2.13.0.1/src/fastmcp/server/auth/handlers/authorize.py +324 -0
  81. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/jwt_issuer.py +39 -92
  82. fastmcp-2.13.0.1/src/fastmcp/server/auth/middleware.py +96 -0
  83. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/oauth_proxy.py +236 -217
  84. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/oidc_proxy.py +18 -3
  85. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/providers/auth0.py +28 -15
  86. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/providers/aws.py +16 -1
  87. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/providers/azure.py +101 -40
  88. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/providers/bearer.py +1 -1
  89. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/providers/github.py +16 -1
  90. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/providers/google.py +16 -1
  91. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/providers/in_memory.py +2 -2
  92. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/providers/introspection.py +2 -2
  93. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/providers/jwt.py +17 -18
  94. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/providers/supabase.py +1 -1
  95. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/providers/workos.py +18 -3
  96. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/server/context.py +41 -12
  97. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/server/dependencies.py +5 -6
  98. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/server/http.py +3 -4
  99. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/server/middleware/caching.py +1 -1
  100. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/server/middleware/error_handling.py +8 -8
  101. fastmcp-2.13.0.1/src/fastmcp/server/middleware/tool_injection.py +116 -0
  102. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/server/openapi.py +10 -6
  103. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/server/proxy.py +5 -4
  104. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/server/server.py +74 -55
  105. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/settings.py +2 -1
  106. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/tools/__init__.py +1 -1
  107. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/tools/tool.py +12 -12
  108. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/tools/tool_manager.py +8 -4
  109. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/tools/tool_transform.py +6 -6
  110. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/utilities/cli.py +50 -21
  111. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/utilities/inspect.py +2 -2
  112. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/utilities/json_schema_type.py +4 -4
  113. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/utilities/logging.py +14 -18
  114. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/utilities/mcp_server_config/v1/environments/base.py +1 -2
  115. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -1
  116. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/utilities/openapi.py +9 -9
  117. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/utilities/tests.py +2 -4
  118. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/utilities/ui.py +126 -6
  119. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/server/openapi/test_openapi_performance.py +1 -0
  120. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/server/openapi/test_performance_comparison.py +0 -6
  121. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/integration_tests/auth/test_github_provider_integration.py +2 -0
  122. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/auth/providers/test_auth0.py +7 -0
  123. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/auth/providers/test_aws.py +6 -0
  124. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/auth/providers/test_azure.py +132 -48
  125. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/auth/providers/test_github.py +7 -0
  126. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/auth/providers/test_google.py +5 -0
  127. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/auth/providers/test_workos.py +7 -0
  128. fastmcp-2.13.0.1/tests/server/auth/test_enhanced_error_responses.py +364 -0
  129. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/auth/test_jwt_issuer.py +36 -103
  130. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/auth/test_oauth_consent_flow.py +5 -0
  131. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/auth/test_oauth_proxy.py +18 -0
  132. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/auth/test_oauth_proxy_redirect_validation.py +5 -0
  133. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/auth/test_oauth_proxy_storage.py +12 -9
  134. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/auth/test_oidc_proxy.py +6 -0
  135. fastmcp-2.13.0.1/tests/server/middleware/test_tool_injection.py +498 -0
  136. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/test_server.py +48 -0
  137. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/utilities/test_inspect.py +4 -4
  138. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/uv.lock +130 -10
  139. fastmcp-2.13.0rc2/docs/python-sdk/fastmcp-server-auth-jwt_issuer.mdx +0 -195
  140. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/.ccignore +0 -0
  141. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/.cursor/rules/core-mcp-objects.mdc +0 -0
  142. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/.cursor/worktrees.json +0 -0
  143. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/.github/ISSUE_TEMPLATE/bug.yml +0 -0
  144. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  145. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/.github/ISSUE_TEMPLATE/enhancement.yml +0 -0
  146. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/.github/copilot-instructions.md +0 -0
  147. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/.github/dependabot.yml +0 -0
  148. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/.github/pull_request_template.md +0 -0
  149. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/.github/release.yml +0 -0
  150. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/.github/workflows/auto-close-duplicates.yml +0 -0
  151. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/.github/workflows/auto-close-needs-mre.yml +0 -0
  152. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/.github/workflows/marvin-label-triage.yml +0 -0
  153. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/.github/workflows/marvin.yml +0 -0
  154. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/.github/workflows/publish.yml +0 -0
  155. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/.github/workflows/run-static.yml +0 -0
  156. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/.github/workflows/update-config-schema.yml +0 -0
  157. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/.github/workflows/update-sdk-docs.yml +0 -0
  158. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/.gitignore +0 -0
  159. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/.pre-commit-config.yaml +0 -0
  160. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/CLAUDE.md +0 -0
  161. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/CODE_OF_CONDUCT.md +0 -0
  162. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/LICENSE +0 -0
  163. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/SECURITY.md +0 -0
  164. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/.ccignore +0 -0
  165. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/.cursor/rules/mintlify.mdc +0 -0
  166. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/assets/brand/blue-logo.png +0 -0
  167. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/assets/brand/f-watercolor-waves-dark.png +0 -0
  168. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/assets/brand/f-watercolor-waves.png +0 -0
  169. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/assets/brand/favicon.svg +0 -0
  170. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/assets/brand/thumbnail-background.png +0 -0
  171. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/assets/brand/wordmark-padded.png +0 -0
  172. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/assets/brand/wordmark-watercolor-rainbow-dark.png +0 -0
  173. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/assets/brand/wordmark-watercolor-rainbow.png +0 -0
  174. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/assets/brand/wordmark-watercolor-waves-dark.png +0 -0
  175. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/assets/brand/wordmark-watercolor-waves.png +0 -0
  176. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/assets/brand/wordmark-white-padded.png +0 -0
  177. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/assets/brand/wordmark-white.png +0 -0
  178. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/assets/brand/wordmark.png +0 -0
  179. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/assets/images/fastmcp_cloud/connect.png +0 -0
  180. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/assets/images/fastmcp_cloud/create_project.png +0 -0
  181. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/assets/images/fastmcp_cloud/deployment.png +0 -0
  182. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/assets/images/fastmcp_cloud/quickstart.png +0 -0
  183. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/assets/images/oauth-proxy-consent-screen.png +0 -0
  184. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/assets/images/tutorial-rest-api-result.png +0 -0
  185. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/assets/schemas/mcp_server_config/latest.json +0 -0
  186. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/assets/schemas/mcp_server_config/v1.json +0 -0
  187. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/assets/updates/release-2-7.png +0 -0
  188. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/clients/auth/bearer.mdx +0 -0
  189. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/clients/auth/oauth.mdx +0 -0
  190. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/clients/client.mdx +0 -0
  191. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/clients/elicitation.mdx +0 -0
  192. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/clients/logging.mdx +0 -0
  193. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/clients/messages.mdx +0 -0
  194. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/clients/progress.mdx +0 -0
  195. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/clients/prompts.mdx +0 -0
  196. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/clients/resources.mdx +0 -0
  197. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/clients/roots.mdx +0 -0
  198. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/clients/tools.mdx +0 -0
  199. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/clients/transports.mdx +0 -0
  200. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/community/README.md +0 -0
  201. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/community/showcase.mdx +0 -0
  202. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/css/banner.css +0 -0
  203. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/css/python-sdk.css +0 -0
  204. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/css/style.css +0 -0
  205. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/css/version-badge.css +0 -0
  206. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/deployment/fastmcp-cloud.mdx +0 -0
  207. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/deployment/running-server.mdx +0 -0
  208. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/deployment/server-configuration.mdx +0 -0
  209. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/development/contributing.mdx +0 -0
  210. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/development/releases.mdx +0 -0
  211. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/getting-started/installation.mdx +0 -0
  212. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/getting-started/quickstart.mdx +0 -0
  213. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/getting-started/welcome.mdx +0 -0
  214. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/integrations/anthropic.mdx +0 -0
  215. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/integrations/authkit.mdx +0 -0
  216. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/integrations/chatgpt.mdx +0 -0
  217. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/integrations/claude-code.mdx +0 -0
  218. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/integrations/claude-desktop.mdx +0 -0
  219. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/integrations/cursor-install-mcp.png +0 -0
  220. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/integrations/cursor.mdx +0 -0
  221. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/integrations/descope.mdx +0 -0
  222. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/integrations/eunomia-authorization.mdx +0 -0
  223. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/integrations/fastapi.mdx +0 -0
  224. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/integrations/gemini-cli.mdx +0 -0
  225. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/integrations/gemini.mdx +0 -0
  226. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/integrations/images/authkit/enable_dcr.png +0 -0
  227. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/integrations/images/permit/abac_condition_example.png +0 -0
  228. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/integrations/images/permit/abac_policy_example.png +0 -0
  229. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/integrations/images/permit/policy_mapping.png +0 -0
  230. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/integrations/images/permit/role_assignement.png +0 -0
  231. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/integrations/mcp-json-configuration.mdx +0 -0
  232. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/integrations/openai.mdx +0 -0
  233. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/integrations/openapi.mdx +0 -0
  234. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/integrations/permit.mdx +0 -0
  235. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/integrations/scalekit.mdx +0 -0
  236. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/patterns/cli.mdx +0 -0
  237. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/patterns/contrib.mdx +0 -0
  238. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/patterns/decorating-methods.mdx +0 -0
  239. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/patterns/tool-transformation.mdx +0 -0
  240. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/public/schemas/fastmcp.json/latest.json +0 -0
  241. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/public/schemas/fastmcp.json/v1.json +0 -0
  242. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-cli-__init__.mdx +0 -0
  243. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-cli-install-__init__.mdx +0 -0
  244. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-cli-install-claude_code.mdx +0 -0
  245. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-cli-install-claude_desktop.mdx +0 -0
  246. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-cli-install-cursor.mdx +0 -0
  247. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-cli-install-gemini_cli.mdx +0 -0
  248. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-cli-install-mcp_json.mdx +0 -0
  249. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-cli-install-shared.mdx +0 -0
  250. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-cli-run.mdx +0 -0
  251. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-client-__init__.mdx +0 -0
  252. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-client-auth-__init__.mdx +0 -0
  253. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-client-auth-bearer.mdx +0 -0
  254. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-client-auth-oauth.mdx +0 -0
  255. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-client-client.mdx +0 -0
  256. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-client-elicitation.mdx +0 -0
  257. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-client-logging.mdx +0 -0
  258. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-client-messages.mdx +0 -0
  259. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-client-progress.mdx +0 -0
  260. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-client-roots.mdx +0 -0
  261. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-client-sampling.mdx +0 -0
  262. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-exceptions.mdx +0 -0
  263. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-mcp_config.mdx +0 -0
  264. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-prompts-__init__.mdx +0 -0
  265. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-prompts-prompt.mdx +0 -0
  266. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-prompts-prompt_manager.mdx +0 -0
  267. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-resources-__init__.mdx +0 -0
  268. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-resources-resource.mdx +0 -0
  269. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-resources-resource_manager.mdx +0 -0
  270. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-resources-template.mdx +0 -0
  271. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-__init__.mdx +0 -0
  272. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-__init__.mdx +0 -0
  273. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-auth.mdx +0 -0
  274. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-providers-__init__.mdx +0 -0
  275. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-providers-bearer.mdx +0 -0
  276. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-providers-descope.mdx +0 -0
  277. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-providers-in_memory.mdx +0 -0
  278. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-providers-introspection.mdx +0 -0
  279. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-providers-jwt.mdx +0 -0
  280. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-providers-scalekit.mdx +0 -0
  281. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-providers-supabase.mdx +0 -0
  282. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-redirect_validation.mdx +0 -0
  283. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-dependencies.mdx +0 -0
  284. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-elicitation.mdx +0 -0
  285. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-low_level.mdx +0 -0
  286. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-middleware-__init__.mdx +0 -0
  287. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-middleware-caching.mdx +0 -0
  288. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-middleware-error_handling.mdx +0 -0
  289. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-middleware-logging.mdx +0 -0
  290. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-middleware-middleware.mdx +0 -0
  291. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-middleware-rate_limiting.mdx +0 -0
  292. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-middleware-timing.mdx +0 -0
  293. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-openapi.mdx +0 -0
  294. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-proxy.mdx +0 -0
  295. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-tools-__init__.mdx +0 -0
  296. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-tools-tool.mdx +0 -0
  297. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-tools-tool_transform.mdx +0 -0
  298. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-__init__.mdx +0 -0
  299. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-auth.mdx +0 -0
  300. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-components.mdx +0 -0
  301. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-exceptions.mdx +0 -0
  302. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-http.mdx +0 -0
  303. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-inspect.mdx +0 -0
  304. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-json_schema.mdx +0 -0
  305. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-json_schema_type.mdx +0 -0
  306. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-logging.mdx +0 -0
  307. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-mcp_config.mdx +0 -0
  308. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-mcp_server_config-__init__.mdx +0 -0
  309. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-__init__.mdx +0 -0
  310. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-environments-__init__.mdx +0 -0
  311. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-environments-base.mdx +0 -0
  312. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-environments-uv.mdx +0 -0
  313. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-mcp_server_config.mdx +0 -0
  314. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-sources-__init__.mdx +0 -0
  315. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-sources-base.mdx +0 -0
  316. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-sources-filesystem.mdx +0 -0
  317. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-openapi.mdx +0 -0
  318. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-tests.mdx +0 -0
  319. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-types.mdx +0 -0
  320. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/servers/auth/authentication.mdx +0 -0
  321. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/servers/auth/full-oauth-server.mdx +0 -0
  322. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/servers/auth/remote-oauth.mdx +0 -0
  323. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/servers/auth/token-verification.mdx +0 -0
  324. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/servers/composition.mdx +0 -0
  325. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/servers/elicitation.mdx +0 -0
  326. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/servers/icons.mdx +0 -0
  327. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/servers/logging.mdx +0 -0
  328. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/servers/progress.mdx +0 -0
  329. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/servers/prompts.mdx +0 -0
  330. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/servers/proxy.mdx +0 -0
  331. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/servers/resources.mdx +0 -0
  332. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/servers/server.mdx +0 -0
  333. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/servers/tools.mdx +0 -0
  334. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/snippets/local-focus.mdx +0 -0
  335. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/snippets/version-badge.mdx +0 -0
  336. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/snippets/youtube-embed.mdx +0 -0
  337. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/tutorials/create-mcp-server.mdx +0 -0
  338. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/tutorials/mcp.mdx +0 -0
  339. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/docs/tutorials/rest-api.mdx +0 -0
  340. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/atproto_mcp/README.md +0 -0
  341. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/atproto_mcp/demo.py +0 -0
  342. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/atproto_mcp/fastmcp.json +0 -0
  343. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/atproto_mcp/pyproject.toml +0 -0
  344. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/atproto_mcp/src/atproto_mcp/__init__.py +0 -0
  345. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/atproto_mcp/src/atproto_mcp/__main__.py +0 -0
  346. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/atproto_mcp/src/atproto_mcp/_atproto/__init__.py +4 -4
  347. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/atproto_mcp/src/atproto_mcp/_atproto/_client.py +0 -0
  348. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/atproto_mcp/src/atproto_mcp/_atproto/_posts.py +0 -0
  349. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/atproto_mcp/src/atproto_mcp/_atproto/_profile.py +0 -0
  350. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/atproto_mcp/src/atproto_mcp/_atproto/_read.py +0 -0
  351. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/atproto_mcp/src/atproto_mcp/_atproto/_social.py +0 -0
  352. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/atproto_mcp/src/atproto_mcp/py.typed +0 -0
  353. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/atproto_mcp/src/atproto_mcp/server.py +0 -0
  354. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/atproto_mcp/src/atproto_mcp/settings.py +0 -0
  355. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/atproto_mcp/src/atproto_mcp/types.py +0 -0
  356. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/auth/authkit_dcr/README.md +0 -0
  357. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/auth/authkit_dcr/client.py +0 -0
  358. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/auth/authkit_dcr/server.py +0 -0
  359. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/auth/aws_oauth/README.md +0 -0
  360. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/auth/aws_oauth/client.py +0 -0
  361. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/auth/aws_oauth/requirements.txt +0 -0
  362. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/auth/aws_oauth/server.py +0 -0
  363. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/auth/azure_oauth/README.md +0 -0
  364. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/auth/azure_oauth/client.py +0 -0
  365. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/auth/github_oauth/README.md +0 -0
  366. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/auth/github_oauth/client.py +0 -0
  367. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/auth/github_oauth/server.py +0 -0
  368. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/auth/google_oauth/README.md +0 -0
  369. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/auth/google_oauth/client.py +0 -0
  370. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/auth/google_oauth/server.py +0 -0
  371. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/auth/scalekit_oauth/README.md +0 -0
  372. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/auth/scalekit_oauth/client.py +0 -0
  373. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/auth/scalekit_oauth/server.py +0 -0
  374. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/auth/workos_oauth/README.md +0 -0
  375. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/auth/workos_oauth/client.py +0 -0
  376. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/auth/workos_oauth/server.py +0 -0
  377. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/complex_inputs.py +0 -0
  378. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/config_server.py +0 -0
  379. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/desktop.py +0 -0
  380. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/echo.py +0 -0
  381. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/fastmcp_config/env_interpolation_example.json +0 -0
  382. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/fastmcp_config/fastmcp.json +0 -0
  383. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/fastmcp_config/full_example.fastmcp.json +0 -0
  384. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/fastmcp_config/server.py +0 -0
  385. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/fastmcp_config/simple.fastmcp.json +0 -0
  386. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/fastmcp_config_demo/README.md +0 -0
  387. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/fastmcp_config_demo/fastmcp.json +0 -0
  388. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/fastmcp_config_demo/server.py +0 -0
  389. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/in_memory_proxy_example.py +0 -0
  390. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/memory.fastmcp.json +0 -0
  391. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/mount_example.fastmcp.json +0 -0
  392. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/mount_example.py +0 -0
  393. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/sampling.py +0 -0
  394. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/sampling_fallback.py +0 -0
  395. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/screenshot.fastmcp.json +0 -0
  396. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/screenshot.py +0 -0
  397. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/serializer.py +0 -0
  398. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/simple_echo.py +0 -0
  399. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/smart_home/README.md +0 -0
  400. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/smart_home/hub.fastmcp.json +0 -0
  401. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/smart_home/lights.fastmcp.json +0 -0
  402. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/smart_home/pyproject.toml +0 -0
  403. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/smart_home/src/smart_home/__init__.py +0 -0
  404. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/smart_home/src/smart_home/__main__.py +0 -0
  405. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/smart_home/src/smart_home/lights/__init__.py +0 -0
  406. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/smart_home/src/smart_home/lights/server.py +0 -0
  407. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/smart_home/src/smart_home/py.typed +0 -0
  408. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/tags_example.py +0 -0
  409. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/examples/text_me.py +0 -0
  410. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/justfile +0 -0
  411. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/scripts/auto_close_duplicates.py +0 -0
  412. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/scripts/auto_close_needs_mre.py +0 -0
  413. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/__init__.py +2 -2
  414. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/cli/__init__.py +0 -0
  415. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/cli/install/__init__.py +0 -0
  416. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/cli/install/claude_desktop.py +0 -0
  417. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/cli/install/cursor.py +0 -0
  418. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/cli/install/gemini_cli.py +0 -0
  419. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/cli/install/mcp_json.py +0 -0
  420. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/cli/install/shared.py +0 -0
  421. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/cli/run.py +0 -0
  422. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/client/__init__.py +9 -9
  423. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/client/auth/__init__.py +0 -0
  424. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/client/auth/bearer.py +0 -0
  425. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/client/elicitation.py +0 -0
  426. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/client/logging.py +0 -0
  427. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/client/messages.py +0 -0
  428. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/client/progress.py +0 -0
  429. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/client/roots.py +0 -0
  430. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/contrib/README.md +0 -0
  431. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
  432. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
  433. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
  434. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
  435. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/contrib/component_manager/README.md +0 -0
  436. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/contrib/component_manager/component_service.py +0 -0
  437. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/contrib/component_manager/example.py +0 -0
  438. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/contrib/mcp_mixin/README.md +0 -0
  439. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/contrib/mcp_mixin/__init__.py +2 -2
  440. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/contrib/mcp_mixin/example.py +0 -0
  441. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
  442. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/exceptions.py +0 -0
  443. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/experimental/sampling/__init__.py +0 -0
  444. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/experimental/sampling/handlers/__init__.py +0 -0
  445. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/experimental/sampling/handlers/base.py +0 -0
  446. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/experimental/server/openapi/README.md +0 -0
  447. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/experimental/server/openapi/routing.py +2 -2
  448. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/experimental/server/openapi/server.py +0 -0
  449. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/experimental/utilities/openapi/README.md +0 -0
  450. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/experimental/utilities/openapi/formatters.py +0 -0
  451. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/experimental/utilities/openapi/models.py +3 -3
  452. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/experimental/utilities/openapi/schemas.py +2 -2
  453. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/prompts/__init__.py +1 -1
  454. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/prompts/prompt_manager.py +0 -0
  455. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/py.typed +0 -0
  456. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/resources/__init__.py +5 -5
  457. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/resources/template.py +0 -0
  458. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/__init__.py +5 -5
  459. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/providers/__init__.py +0 -0
  460. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/providers/descope.py +0 -0
  461. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/providers/scalekit.py +0 -0
  462. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/redirect_validation.py +0 -0
  463. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/server/elicitation.py +1 -1
  464. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/server/low_level.py +0 -0
  465. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/server/middleware/__init__.py +1 -1
  466. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/server/middleware/logging.py +0 -0
  467. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/server/middleware/middleware.py +1 -1
  468. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/server/middleware/rate_limiting.py +0 -0
  469. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/server/middleware/timing.py +0 -0
  470. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/server/sampling/handler.py +0 -0
  471. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/utilities/__init__.py +0 -0
  472. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/utilities/auth.py +0 -0
  473. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/utilities/components.py +0 -0
  474. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/utilities/exceptions.py +0 -0
  475. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/utilities/http.py +0 -0
  476. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/utilities/json_schema.py +0 -0
  477. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/utilities/mcp_config.py +0 -0
  478. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/utilities/mcp_server_config/__init__.py +3 -3
  479. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
  480. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
  481. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
  482. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
  483. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
  484. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
  485. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
  486. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/src/fastmcp/utilities/types.py +0 -0
  487. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/__init__.py +0 -0
  488. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/cli/__init__.py +0 -0
  489. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/cli/test_cli.py +0 -0
  490. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/cli/test_config.py +0 -0
  491. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/cli/test_cursor.py +0 -0
  492. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/cli/test_install.py +0 -0
  493. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/cli/test_mcp_server_config_integration.py +0 -0
  494. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/cli/test_mcp_server_config_schema.py +0 -0
  495. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/cli/test_project_prepare.py +0 -0
  496. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/cli/test_run.py +0 -0
  497. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/cli/test_run_config.py +0 -0
  498. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/cli/test_server_args.py +0 -0
  499. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/cli/test_shared.py +0 -0
  500. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/cli/test_with_argv.py +0 -0
  501. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/client/__init__.py +0 -0
  502. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/client/auth/__init__.py +0 -0
  503. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/client/auth/test_oauth_client.py +0 -0
  504. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/client/test_client.py +0 -0
  505. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/client/test_elicitation.py +0 -0
  506. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/client/test_logs.py +0 -0
  507. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/client/test_notifications.py +0 -0
  508. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/client/test_oauth_callback_xss.py +0 -0
  509. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/client/test_openapi_experimental.py +0 -0
  510. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/client/test_openapi_legacy.py +0 -0
  511. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/client/test_progress.py +0 -0
  512. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/client/test_roots.py +0 -0
  513. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/client/test_sampling.py +0 -0
  514. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/client/test_sse.py +0 -0
  515. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/client/test_stdio.py +0 -0
  516. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/client/test_streamable_http.py +0 -0
  517. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/client/transports/__init__.py +0 -0
  518. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/client/transports/test_uv_transport.py +0 -0
  519. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/conftest.py +0 -0
  520. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/contrib/__init__.py +0 -0
  521. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/contrib/test_bulk_tool_caller.py +0 -0
  522. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/contrib/test_component_manager.py +0 -0
  523. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/contrib/test_mcp_mixin.py +0 -0
  524. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/deprecated/__init__.py +0 -0
  525. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/deprecated/test_bearer_auth_provider.py +0 -0
  526. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/deprecated/test_dependencies.py +0 -0
  527. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/deprecated/test_deprecated.py +0 -0
  528. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/deprecated/test_mount_import_arg_order.py +0 -0
  529. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/deprecated/test_mount_separators.py +0 -0
  530. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/deprecated/test_output_schema_false.py +0 -0
  531. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/deprecated/test_proxy_client.py +0 -0
  532. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/deprecated/test_resource_prefixes.py +0 -0
  533. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/deprecated/test_route_type_ignore.py +0 -0
  534. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/deprecated/test_settings.py +0 -0
  535. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/experimental/README.md +0 -0
  536. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/experimental/__init__.py +0 -0
  537. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/README.md +0 -0
  538. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/__init__.py +0 -0
  539. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/conftest.py +0 -0
  540. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/server/__init__.py +0 -0
  541. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/server/openapi/__init__.py +0 -0
  542. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/server/openapi/test_comprehensive.py +0 -0
  543. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/server/openapi/test_deepobject_style.py +0 -0
  544. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/server/openapi/test_end_to_end_compatibility.py +0 -0
  545. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/server/openapi/test_openapi_features.py +0 -0
  546. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/server/openapi/test_parameter_collisions.py +0 -0
  547. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/server/openapi/test_server.py +0 -0
  548. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/utilities/__init__.py +0 -0
  549. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/utilities/openapi/__init__.py +0 -0
  550. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/utilities/openapi/conftest.py +0 -0
  551. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/utilities/openapi/test_allof_requestbody.py +0 -0
  552. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/utilities/openapi/test_direct_array_schemas.py +0 -0
  553. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/utilities/openapi/test_director.py +0 -0
  554. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/utilities/openapi/test_legacy_compatibility.py +0 -0
  555. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/utilities/openapi/test_models.py +0 -0
  556. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/utilities/openapi/test_nullable_fields.py +0 -0
  557. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/utilities/openapi/test_parser.py +0 -0
  558. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/utilities/openapi/test_schemas.py +0 -0
  559. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/utilities/openapi/test_transitive_references.py +0 -0
  560. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/experimental/sampling/test_openai_handler.py +0 -0
  561. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/integration_tests/__init__.py +0 -0
  562. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/integration_tests/auth/__init__.py +0 -0
  563. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/integration_tests/conftest.py +0 -0
  564. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/integration_tests/test_github_mcp_remote.py +0 -0
  565. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/prompts/__init__.py +0 -0
  566. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/prompts/test_prompt.py +0 -0
  567. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/prompts/test_prompt_manager.py +0 -0
  568. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/resources/__init__.py +0 -0
  569. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/resources/test_file_resources.py +0 -0
  570. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/resources/test_function_resources.py +0 -0
  571. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/resources/test_resource_manager.py +0 -0
  572. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/resources/test_resource_template.py +0 -0
  573. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/resources/test_resource_template_meta.py +0 -0
  574. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/resources/test_resources.py +0 -0
  575. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/__init__.py +0 -0
  576. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/auth/__init__.py +0 -0
  577. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/auth/providers/__init__.py +0 -0
  578. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/auth/providers/test_descope.py +0 -0
  579. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/auth/providers/test_introspection.py +0 -0
  580. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/auth/providers/test_scalekit.py +0 -0
  581. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/auth/providers/test_supabase.py +0 -0
  582. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/auth/test_auth_provider.py +0 -0
  583. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/auth/test_jwt_provider.py +0 -0
  584. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/auth/test_oauth_mounting.py +0 -0
  585. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/auth/test_redirect_validation.py +0 -0
  586. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/auth/test_remote_auth_provider.py +0 -0
  587. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/auth/test_static_token_verifier.py +0 -0
  588. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/http/__init__.py +0 -0
  589. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/http/test_bearer_auth_backend.py +0 -0
  590. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/http/test_custom_routes.py +0 -0
  591. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/http/test_http_auth_middleware.py +0 -0
  592. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/http/test_http_dependencies.py +0 -0
  593. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/http/test_http_middleware.py +0 -0
  594. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/middleware/__init__.py +0 -0
  595. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/middleware/test_caching.py +0 -0
  596. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/middleware/test_error_handling.py +0 -0
  597. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/middleware/test_initialization_middleware.py +0 -0
  598. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/middleware/test_logging.py +0 -0
  599. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/middleware/test_middleware.py +0 -0
  600. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/middleware/test_rate_limiting.py +0 -0
  601. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/middleware/test_timing.py +0 -0
  602. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/openapi/__init__.py +0 -0
  603. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/openapi/conftest.py +0 -0
  604. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/openapi/test_advanced_behavior.py +0 -0
  605. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/openapi/test_basic_functionality.py +0 -0
  606. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/openapi/test_configuration.py +0 -0
  607. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/openapi/test_deepobject_style.py +0 -0
  608. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/openapi/test_description_propagation.py +0 -0
  609. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/openapi/test_explode_integration.py +0 -0
  610. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/openapi/test_openapi_compatibility.py +0 -0
  611. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/openapi/test_openapi_path_parameters.py +0 -0
  612. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/openapi/test_optional_parameters.py +0 -0
  613. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/openapi/test_parameter_collisions.py +0 -0
  614. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/openapi/test_route_map_fn.py +0 -0
  615. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/proxy/__init__.py +0 -0
  616. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/proxy/test_proxy_client.py +0 -0
  617. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/proxy/test_proxy_server.py +0 -0
  618. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/proxy/test_stateful_proxy_client.py +0 -0
  619. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/test_app_state.py +0 -0
  620. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/test_auth_integration.py +0 -0
  621. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/test_context.py +0 -0
  622. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/test_experimental_openapi_feature_flag.py +0 -0
  623. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/test_file_server.py +0 -0
  624. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/test_icons.py +0 -0
  625. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/test_import_server.py +0 -0
  626. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/test_input_validation.py +0 -0
  627. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/test_log_level.py +0 -0
  628. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/test_logging.py +0 -0
  629. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/test_mount.py +0 -0
  630. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/test_resource_prefix_formats.py +0 -0
  631. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/test_run_server.py +0 -0
  632. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/test_server_interactions.py +0 -0
  633. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/test_server_lifespan.py +0 -0
  634. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/test_streamable_http_no_redirect.py +0 -0
  635. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/test_tool_annotations.py +0 -0
  636. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/test_tool_exclude_args.py +0 -0
  637. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/server/test_tool_transformation.py +0 -0
  638. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/test_examples.py +0 -0
  639. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/test_mcp_config.py +0 -0
  640. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/tools/__init__.py +0 -0
  641. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/tools/test_tool.py +0 -0
  642. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/tools/test_tool_future_annotations.py +0 -0
  643. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/tools/test_tool_manager.py +0 -0
  644. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/tools/test_tool_transform.py +0 -0
  645. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/utilities/__init__.py +0 -0
  646. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/utilities/openapi/__init__.py +0 -0
  647. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/utilities/openapi/conftest.py +0 -0
  648. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/utilities/openapi/test_nullable_fields.py +0 -0
  649. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/utilities/openapi/test_openapi.py +0 -0
  650. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/utilities/openapi/test_openapi_advanced.py +0 -0
  651. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/utilities/openapi/test_openapi_fastapi.py +0 -0
  652. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/utilities/openapi/test_openapi_output_schemas.py +0 -0
  653. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/utilities/test_cli.py +0 -0
  654. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/utilities/test_components.py +0 -0
  655. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/utilities/test_json_schema.py +0 -0
  656. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/utilities/test_json_schema_type.py +0 -0
  657. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/utilities/test_logging.py +0 -0
  658. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/utilities/test_tests.py +0 -0
  659. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/utilities/test_typeadapter.py +0 -0
  660. {fastmcp-2.13.0rc2 → fastmcp-2.13.0.1}/tests/utilities/test_types.py +0 -0
@@ -4,15 +4,16 @@ on:
4
4
  issues:
5
5
  types: [opened, labeled]
6
6
 
7
- concurrency:
8
- group: triage-martian-${{ github.event.issue.number }}
9
- cancel-in-progress: true
10
-
11
7
  jobs:
12
8
  martian-issue-triage:
13
9
  if: |
14
10
  (github.event.action == 'opened' && github.actor == 'strawgate') ||
15
11
  (github.event.action == 'labeled' && github.event.label.name == 'triage-martian')
12
+
13
+ concurrency:
14
+ group: triage-martian-${{ github.event.issue.number }}
15
+ cancel-in-progress: true
16
+
16
17
  runs-on: ubuntu-latest
17
18
  timeout-minutes: 10
18
19
  permissions:
@@ -83,7 +83,6 @@ jobs:
83
83
  allowed_non_write_users: "*"
84
84
  claude_args: |
85
85
  --allowedTools Bash(gh issue view:*),Bash(gh search:*),Bash(gh issue list:*),Bash(gh api:*),Bash(gh issue comment:*),Task
86
- --mcp-config /tmp/mcp-config/mcp-servers.json
87
86
  settings: |
88
87
  {
89
88
  "model": "claude-sonnet-4-5-20250929",
@@ -59,6 +59,31 @@ jobs:
59
59
  - name: Run client process tests separately
60
60
  run: uv run pytest --inline-snapshot=disable tests -m "client_process" -x
61
61
 
62
+ run_tests_lowest_direct:
63
+ name: "Run tests with lowest-direct dependencies"
64
+ runs-on: ubuntu-latest
65
+ timeout-minutes: 10
66
+
67
+ steps:
68
+ - uses: actions/checkout@v5
69
+
70
+ - name: Install uv
71
+ uses: astral-sh/setup-uv@v7
72
+ with:
73
+ enable-cache: true
74
+ cache-dependency-glob: "uv.lock"
75
+ python-version: "3.10"
76
+
77
+ - name: Install FastMCP with lowest-direct resolution
78
+ # run with lowest-direct to test against the minimum allowed dependency versions
79
+ run: uv sync --resolution lowest-direct
80
+
81
+ - name: Run tests (excluding integration and client_process)
82
+ run: uv run pytest --inline-snapshot=disable tests -m "not integration and not client_process" --numprocesses auto --maxprocesses 4 --dist worksteal
83
+
84
+ - name: Run client process tests separately
85
+ run: uv run pytest --inline-snapshot=disable tests -m "client_process" -x
86
+
62
87
  run_integration_tests:
63
88
  name: "Run integration tests"
64
89
  runs-on: ubuntu-latest
@@ -24,7 +24,7 @@ uv run pytest # Run full test suite
24
24
  | ------------------ | --------------------------------------------------- |
25
25
  | `src/fastmcp/` | Library source code (Python ≥ 3.10) |
26
26
  | `├─server/` | Server implementation, `FastMCP`, auth, networking |
27
- | `│ ├─auth/` | Authentication providers (Bearer, JWT, WorkOS) |
27
+ | `│ ├─auth/` | Authentication providers (Google, GitHub, Azure, AWS, WorkOS, Auth0, JWT, and more) |
28
28
  | `│ └─middleware/` | Error handling, logging, rate limiting |
29
29
  | `├─client/` | High-level client SDK + transports |
30
30
  | `│ └─auth/` | Client authentication (Bearer, OAuth) |
@@ -262,4 +262,4 @@ uv sync # Installs all deps including dev tools
262
262
  1. **Dependencies**: Always `uv sync` first
263
263
  2. **Pre-commit fails**: Run `uv run pre-commit run --all-files` to see failures
264
264
  3. **Type errors**: Use `uv run ty check` directly, check `pyproject.toml` config
265
- 4. **Test timeouts**: Default 3s - optimize or mark as integration tests
265
+ 4. **Test timeouts**: Default 5s - optimize or mark as integration tests
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fastmcp
3
- Version: 2.13.0rc2
3
+ Version: 2.13.0.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
@@ -14,6 +14,7 @@ Classifier: License :: OSI Approved :: Apache Software License
14
14
  Classifier: Programming Language :: Python :: 3.10
15
15
  Classifier: Programming Language :: Python :: 3.11
16
16
  Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: Programming Language :: Python :: 3.13
17
18
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
18
19
  Classifier: Typing :: Typed
19
20
  Requires-Python: >=3.10
@@ -24,10 +25,10 @@ Requires-Dist: httpx>=0.28.1
24
25
  Requires-Dist: mcp<2.0.0,>=1.17.0
25
26
  Requires-Dist: openapi-core>=0.19.5
26
27
  Requires-Dist: openapi-pydantic>=0.5.1
27
- Requires-Dist: py-key-value-aio[disk,memory]<0.3.0,>=0.2.2
28
+ Requires-Dist: platformdirs>=4.0.0
29
+ Requires-Dist: py-key-value-aio[disk,keyring,memory]<0.3.0,>=0.2.6
28
30
  Requires-Dist: pydantic[email]>=2.11.7
29
31
  Requires-Dist: pyperclip>=1.9.0
30
- Requires-Dist: pytest-asyncio>=1.2.0
31
32
  Requires-Dist: python-dotenv>=1.1.0
32
33
  Requires-Dist: rich>=13.9.4
33
34
  Requires-Dist: websockets>=15.0.1
@@ -248,7 +249,6 @@ Access MCP session capabilities within your tools, resources, or prompts by addi
248
249
 
249
250
  - **Logging:** Log messages to MCP clients with `ctx.info()`, `ctx.error()`, etc.
250
251
  - **LLM Sampling:** Use `ctx.sample()` to request completions from the client's LLM.
251
- - **HTTP Request:** Use `ctx.http_request()` to make HTTP requests to other servers.
252
252
  - **Resource Access:** Use `ctx.read_resource()` to access resources on the server
253
253
  - **Progress Reporting:** Use `ctx.report_progress()` to report progress to the client.
254
254
  - and more...
@@ -358,7 +358,7 @@ FastMCP provides comprehensive authentication support that sets it apart from ba
358
358
  Protecting a server takes just two lines:
359
359
 
360
360
  ```python
361
- from fastmcp.server.auth import GoogleProvider
361
+ from fastmcp.server.auth.providers.google import GoogleProvider
362
362
 
363
363
  auth = GoogleProvider(client_id="...", client_secret="...", base_url="https://myserver.com")
364
364
  mcp = FastMCP("Protected Server", auth=auth)
@@ -211,7 +211,6 @@ Access MCP session capabilities within your tools, resources, or prompts by addi
211
211
 
212
212
  - **Logging:** Log messages to MCP clients with `ctx.info()`, `ctx.error()`, etc.
213
213
  - **LLM Sampling:** Use `ctx.sample()` to request completions from the client's LLM.
214
- - **HTTP Request:** Use `ctx.http_request()` to make HTTP requests to other servers.
215
214
  - **Resource Access:** Use `ctx.read_resource()` to access resources on the server
216
215
  - **Progress Reporting:** Use `ctx.report_progress()` to report progress to the client.
217
216
  - and more...
@@ -321,7 +320,7 @@ FastMCP provides comprehensive authentication support that sets it apart from ba
321
320
  Protecting a server takes just two lines:
322
321
 
323
322
  ```python
324
- from fastmcp.server.auth import GoogleProvider
323
+ from fastmcp.server.auth.providers.google import GoogleProvider
325
324
 
326
325
  auth = GoogleProvider(client_id="...", client_secret="...", base_url="https://myserver.com")
327
326
  mcp = FastMCP("Protected Server", auth=auth)
@@ -4,6 +4,40 @@ icon: "list-check"
4
4
  rss: true
5
5
  ---
6
6
 
7
+ <Update label="v2.13.0" description="2025-10-25">
8
+
9
+ **[v2.13.0: Cache Me If You Can](https://github.com/jlowin/fastmcp/releases/tag/v2.13.0)**
10
+
11
+ FastMCP 2.13 "Cache Me If You Can" represents a fundamental maturation of the framework. After months of community feedback on authentication and state management, this release delivers the infrastructure FastMCP needs to handle production workloads: persistent storage, response caching, and pragmatic OAuth improvements that reflect real-world deployment challenges.
12
+
13
+ 💾 **Pluggable storage backends** bring persistent state to FastMCP servers. Built on [py-key-value-aio](https://github.com/strawgate/py-key-value), a new library from FastMCP maintainer Bill Easton ([@strawgate](https://github.com/strawgate)), the storage layer provides encrypted disk storage by default, platform-aware token management, and a simple key-value interface for application state. We're excited to bring this elegantly designed library into the FastMCP ecosystem - it's both powerful and remarkably easy to use, including wrappers to add encryption, TTLs, caching, and more to backends ranging from Elasticsearch, Redis, DynamoDB, filesystem, in-memory, and more! OAuth providers now automatically persist tokens across restarts, and developers can store arbitrary state without reaching for external databases. This foundation enables long-running sessions, cached credentials, and stateful applications built on MCP.
14
+
15
+ 🔐 **OAuth maturity** brings months of production learnings into the framework. The new consent screen prevents confused deputy and authorization bypass attacks discovered in earlier versions while providing a clean UX with customizable branding. The OAuth proxy now issues its own tokens with automatic key derivation from client secrets, and RFC 7662 token introspection support enables enterprise auth flows. Path prefix mounting enables OAuth-protected servers to integrate into existing web applications under custom paths like `/api`, and MCP 1.17+ compliance with RFC 9728 ensures protocol compatibility. Combined with improved error handling and platform-aware token storage, OAuth is now production-ready and security-hardened for serious applications.
16
+
17
+ FastMCP now supports out-of-the-box authentication with:
18
+ - **[WorkOS](https://gofastmcp.com/integrations/workos)** and **[AuthKit](https://gofastmcp.com/integrations/authkit)**
19
+ - **[GitHub](https://gofastmcp.com/integrations/github)**
20
+ - **[Google](https://gofastmcp.com/integrations/google)**
21
+ - **[Azure](https://gofastmcp.com/integrations/azure)** (Entra ID)
22
+ - **[AWS Cognito](https://gofastmcp.com/integrations/aws-cognito)**
23
+ - **[Auth0](https://gofastmcp.com/integrations/auth0)**
24
+ - **[Descope](https://gofastmcp.com/integrations/descope)**
25
+ - **[Scalekit](https://gofastmcp.com/integrations/scalekit)**
26
+ - **[JWTs](https://gofastmcp.com/servers/auth/token-verification#jwt-token-verification)**
27
+ - **[RFC 7662 token introspection](https://gofastmcp.com/servers/auth/token-verification#token-introspection-protocol)**
28
+
29
+ ⚡ **Response Caching Middleware** dramatically improves performance for expensive operations. Cache tool and resource responses with configurable TTLs, reducing redundant API calls and speeding up repeated queries.
30
+
31
+ 🔄 **Server lifespans** provide proper initialization and cleanup hooks that run once per server instance instead of per client session. This fixes a long-standing source of confusion in the MCP SDK and enables proper resource management for database connections, background tasks, and other server-level state. Note: this is a breaking behavioral change if you were using the `lifespan` parameter.
32
+
33
+ ✨ **Developer experience improvements** include Pydantic input validation for better type safety, icon support for richer UX, RFC 6570 query parameters for resource templates, improved Context API methods (list_resources, list_prompts, get_prompt), and async file/directory resources.
34
+
35
+ This release includes contributions from **20** new contributors and represents the largest feature set in a while. Thank you to everyone who tested preview builds and filed issues - your feedback shaped these improvements!
36
+
37
+ **Full Changelog**: [v2.12.5...v2.13.0](https://github.com/jlowin/fastmcp/compare/v2.12.5...v2.13.0)
38
+
39
+ </Update>
40
+
7
41
  <Update label="v2.12.5" description="2025-10-17">
8
42
 
9
43
  **[v2.12.5: Safety Pin](https://github.com/jlowin/fastmcp/releases/tag/v2.12.5)**
@@ -151,51 +151,6 @@ client = Client(
151
151
  )
152
152
  ```
153
153
 
154
- ## Sampling fallback
155
-
156
- Client support for sampling is optional, if the client does not support sampling, the server will report an error indicating
157
- that the client does not support sampling.
158
-
159
- A `sampling_handler` can also be provided to the FastMCP server, which will be used to handle sampling requests if the client
160
- does not support sampling. This sampling handler bypasses the client and sends sampling requests directly to the LLM provider.
161
-
162
- Sampling handlers can be implemented using any LLM provider but a sample implementation for OpenAI is provided as a Contrib
163
- module. Sampling lacks the full capabilities of typical LLM completions. For this reason, the OpenAI sampling handler, pointed at
164
- a third-party provider's OpenAI-compatible API, is often sufficient to implement a sampling handler.
165
-
166
- ```python
167
- import asyncio
168
- import os
169
-
170
- from mcp.types import ContentBlock
171
- from openai import OpenAI
172
-
173
- from fastmcp import FastMCP
174
- from fastmcp.experimental.sampling.handlers.openai import OpenAISamplingHandler
175
- from fastmcp.server.context import Context
176
-
177
-
178
- async def async_main():
179
- server = FastMCP(
180
- name="OpenAI Sampling Fallback Example",
181
- sampling_handler=OpenAISamplingHandler(
182
- default_model="gpt-4o-mini",
183
- client=OpenAI(
184
- api_key=os.getenv("API_KEY"),
185
- base_url=os.getenv("BASE_URL"),
186
- ),
187
- ),
188
- )
189
-
190
- @server.tool
191
- async def test_sample_fallback(ctx: Context) -> ContentBlock:
192
- return await ctx.sample(
193
- messages=["hello world!"],
194
- )
195
-
196
- await server.run_http_async()
197
-
198
-
199
- if __name__ == "__main__":
200
- asyncio.run(async_main())
201
- ```
154
+ <Note>
155
+ If the client doesn't provide a sampling handler, servers can optionally configure a fallback handler. See [Server Sampling](/servers/sampling#sampling-fallback-handler) for details.
156
+ </Note>
@@ -545,39 +545,47 @@ MCP_AUTH_TOKEN=secret uvicorn app:app --host 0.0.0.0 --port 8000
545
545
 
546
546
  <VersionBadge version="2.13.0" />
547
547
 
548
- If you're using the [OAuth Proxy](/servers/auth/oauth-proxy), FastMCP issues its own JWT tokens to clients instead of forwarding upstream provider tokens. This maintains proper OAuth 2.0 token boundaries, but requires specific production configuration to ensure tokens survive server restarts.
548
+ If you're using the [OAuth Proxy](/servers/auth/oauth-proxy), FastMCP issues its own JWT tokens to clients instead of forwarding upstream provider tokens. This maintains proper OAuth 2.0 token boundaries.
549
549
 
550
- **Development vs Production:**
550
+ **Default Behavior (Development Only):**
551
551
 
552
- By default, token cryptographic keys are ephemeral—generated from a random salt at startup and not persisted anywhere. This means keys change on every restart, invalidating all tokens and triggering client re-authentication. This works fine for development and testing where re-auth after restart is acceptable.
552
+ By default, FastMCP automatically manages cryptographic keys:
553
+ - **Mac/Windows**: Keys are generated and stored in your system keyring, surviving server restarts. Suitable **only** for development and local testing.
554
+ - **Linux**: Keys are ephemeral (random salt at startup), so tokens are invalidated on restart.
553
555
 
554
- For production, tokens should survive restarts to avoid disrupting clients. This requires four things working together:
556
+ This automatic approach is convenient for development but not suitable for production deployments.
555
557
 
556
- 1. **Explicit JWT signing key** for signing tokens issued to clients
557
- 2. **Explicit token encryption key** for encrypting upstream OAuth tokens at rest
558
- 3. **Persistent storage** so encrypted upstream tokens survive restart
559
- 4. **HTTPS deployment** for secure cookie handling
558
+ **For Production:**
559
+
560
+ Production requires explicit key management to ensure tokens survive restarts and can be shared across multiple server instances. This requires the following two things working together:
560
561
 
561
- The two keys can be any secret strings (environment variables, secret manager, etc.) and should be different from each other. FastMCP derives proper cryptographic keys from whatever you provide using HKDF.
562
+ 1. **Explicit JWT signing key** for signing tokens issued to clients
563
+ 3. **Persistent network-accessible storage** for upstream tokens (wrapped in `FernetEncryptionWrapper` to encrypt sensitive data at rest)
562
564
 
563
565
  **Configuration:**
564
566
 
565
- Add two parameters to your auth provider and use persistent storage and HTTPS:
567
+ Add two parameters to your auth provider:
568
+
569
+ ```python {8-12}
570
+ from key_value.aio.stores.redis import RedisStore
571
+ from key_value.aio.wrappers.encryption import FernetEncryptionWrapper
572
+ from cryptography.fernet import Fernet
566
573
 
567
- ```python {4-7}
568
574
  auth = GitHubProvider(
569
575
  client_id=os.environ["GITHUB_CLIENT_ID"],
570
576
  client_secret=os.environ["GITHUB_CLIENT_SECRET"],
571
577
  jwt_signing_key=os.environ["JWT_SIGNING_KEY"],
572
- token_encryption_key=os.environ["TOKEN_ENCRYPTION_KEY"],
573
- client_storage=RedisStore(host="redis.example.com", ...),
574
- base_url="https://your-server.com" # use HTTPS
578
+ client_storage=FernetEncryptionWrapper(
579
+ key_value=RedisStore(host="redis.example.com", port=6379),
580
+ fernet=Fernet(os.environ["STORAGE_ENCRYPTION_KEY"])
581
+ ),
582
+ base_url="https://your-server.com" # use HTTPS
575
583
  )
576
584
  ```
577
585
 
578
- Without explicit keys, new keys are generated each time the server starts. Without persistent storage, encrypted tokens are lost. Both cause token validation to fail after restart, requiring all clients to re-authenticate.
586
+ Both parameters are required for production. Without an explicit signing key, keys are signed using a key derived from the client_secret, which will cause invalidation upon rotation of the client secret. Without persistent storage, tokens are local to the server and won't be trusted across hosts. **Wrap your storage backend in `FernetEncryptionWrapper` to encrypt sensitive OAuth tokens at rest** - without encryption, tokens are stored in plaintext.
579
587
 
580
- For more details on the token architecture, see [OAuth Proxy Token Architecture](/servers/auth/oauth-proxy#token-architecture).
588
+ For more details on the token architecture and key management, see [OAuth Proxy Key and Storage Management](/servers/auth/oauth-proxy#key-and-storage-management).
581
589
 
582
590
  ## Testing Your Deployment
583
591
 
@@ -4,6 +4,8 @@ description: "Testing patterns and requirements for FastMCP"
4
4
  icon: vial
5
5
  ---
6
6
 
7
+ import { VersionBadge } from "/snippets/version-badge.mdx"
8
+
7
9
  Good tests are the foundation of reliable software. In FastMCP, we treat tests as first-class documentation that demonstrates how features work while protecting against regressions. Every new capability needs comprehensive tests that demonstrate correctness.
8
10
 
9
11
  ## FastMCP Tests
@@ -301,6 +303,8 @@ While in-memory testing covers most unit testing needs, you'll occasionally need
301
303
 
302
304
  #### In-Process Network Testing (Preferred)
303
305
 
306
+ <VersionBadge version="2.13.0" />
307
+
304
308
  For most network transport tests, use `run_server_async` with AnyIO task groups. This runs the server as a task in the same process, providing fast, deterministic tests with full debugger support:
305
309
 
306
310
  ```python
@@ -18,11 +18,17 @@ The OAuth proxy now issues its own JWT tokens to clients instead of forwarding u
18
18
 
19
19
  The OAuth proxy now implements a token factory pattern - it receives tokens from your OAuth provider (GitHub, Google, etc.), encrypts and stores them, then issues its own FastMCP JWT tokens to clients. This requires cryptographic keys for JWT signing and token encryption.
20
20
 
21
- By default, these keys are ephemeral (random salt at startup, not persisted). For most users (development/testing), this works fine since re-authentication after restart is acceptable. For production deployments where you want tokens to persist across restarts, provide explicit keys via parameters.
21
+ **Default behavior (development):**
22
22
 
23
- **Production deployments:**
23
+ By default, FastMCP automatically manages keys based on your platform:
24
+ - **Mac/Windows**: Keys are auto-managed via system keyring, surviving server restarts with zero configuration. Suitable **only** for development and local testing.
25
+ - **Linux**: Keys are ephemeral (random salt at startup, regenerated on each restart).
24
26
 
25
- If you want tokens to survive server restarts, add two new parameters:
27
+ This works fine for development and testing where re-authentication after restart is acceptable.
28
+
29
+ **For production:**
30
+
31
+ Production deployments must provide explicit keys and use persistent storage. Add these three things:
26
32
 
27
33
  ```python
28
34
  auth = GitHubProvider(
@@ -30,16 +36,15 @@ auth = GitHubProvider(
30
36
  client_secret=os.environ["GITHUB_CLIENT_SECRET"],
31
37
  base_url="https://your-server.com",
32
38
 
33
- # Add these for production token persistence
39
+ # Explicit keys (required for production)
34
40
  jwt_signing_key=os.environ["JWT_SIGNING_KEY"],
35
- token_encryption_key=os.environ["TOKEN_ENCRYPTION_KEY"],
36
41
 
37
- client_storage=RedisStore(...) # Persistent storage
42
+ # Persistent network storage (required for production)
43
+ client_storage=RedisStore(host="redis.example.com", port=6379)
38
44
  )
39
45
  ```
40
46
 
41
- Both keys accept any secret string. Make sure they're different from each other.
42
-
43
47
  **More information:**
44
48
  - [OAuth Token Security](/deployment/http#oauth-token-security) - Complete production setup guide
49
+ - [Key and Storage Management](/servers/auth/oauth-proxy#key-and-storage-management) - Detailed explanation of defaults and production requirements
45
50
  - [OAuth Proxy Parameters](/servers/auth/oauth-proxy#configuration-parameters) - Parameter documentation
@@ -19,12 +19,11 @@
19
19
  "light": "#4cc9f0",
20
20
  "primary": "#2d00f7"
21
21
  },
22
- "fonts": {
23
- "heading": { "family": "Google Sans" },
24
- "body": { "family": "BlinkMacSystemFont" }
25
- },
26
22
  "contextual": {
27
- "options": ["copy", "view"]
23
+ "options": [
24
+ "copy",
25
+ "view"
26
+ ]
28
27
  },
29
28
  "description": "The fast, Pythonic way to build MCP servers and clients.",
30
29
  "errors": {
@@ -150,7 +149,10 @@
150
149
  {
151
150
  "group": "Essentials",
152
151
  "icon": "cube",
153
- "pages": ["clients/client", "clients/transports"]
152
+ "pages": [
153
+ "clients/client",
154
+ "clients/transports"
155
+ ]
154
156
  },
155
157
  {
156
158
  "group": "Core Operations",
@@ -176,7 +178,10 @@
176
178
  {
177
179
  "group": "Authentication",
178
180
  "icon": "user-shield",
179
- "pages": ["clients/auth/oauth", "clients/auth/bearer"]
181
+ "pages": [
182
+ "clients/auth/oauth",
183
+ "clients/auth/bearer"
184
+ ]
180
185
  }
181
186
  ]
182
187
  },
@@ -230,7 +235,10 @@
230
235
  {
231
236
  "group": "API Integration",
232
237
  "icon": "globe",
233
- "pages": ["integrations/fastapi", "integrations/openapi"]
238
+ "pages": [
239
+ "integrations/fastapi",
240
+ "integrations/openapi"
241
+ ]
234
242
  }
235
243
  ]
236
244
  },
@@ -240,7 +248,8 @@
240
248
  "patterns/tool-transformation",
241
249
  "patterns/decorating-methods",
242
250
  "patterns/cli",
243
- "patterns/contrib"
251
+ "patterns/contrib",
252
+ "patterns/testing"
244
253
  ]
245
254
  },
246
255
  {
@@ -336,6 +345,7 @@
336
345
  "python-sdk/fastmcp-server-auth-__init__",
337
346
  "python-sdk/fastmcp-server-auth-auth",
338
347
  "python-sdk/fastmcp-server-auth-jwt_issuer",
348
+ "python-sdk/fastmcp-server-auth-middleware",
339
349
  "python-sdk/fastmcp-server-auth-oauth_proxy",
340
350
  "python-sdk/fastmcp-server-auth-oidc_proxy",
341
351
  {
@@ -374,7 +384,8 @@
374
384
  "python-sdk/fastmcp-server-middleware-logging",
375
385
  "python-sdk/fastmcp-server-middleware-middleware",
376
386
  "python-sdk/fastmcp-server-middleware-rate_limiting",
377
- "python-sdk/fastmcp-server-middleware-timing"
387
+ "python-sdk/fastmcp-server-middleware-timing",
388
+ "python-sdk/fastmcp-server-middleware-tool_injection"
378
389
  ]
379
390
  },
380
391
  "python-sdk/fastmcp-server-openapi",
@@ -461,17 +472,17 @@
461
472
  "search": {
462
473
  "prompt": "Search the docs..."
463
474
  },
464
- "theme": "almond",
465
- "thumbnails": {
466
- "appearance": "light",
467
- "background": "/assets/brand/thumbnail-background.png"
468
- },
469
475
  "styling": {
470
476
  "codeblocks": {
471
477
  "theme": {
472
- "light": "snazzy-light",
473
- "dark": "dark-plus"
478
+ "dark": "dark-plus",
479
+ "light": "snazzy-light"
474
480
  }
475
481
  }
482
+ },
483
+ "theme": "almond",
484
+ "thumbnails": {
485
+ "appearance": "light",
486
+ "background": "/assets/brand/thumbnail-background.png"
476
487
  }
477
488
  }
@@ -149,6 +149,48 @@ When you run the client for the first time:
149
149
  2. After you authorize the app, you'll be redirected back
150
150
  3. The client receives the token and can make authenticated requests
151
151
 
152
+ ## Production Configuration
153
+
154
+ <VersionBadge version="2.13.0" />
155
+
156
+ For production deployments with persistent token management across server restarts, configure `jwt_signing_key`, and `client_storage`:
157
+
158
+ ```python server.py
159
+ import os
160
+ from fastmcp import FastMCP
161
+ from fastmcp.server.auth.providers.auth0 import Auth0Provider
162
+ from key_value.aio.stores.redis import RedisStore
163
+ from key_value.aio.wrappers.encryption import FernetEncryptionWrapper
164
+ from cryptography.fernet import Fernet
165
+
166
+ # Production setup with encrypted persistent token storage
167
+ auth_provider = Auth0Provider(
168
+ config_url="https://.../.well-known/openid-configuration",
169
+ client_id="tv2ObNgaZAWWhhycr7Bz1LU2mxlnsmsB",
170
+ client_secret="vPYqbjemq...",
171
+ audience="https://...",
172
+ base_url="https://your-production-domain.com",
173
+
174
+ # Production token management
175
+ jwt_signing_key=os.environ["JWT_SIGNING_KEY"],
176
+ client_storage=FernetEncryptionWrapper(
177
+ key_value=RedisStore(
178
+ host=os.environ["REDIS_HOST"],
179
+ port=int(os.environ["REDIS_PORT"])
180
+ ),
181
+ fernet=Fernet(os.environ["STORAGE_ENCRYPTION_KEY"])
182
+ )
183
+ )
184
+
185
+ mcp = FastMCP(name="Production Auth0 App", auth=auth_provider)
186
+ ```
187
+
188
+ <Note>
189
+ Parameters (`jwt_signing_key` and `client_storage`) work together to ensure tokens and client registrations survive server restarts. **Wrap your storage in `FernetEncryptionWrapper` to encrypt sensitive OAuth tokens at rest** - without it, tokens are stored in plaintext. Store secrets in environment variables and use a persistent storage backend like Redis for distributed deployments.
190
+
191
+ For complete details on these parameters, see the [OAuth Proxy documentation](/servers/auth/oauth-proxy#configuration-parameters).
192
+ </Note>
193
+
152
194
  <Info>
153
195
  The client caches tokens locally, so you won't need to re-authenticate for subsequent runs unless the token expires or you explicitly clear the cache.
154
196
  </Info>
@@ -196,6 +196,48 @@ When you run the client for the first time:
196
196
  The client caches tokens locally, so you won't need to re-authenticate for subsequent runs unless the token expires or you explicitly clear the cache.
197
197
  </Info>
198
198
 
199
+ ## Production Configuration
200
+
201
+ <VersionBadge version="2.13.0" />
202
+
203
+ For production deployments with persistent token management across server restarts, configure `jwt_signing_key`, and `client_storage`:
204
+
205
+ ```python server.py
206
+ import os
207
+ from fastmcp import FastMCP
208
+ from fastmcp.server.auth.providers.aws import AWSCognitoProvider
209
+ from key_value.aio.stores.redis import RedisStore
210
+ from key_value.aio.wrappers.encryption import FernetEncryptionWrapper
211
+ from cryptography.fernet import Fernet
212
+
213
+ # Production setup with encrypted persistent token storage
214
+ auth_provider = AWSCognitoProvider(
215
+ user_pool_id="eu-central-1_XXXXXXXXX",
216
+ aws_region="eu-central-1",
217
+ client_id="your-app-client-id",
218
+ client_secret="your-app-client-secret",
219
+ base_url="https://your-production-domain.com",
220
+
221
+ # Production token management
222
+ jwt_signing_key=os.environ["JWT_SIGNING_KEY"],
223
+ client_storage=FernetEncryptionWrapper(
224
+ key_value=RedisStore(
225
+ host=os.environ["REDIS_HOST"],
226
+ port=int(os.environ["REDIS_PORT"])
227
+ ),
228
+ fernet=Fernet(os.environ["STORAGE_ENCRYPTION_KEY"])
229
+ )
230
+ )
231
+
232
+ mcp = FastMCP(name="Production AWS Cognito App", auth=auth_provider)
233
+ ```
234
+
235
+ <Note>
236
+ Parameters (`jwt_signing_key` and `client_storage`) work together to ensure tokens and client registrations survive server restarts. **Wrap your storage in `FernetEncryptionWrapper` to encrypt sensitive OAuth tokens at rest** - without it, tokens are stored in plaintext. Store secrets in environment variables and use a persistent storage backend like Redis for distributed deployments.
237
+
238
+ For complete details on these parameters, see the [OAuth Proxy documentation](/servers/auth/oauth-proxy#configuration-parameters).
239
+ </Note>
240
+
199
241
  ## Environment Variables
200
242
 
201
243
  For production deployments, use environment variables instead of hardcoding credentials.