fastmcp 2.13.0rc2__tar.gz → 2.13.0rc3__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 (657) hide show
  1. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/.github/workflows/martian-issue-triage.yml +5 -4
  2. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/.github/workflows/marvin-dedupe-issues.yml +0 -1
  3. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/AGENTS.md +2 -2
  4. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/PKG-INFO +5 -5
  5. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/README.md +1 -2
  6. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/clients/sampling.mdx +3 -48
  7. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/deployment/http.mdx +24 -16
  8. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/development/tests.mdx +4 -0
  9. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/development/upgrade-guide.mdx +13 -8
  10. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/docs.json +2 -5
  11. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/auth0.mdx +42 -0
  12. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/aws-cognito.mdx +42 -0
  13. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/azure.mdx +42 -0
  14. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/github.mdx +40 -0
  15. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/google.mdx +41 -0
  16. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/workos.mdx +42 -0
  17. fastmcp-2.13.0rc3/docs/patterns/testing.mdx +85 -0
  18. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-oauth_callback.mdx +5 -5
  19. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-transports.mdx +7 -7
  20. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-jwt_issuer.mdx +4 -4
  21. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-oauth_proxy.mdx +24 -21
  22. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-oidc_proxy.mdx +2 -2
  23. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-aws.mdx +1 -1
  24. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-azure.mdx +1 -1
  25. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-workos.mdx +3 -3
  26. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-http.mdx +8 -8
  27. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-cli.mdx +3 -3
  28. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-ui.mdx +9 -8
  29. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/servers/auth/oauth-proxy.mdx +63 -40
  30. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/servers/auth/oidc-proxy.mdx +47 -4
  31. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/servers/context.mdx +30 -5
  32. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/servers/middleware.mdx +35 -0
  33. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/servers/sampling.mdx +85 -6
  34. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/servers/storage-backends.mdx +23 -11
  35. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/memory.py +3 -3
  36. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/smart_home/src/smart_home/hub.py +3 -8
  37. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/smart_home/src/smart_home/lights/hue_utils.py +1 -1
  38. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/smart_home/src/smart_home/settings.py +2 -2
  39. fastmcp-2.13.0rc3/logo.py +25 -0
  40. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/pyproject.toml +4 -2
  41. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/cli/cli.py +1 -0
  42. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/cli/install/claude_code.py +3 -3
  43. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/client/oauth_callback.py +6 -2
  44. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/client/transports.py +1 -0
  45. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/resources/types.py +30 -24
  46. fastmcp-2.13.0rc3/src/fastmcp/server/auth/handlers/authorize.py +324 -0
  47. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/jwt_issuer.py +39 -92
  48. fastmcp-2.13.0rc3/src/fastmcp/server/auth/middleware.py +96 -0
  49. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/oauth_proxy.py +236 -217
  50. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/oidc_proxy.py +16 -1
  51. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/auth0.py +28 -15
  52. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/aws.py +16 -1
  53. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/azure.py +69 -31
  54. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/github.py +16 -1
  55. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/google.py +16 -1
  56. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/workos.py +16 -1
  57. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/context.py +33 -2
  58. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/http.py +1 -1
  59. fastmcp-2.13.0rc3/src/fastmcp/server/middleware/tool_injection.py +116 -0
  60. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/server.py +47 -26
  61. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/settings.py +2 -1
  62. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/tools/tool_manager.py +8 -4
  63. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/cli.py +45 -15
  64. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/ui.py +126 -6
  65. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/server/openapi/test_openapi_performance.py +1 -0
  66. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/server/openapi/test_performance_comparison.py +0 -6
  67. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/integration_tests/auth/test_github_provider_integration.py +2 -0
  68. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/auth/providers/test_auth0.py +7 -0
  69. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/auth/providers/test_aws.py +6 -0
  70. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/auth/providers/test_azure.py +44 -25
  71. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/auth/providers/test_github.py +7 -0
  72. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/auth/providers/test_google.py +5 -0
  73. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/auth/providers/test_workos.py +7 -0
  74. fastmcp-2.13.0rc3/tests/server/auth/test_enhanced_error_responses.py +364 -0
  75. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/auth/test_jwt_issuer.py +36 -103
  76. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/auth/test_oauth_consent_flow.py +5 -0
  77. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/auth/test_oauth_proxy.py +18 -0
  78. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/auth/test_oauth_proxy_redirect_validation.py +5 -0
  79. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/auth/test_oauth_proxy_storage.py +12 -9
  80. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/auth/test_oidc_proxy.py +6 -0
  81. fastmcp-2.13.0rc3/tests/server/middleware/test_tool_injection.py +498 -0
  82. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/test_server.py +48 -0
  83. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/uv.lock +130 -10
  84. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/.ccignore +0 -0
  85. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/.cursor/rules/core-mcp-objects.mdc +0 -0
  86. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/.cursor/worktrees.json +0 -0
  87. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/.github/ISSUE_TEMPLATE/bug.yml +0 -0
  88. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  89. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/.github/ISSUE_TEMPLATE/enhancement.yml +0 -0
  90. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/.github/copilot-instructions.md +0 -0
  91. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/.github/dependabot.yml +0 -0
  92. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/.github/pull_request_template.md +0 -0
  93. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/.github/release.yml +0 -0
  94. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/.github/workflows/auto-close-duplicates.yml +0 -0
  95. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/.github/workflows/auto-close-needs-mre.yml +0 -0
  96. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/.github/workflows/marvin-label-triage.yml +0 -0
  97. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/.github/workflows/marvin.yml +0 -0
  98. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/.github/workflows/publish.yml +0 -0
  99. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/.github/workflows/run-static.yml +0 -0
  100. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/.github/workflows/run-tests.yml +0 -0
  101. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/.github/workflows/update-config-schema.yml +0 -0
  102. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/.github/workflows/update-sdk-docs.yml +0 -0
  103. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/.gitignore +0 -0
  104. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/.pre-commit-config.yaml +0 -0
  105. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/CLAUDE.md +0 -0
  106. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/CODE_OF_CONDUCT.md +0 -0
  107. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/LICENSE +0 -0
  108. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/SECURITY.md +0 -0
  109. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/.ccignore +0 -0
  110. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/.cursor/rules/mintlify.mdc +0 -0
  111. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/assets/brand/blue-logo.png +0 -0
  112. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/assets/brand/f-watercolor-waves-dark.png +0 -0
  113. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/assets/brand/f-watercolor-waves.png +0 -0
  114. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/assets/brand/favicon.svg +0 -0
  115. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/assets/brand/thumbnail-background.png +0 -0
  116. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/assets/brand/wordmark-padded.png +0 -0
  117. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/assets/brand/wordmark-watercolor-rainbow-dark.png +0 -0
  118. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/assets/brand/wordmark-watercolor-rainbow.png +0 -0
  119. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/assets/brand/wordmark-watercolor-waves-dark.png +0 -0
  120. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/assets/brand/wordmark-watercolor-waves.png +0 -0
  121. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/assets/brand/wordmark-white-padded.png +0 -0
  122. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/assets/brand/wordmark-white.png +0 -0
  123. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/assets/brand/wordmark.png +0 -0
  124. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/assets/images/fastmcp_cloud/connect.png +0 -0
  125. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/assets/images/fastmcp_cloud/create_project.png +0 -0
  126. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/assets/images/fastmcp_cloud/deployment.png +0 -0
  127. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/assets/images/fastmcp_cloud/quickstart.png +0 -0
  128. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/assets/images/oauth-proxy-consent-screen.png +0 -0
  129. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/assets/images/tutorial-rest-api-result.png +0 -0
  130. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/assets/schemas/mcp_server_config/latest.json +0 -0
  131. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/assets/schemas/mcp_server_config/v1.json +0 -0
  132. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/assets/updates/release-2-7.png +0 -0
  133. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/changelog.mdx +0 -0
  134. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/clients/auth/bearer.mdx +0 -0
  135. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/clients/auth/oauth.mdx +0 -0
  136. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/clients/client.mdx +0 -0
  137. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/clients/elicitation.mdx +0 -0
  138. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/clients/logging.mdx +0 -0
  139. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/clients/messages.mdx +0 -0
  140. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/clients/progress.mdx +0 -0
  141. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/clients/prompts.mdx +0 -0
  142. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/clients/resources.mdx +0 -0
  143. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/clients/roots.mdx +0 -0
  144. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/clients/tools.mdx +0 -0
  145. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/clients/transports.mdx +0 -0
  146. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/community/README.md +0 -0
  147. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/community/showcase.mdx +0 -0
  148. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/css/banner.css +0 -0
  149. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/css/python-sdk.css +0 -0
  150. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/css/style.css +0 -0
  151. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/css/version-badge.css +0 -0
  152. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/deployment/fastmcp-cloud.mdx +0 -0
  153. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/deployment/running-server.mdx +0 -0
  154. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/deployment/server-configuration.mdx +0 -0
  155. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/development/contributing.mdx +0 -0
  156. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/development/releases.mdx +0 -0
  157. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/getting-started/installation.mdx +0 -0
  158. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/getting-started/quickstart.mdx +0 -0
  159. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/getting-started/welcome.mdx +0 -0
  160. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/anthropic.mdx +0 -0
  161. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/authkit.mdx +0 -0
  162. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/chatgpt.mdx +0 -0
  163. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/claude-code.mdx +0 -0
  164. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/claude-desktop.mdx +0 -0
  165. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/cursor-install-mcp.png +0 -0
  166. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/cursor.mdx +0 -0
  167. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/descope.mdx +0 -0
  168. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/eunomia-authorization.mdx +0 -0
  169. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/fastapi.mdx +0 -0
  170. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/gemini-cli.mdx +0 -0
  171. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/gemini.mdx +0 -0
  172. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/images/authkit/enable_dcr.png +0 -0
  173. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/images/permit/abac_condition_example.png +0 -0
  174. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/images/permit/abac_policy_example.png +0 -0
  175. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/images/permit/policy_mapping.png +0 -0
  176. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/images/permit/role_assignement.png +0 -0
  177. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/mcp-json-configuration.mdx +0 -0
  178. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/openai.mdx +0 -0
  179. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/openapi.mdx +0 -0
  180. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/permit.mdx +0 -0
  181. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/integrations/scalekit.mdx +0 -0
  182. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/patterns/cli.mdx +0 -0
  183. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/patterns/contrib.mdx +0 -0
  184. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/patterns/decorating-methods.mdx +0 -0
  185. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/patterns/tool-transformation.mdx +0 -0
  186. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/public/schemas/fastmcp.json/latest.json +0 -0
  187. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/public/schemas/fastmcp.json/v1.json +0 -0
  188. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-cli-__init__.mdx +0 -0
  189. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-cli-cli.mdx +0 -0
  190. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-cli-install-__init__.mdx +0 -0
  191. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-cli-install-claude_code.mdx +0 -0
  192. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-cli-install-claude_desktop.mdx +0 -0
  193. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-cli-install-cursor.mdx +0 -0
  194. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-cli-install-gemini_cli.mdx +0 -0
  195. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-cli-install-mcp_json.mdx +0 -0
  196. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-cli-install-shared.mdx +0 -0
  197. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-cli-run.mdx +0 -0
  198. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-__init__.mdx +0 -0
  199. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-auth-__init__.mdx +0 -0
  200. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-auth-bearer.mdx +0 -0
  201. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-auth-oauth.mdx +0 -0
  202. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-client.mdx +0 -0
  203. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-elicitation.mdx +0 -0
  204. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-logging.mdx +0 -0
  205. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-messages.mdx +0 -0
  206. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-progress.mdx +0 -0
  207. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-roots.mdx +0 -0
  208. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-sampling.mdx +0 -0
  209. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-exceptions.mdx +0 -0
  210. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-mcp_config.mdx +0 -0
  211. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-prompts-__init__.mdx +0 -0
  212. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-prompts-prompt.mdx +0 -0
  213. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-prompts-prompt_manager.mdx +0 -0
  214. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-resources-__init__.mdx +0 -0
  215. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-resources-resource.mdx +0 -0
  216. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-resources-resource_manager.mdx +0 -0
  217. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-resources-template.mdx +0 -0
  218. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-resources-types.mdx +0 -0
  219. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-__init__.mdx +0 -0
  220. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-__init__.mdx +0 -0
  221. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-auth.mdx +0 -0
  222. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-__init__.mdx +0 -0
  223. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-auth0.mdx +0 -0
  224. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-bearer.mdx +0 -0
  225. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-descope.mdx +0 -0
  226. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-github.mdx +0 -0
  227. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-google.mdx +0 -0
  228. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-in_memory.mdx +0 -0
  229. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-introspection.mdx +0 -0
  230. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-jwt.mdx +0 -0
  231. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-scalekit.mdx +0 -0
  232. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-supabase.mdx +0 -0
  233. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-redirect_validation.mdx +0 -0
  234. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-context.mdx +0 -0
  235. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-dependencies.mdx +0 -0
  236. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-elicitation.mdx +0 -0
  237. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-low_level.mdx +0 -0
  238. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-middleware-__init__.mdx +0 -0
  239. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-middleware-caching.mdx +0 -0
  240. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-middleware-error_handling.mdx +0 -0
  241. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-middleware-logging.mdx +0 -0
  242. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-middleware-middleware.mdx +0 -0
  243. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-middleware-rate_limiting.mdx +0 -0
  244. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-middleware-timing.mdx +0 -0
  245. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-openapi.mdx +0 -0
  246. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-proxy.mdx +0 -0
  247. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-server.mdx +0 -0
  248. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-settings.mdx +0 -0
  249. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-tools-__init__.mdx +0 -0
  250. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-tools-tool.mdx +0 -0
  251. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-tools-tool_manager.mdx +0 -0
  252. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-tools-tool_transform.mdx +0 -0
  253. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-__init__.mdx +0 -0
  254. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-auth.mdx +0 -0
  255. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-components.mdx +0 -0
  256. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-exceptions.mdx +0 -0
  257. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-http.mdx +0 -0
  258. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-inspect.mdx +0 -0
  259. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-json_schema.mdx +0 -0
  260. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-json_schema_type.mdx +0 -0
  261. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-logging.mdx +0 -0
  262. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-mcp_config.mdx +0 -0
  263. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-mcp_server_config-__init__.mdx +0 -0
  264. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-__init__.mdx +0 -0
  265. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-environments-__init__.mdx +0 -0
  266. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-environments-base.mdx +0 -0
  267. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-environments-uv.mdx +0 -0
  268. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-mcp_server_config.mdx +0 -0
  269. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-sources-__init__.mdx +0 -0
  270. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-sources-base.mdx +0 -0
  271. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-sources-filesystem.mdx +0 -0
  272. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-openapi.mdx +0 -0
  273. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-tests.mdx +0 -0
  274. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-types.mdx +0 -0
  275. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/servers/auth/authentication.mdx +0 -0
  276. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/servers/auth/full-oauth-server.mdx +0 -0
  277. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/servers/auth/remote-oauth.mdx +0 -0
  278. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/servers/auth/token-verification.mdx +0 -0
  279. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/servers/composition.mdx +0 -0
  280. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/servers/elicitation.mdx +0 -0
  281. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/servers/icons.mdx +0 -0
  282. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/servers/logging.mdx +0 -0
  283. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/servers/progress.mdx +0 -0
  284. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/servers/prompts.mdx +0 -0
  285. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/servers/proxy.mdx +0 -0
  286. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/servers/resources.mdx +0 -0
  287. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/servers/server.mdx +0 -0
  288. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/servers/tools.mdx +0 -0
  289. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/snippets/local-focus.mdx +0 -0
  290. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/snippets/version-badge.mdx +0 -0
  291. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/snippets/youtube-embed.mdx +0 -0
  292. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/tutorials/create-mcp-server.mdx +0 -0
  293. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/tutorials/mcp.mdx +0 -0
  294. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/tutorials/rest-api.mdx +0 -0
  295. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/docs/updates.mdx +0 -0
  296. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/atproto_mcp/README.md +0 -0
  297. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/atproto_mcp/demo.py +0 -0
  298. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/atproto_mcp/fastmcp.json +0 -0
  299. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/atproto_mcp/pyproject.toml +0 -0
  300. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/atproto_mcp/src/atproto_mcp/__init__.py +0 -0
  301. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/atproto_mcp/src/atproto_mcp/__main__.py +0 -0
  302. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/atproto_mcp/src/atproto_mcp/_atproto/__init__.py +0 -0
  303. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/atproto_mcp/src/atproto_mcp/_atproto/_client.py +0 -0
  304. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/atproto_mcp/src/atproto_mcp/_atproto/_posts.py +0 -0
  305. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/atproto_mcp/src/atproto_mcp/_atproto/_profile.py +0 -0
  306. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/atproto_mcp/src/atproto_mcp/_atproto/_read.py +0 -0
  307. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/atproto_mcp/src/atproto_mcp/_atproto/_social.py +0 -0
  308. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/atproto_mcp/src/atproto_mcp/py.typed +0 -0
  309. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/atproto_mcp/src/atproto_mcp/server.py +0 -0
  310. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/atproto_mcp/src/atproto_mcp/settings.py +0 -0
  311. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/atproto_mcp/src/atproto_mcp/types.py +0 -0
  312. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/auth/authkit_dcr/README.md +0 -0
  313. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/auth/authkit_dcr/client.py +0 -0
  314. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/auth/authkit_dcr/server.py +0 -0
  315. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/auth/aws_oauth/README.md +0 -0
  316. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/auth/aws_oauth/client.py +0 -0
  317. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/auth/aws_oauth/requirements.txt +0 -0
  318. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/auth/aws_oauth/server.py +0 -0
  319. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/auth/azure_oauth/README.md +0 -0
  320. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/auth/azure_oauth/client.py +0 -0
  321. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/auth/azure_oauth/server.py +0 -0
  322. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/auth/github_oauth/README.md +0 -0
  323. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/auth/github_oauth/client.py +0 -0
  324. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/auth/github_oauth/server.py +0 -0
  325. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/auth/google_oauth/README.md +0 -0
  326. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/auth/google_oauth/client.py +0 -0
  327. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/auth/google_oauth/server.py +0 -0
  328. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/auth/scalekit_oauth/README.md +0 -0
  329. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/auth/scalekit_oauth/client.py +0 -0
  330. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/auth/scalekit_oauth/server.py +0 -0
  331. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/auth/workos_oauth/README.md +0 -0
  332. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/auth/workos_oauth/client.py +0 -0
  333. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/auth/workos_oauth/server.py +0 -0
  334. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/complex_inputs.py +0 -0
  335. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/config_server.py +0 -0
  336. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/desktop.py +0 -0
  337. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/echo.py +0 -0
  338. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/fastmcp_config/env_interpolation_example.json +0 -0
  339. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/fastmcp_config/fastmcp.json +0 -0
  340. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/fastmcp_config/full_example.fastmcp.json +0 -0
  341. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/fastmcp_config/server.py +0 -0
  342. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/fastmcp_config/simple.fastmcp.json +0 -0
  343. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/fastmcp_config_demo/README.md +0 -0
  344. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/fastmcp_config_demo/fastmcp.json +0 -0
  345. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/fastmcp_config_demo/server.py +0 -0
  346. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/get_file.py +0 -0
  347. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/in_memory_proxy_example.py +0 -0
  348. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/memory.fastmcp.json +0 -0
  349. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/mount_example.fastmcp.json +0 -0
  350. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/mount_example.py +0 -0
  351. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/sampling.py +0 -0
  352. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/sampling_fallback.py +0 -0
  353. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/screenshot.fastmcp.json +0 -0
  354. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/screenshot.py +0 -0
  355. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/serializer.py +0 -0
  356. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/simple_echo.py +0 -0
  357. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/smart_home/README.md +0 -0
  358. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/smart_home/hub.fastmcp.json +0 -0
  359. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/smart_home/lights.fastmcp.json +0 -0
  360. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/smart_home/pyproject.toml +0 -0
  361. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/smart_home/src/smart_home/__init__.py +0 -0
  362. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/smart_home/src/smart_home/__main__.py +0 -0
  363. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/smart_home/src/smart_home/lights/__init__.py +0 -0
  364. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/smart_home/src/smart_home/lights/server.py +0 -0
  365. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/smart_home/src/smart_home/py.typed +0 -0
  366. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/tags_example.py +0 -0
  367. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/examples/text_me.py +0 -0
  368. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/justfile +0 -0
  369. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/scripts/auto_close_duplicates.py +0 -0
  370. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/scripts/auto_close_needs_mre.py +0 -0
  371. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/__init__.py +0 -0
  372. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/cli/__init__.py +0 -0
  373. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/cli/install/__init__.py +0 -0
  374. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/cli/install/claude_desktop.py +0 -0
  375. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/cli/install/cursor.py +0 -0
  376. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/cli/install/gemini_cli.py +0 -0
  377. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/cli/install/mcp_json.py +0 -0
  378. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/cli/install/shared.py +0 -0
  379. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/cli/run.py +0 -0
  380. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/client/__init__.py +0 -0
  381. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/client/auth/__init__.py +0 -0
  382. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/client/auth/bearer.py +0 -0
  383. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/client/auth/oauth.py +0 -0
  384. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/client/client.py +0 -0
  385. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/client/elicitation.py +0 -0
  386. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/client/logging.py +0 -0
  387. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/client/messages.py +0 -0
  388. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/client/progress.py +0 -0
  389. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/client/roots.py +0 -0
  390. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/client/sampling.py +0 -0
  391. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/README.md +0 -0
  392. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
  393. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
  394. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
  395. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
  396. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/component_manager/README.md +0 -0
  397. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/component_manager/__init__.py +0 -0
  398. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/component_manager/component_manager.py +0 -0
  399. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/component_manager/component_service.py +0 -0
  400. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/component_manager/example.py +0 -0
  401. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/mcp_mixin/README.md +0 -0
  402. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
  403. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/mcp_mixin/example.py +0 -0
  404. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
  405. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/exceptions.py +0 -0
  406. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/sampling/__init__.py +0 -0
  407. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/sampling/handlers/__init__.py +0 -0
  408. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/sampling/handlers/base.py +0 -0
  409. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/sampling/handlers/openai.py +0 -0
  410. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/server/openapi/README.md +0 -0
  411. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/server/openapi/__init__.py +0 -0
  412. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/server/openapi/components.py +0 -0
  413. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/server/openapi/routing.py +0 -0
  414. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/server/openapi/server.py +0 -0
  415. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/utilities/openapi/README.md +0 -0
  416. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/utilities/openapi/__init__.py +0 -0
  417. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/utilities/openapi/director.py +0 -0
  418. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/utilities/openapi/formatters.py +0 -0
  419. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/utilities/openapi/json_schema_converter.py +0 -0
  420. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/utilities/openapi/models.py +0 -0
  421. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/utilities/openapi/parser.py +0 -0
  422. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/utilities/openapi/schemas.py +0 -0
  423. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/mcp_config.py +0 -0
  424. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/prompts/__init__.py +0 -0
  425. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/prompts/prompt.py +0 -0
  426. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/prompts/prompt_manager.py +0 -0
  427. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/py.typed +0 -0
  428. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/resources/__init__.py +0 -0
  429. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/resources/resource.py +0 -0
  430. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/resources/resource_manager.py +0 -0
  431. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/resources/template.py +0 -0
  432. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/__init__.py +0 -0
  433. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/__init__.py +0 -0
  434. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/auth.py +0 -0
  435. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/__init__.py +0 -0
  436. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/bearer.py +0 -0
  437. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/descope.py +0 -0
  438. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/in_memory.py +0 -0
  439. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/introspection.py +0 -0
  440. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/jwt.py +0 -0
  441. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/scalekit.py +0 -0
  442. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/supabase.py +0 -0
  443. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/redirect_validation.py +0 -0
  444. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/dependencies.py +0 -0
  445. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/elicitation.py +0 -0
  446. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/low_level.py +0 -0
  447. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/middleware/__init__.py +0 -0
  448. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/middleware/caching.py +0 -0
  449. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/middleware/error_handling.py +0 -0
  450. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/middleware/logging.py +0 -0
  451. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/middleware/middleware.py +0 -0
  452. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/middleware/rate_limiting.py +0 -0
  453. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/middleware/timing.py +0 -0
  454. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/openapi.py +0 -0
  455. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/proxy.py +0 -0
  456. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/server/sampling/handler.py +0 -0
  457. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/tools/__init__.py +0 -0
  458. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/tools/tool.py +0 -0
  459. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/tools/tool_transform.py +0 -0
  460. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/__init__.py +0 -0
  461. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/auth.py +0 -0
  462. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/components.py +0 -0
  463. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/exceptions.py +0 -0
  464. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/http.py +0 -0
  465. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/inspect.py +0 -0
  466. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/json_schema.py +0 -0
  467. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/json_schema_type.py +0 -0
  468. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/logging.py +0 -0
  469. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/mcp_config.py +0 -0
  470. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
  471. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
  472. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
  473. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
  474. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
  475. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
  476. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
  477. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
  478. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
  479. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
  480. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/openapi.py +0 -0
  481. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/tests.py +0 -0
  482. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/types.py +0 -0
  483. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/__init__.py +0 -0
  484. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/cli/__init__.py +0 -0
  485. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/cli/test_cli.py +0 -0
  486. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/cli/test_config.py +0 -0
  487. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/cli/test_cursor.py +0 -0
  488. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/cli/test_install.py +0 -0
  489. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/cli/test_mcp_server_config_integration.py +0 -0
  490. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/cli/test_mcp_server_config_schema.py +0 -0
  491. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/cli/test_project_prepare.py +0 -0
  492. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/cli/test_run.py +0 -0
  493. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/cli/test_run_config.py +0 -0
  494. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/cli/test_server_args.py +0 -0
  495. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/cli/test_shared.py +0 -0
  496. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/cli/test_with_argv.py +0 -0
  497. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/client/__init__.py +0 -0
  498. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/client/auth/__init__.py +0 -0
  499. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/client/auth/test_oauth_client.py +0 -0
  500. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/client/test_client.py +0 -0
  501. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/client/test_elicitation.py +0 -0
  502. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/client/test_logs.py +0 -0
  503. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/client/test_notifications.py +0 -0
  504. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/client/test_oauth_callback_xss.py +0 -0
  505. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/client/test_openapi_experimental.py +0 -0
  506. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/client/test_openapi_legacy.py +0 -0
  507. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/client/test_progress.py +0 -0
  508. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/client/test_roots.py +0 -0
  509. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/client/test_sampling.py +0 -0
  510. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/client/test_sse.py +0 -0
  511. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/client/test_stdio.py +0 -0
  512. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/client/test_streamable_http.py +0 -0
  513. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/client/transports/__init__.py +0 -0
  514. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/client/transports/test_uv_transport.py +0 -0
  515. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/conftest.py +0 -0
  516. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/contrib/__init__.py +0 -0
  517. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/contrib/test_bulk_tool_caller.py +0 -0
  518. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/contrib/test_component_manager.py +0 -0
  519. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/contrib/test_mcp_mixin.py +0 -0
  520. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/deprecated/__init__.py +0 -0
  521. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/deprecated/test_bearer_auth_provider.py +0 -0
  522. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/deprecated/test_dependencies.py +0 -0
  523. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/deprecated/test_deprecated.py +0 -0
  524. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/deprecated/test_mount_import_arg_order.py +0 -0
  525. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/deprecated/test_mount_separators.py +0 -0
  526. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/deprecated/test_output_schema_false.py +0 -0
  527. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/deprecated/test_proxy_client.py +0 -0
  528. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/deprecated/test_resource_prefixes.py +0 -0
  529. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/deprecated/test_route_type_ignore.py +0 -0
  530. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/deprecated/test_settings.py +0 -0
  531. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/README.md +0 -0
  532. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/__init__.py +0 -0
  533. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/README.md +0 -0
  534. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/__init__.py +0 -0
  535. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/conftest.py +0 -0
  536. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/server/__init__.py +0 -0
  537. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/server/openapi/__init__.py +0 -0
  538. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/server/openapi/test_comprehensive.py +0 -0
  539. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/server/openapi/test_deepobject_style.py +0 -0
  540. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/server/openapi/test_end_to_end_compatibility.py +0 -0
  541. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/server/openapi/test_openapi_features.py +0 -0
  542. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/server/openapi/test_parameter_collisions.py +0 -0
  543. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/server/openapi/test_server.py +0 -0
  544. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/utilities/__init__.py +0 -0
  545. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/utilities/openapi/__init__.py +0 -0
  546. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/utilities/openapi/conftest.py +0 -0
  547. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/utilities/openapi/test_allof_requestbody.py +0 -0
  548. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/utilities/openapi/test_direct_array_schemas.py +0 -0
  549. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/utilities/openapi/test_director.py +0 -0
  550. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/utilities/openapi/test_legacy_compatibility.py +0 -0
  551. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/utilities/openapi/test_models.py +0 -0
  552. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/utilities/openapi/test_nullable_fields.py +0 -0
  553. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/utilities/openapi/test_parser.py +0 -0
  554. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/utilities/openapi/test_schemas.py +0 -0
  555. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/utilities/openapi/test_transitive_references.py +0 -0
  556. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/experimental/sampling/test_openai_handler.py +0 -0
  557. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/integration_tests/__init__.py +0 -0
  558. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/integration_tests/auth/__init__.py +0 -0
  559. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/integration_tests/conftest.py +0 -0
  560. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/integration_tests/test_github_mcp_remote.py +0 -0
  561. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/prompts/__init__.py +0 -0
  562. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/prompts/test_prompt.py +0 -0
  563. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/prompts/test_prompt_manager.py +0 -0
  564. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/resources/__init__.py +0 -0
  565. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/resources/test_file_resources.py +0 -0
  566. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/resources/test_function_resources.py +0 -0
  567. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/resources/test_resource_manager.py +0 -0
  568. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/resources/test_resource_template.py +0 -0
  569. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/resources/test_resource_template_meta.py +0 -0
  570. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/resources/test_resources.py +0 -0
  571. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/__init__.py +0 -0
  572. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/auth/__init__.py +0 -0
  573. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/auth/providers/__init__.py +0 -0
  574. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/auth/providers/test_descope.py +0 -0
  575. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/auth/providers/test_introspection.py +0 -0
  576. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/auth/providers/test_scalekit.py +0 -0
  577. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/auth/providers/test_supabase.py +0 -0
  578. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/auth/test_auth_provider.py +0 -0
  579. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/auth/test_jwt_provider.py +0 -0
  580. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/auth/test_oauth_mounting.py +0 -0
  581. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/auth/test_redirect_validation.py +0 -0
  582. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/auth/test_remote_auth_provider.py +0 -0
  583. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/auth/test_static_token_verifier.py +0 -0
  584. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/http/__init__.py +0 -0
  585. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/http/test_bearer_auth_backend.py +0 -0
  586. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/http/test_custom_routes.py +0 -0
  587. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/http/test_http_auth_middleware.py +0 -0
  588. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/http/test_http_dependencies.py +0 -0
  589. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/http/test_http_middleware.py +0 -0
  590. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/middleware/__init__.py +0 -0
  591. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/middleware/test_caching.py +0 -0
  592. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/middleware/test_error_handling.py +0 -0
  593. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/middleware/test_initialization_middleware.py +0 -0
  594. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/middleware/test_logging.py +0 -0
  595. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/middleware/test_middleware.py +0 -0
  596. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/middleware/test_rate_limiting.py +0 -0
  597. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/middleware/test_timing.py +0 -0
  598. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/openapi/__init__.py +0 -0
  599. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/openapi/conftest.py +0 -0
  600. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/openapi/test_advanced_behavior.py +0 -0
  601. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/openapi/test_basic_functionality.py +0 -0
  602. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/openapi/test_configuration.py +0 -0
  603. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/openapi/test_deepobject_style.py +0 -0
  604. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/openapi/test_description_propagation.py +0 -0
  605. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/openapi/test_explode_integration.py +0 -0
  606. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/openapi/test_openapi_compatibility.py +0 -0
  607. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/openapi/test_openapi_path_parameters.py +0 -0
  608. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/openapi/test_optional_parameters.py +0 -0
  609. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/openapi/test_parameter_collisions.py +0 -0
  610. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/openapi/test_route_map_fn.py +0 -0
  611. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/proxy/__init__.py +0 -0
  612. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/proxy/test_proxy_client.py +0 -0
  613. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/proxy/test_proxy_server.py +0 -0
  614. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/proxy/test_stateful_proxy_client.py +0 -0
  615. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/test_app_state.py +0 -0
  616. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/test_auth_integration.py +0 -0
  617. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/test_context.py +0 -0
  618. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/test_experimental_openapi_feature_flag.py +0 -0
  619. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/test_file_server.py +0 -0
  620. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/test_icons.py +0 -0
  621. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/test_import_server.py +0 -0
  622. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/test_input_validation.py +0 -0
  623. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/test_log_level.py +0 -0
  624. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/test_logging.py +0 -0
  625. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/test_mount.py +0 -0
  626. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/test_resource_prefix_formats.py +0 -0
  627. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/test_run_server.py +0 -0
  628. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/test_server_interactions.py +0 -0
  629. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/test_server_lifespan.py +0 -0
  630. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/test_streamable_http_no_redirect.py +0 -0
  631. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/test_tool_annotations.py +0 -0
  632. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/test_tool_exclude_args.py +0 -0
  633. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/server/test_tool_transformation.py +0 -0
  634. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/test_examples.py +0 -0
  635. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/test_mcp_config.py +0 -0
  636. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/tools/__init__.py +0 -0
  637. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/tools/test_tool.py +0 -0
  638. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/tools/test_tool_future_annotations.py +0 -0
  639. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/tools/test_tool_manager.py +0 -0
  640. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/tools/test_tool_transform.py +0 -0
  641. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/utilities/__init__.py +0 -0
  642. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/utilities/openapi/__init__.py +0 -0
  643. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/utilities/openapi/conftest.py +0 -0
  644. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/utilities/openapi/test_nullable_fields.py +0 -0
  645. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/utilities/openapi/test_openapi.py +0 -0
  646. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/utilities/openapi/test_openapi_advanced.py +0 -0
  647. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/utilities/openapi/test_openapi_fastapi.py +0 -0
  648. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/utilities/openapi/test_openapi_output_schemas.py +0 -0
  649. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/utilities/test_cli.py +0 -0
  650. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/utilities/test_components.py +0 -0
  651. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/utilities/test_inspect.py +0 -0
  652. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/utilities/test_json_schema.py +0 -0
  653. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/utilities/test_json_schema_type.py +0 -0
  654. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/utilities/test_logging.py +0 -0
  655. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/utilities/test_tests.py +0 -0
  656. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/tests/utilities/test_typeadapter.py +0 -0
  657. {fastmcp-2.13.0rc2 → fastmcp-2.13.0rc3}/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",
@@ -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.0rc3
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)
@@ -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,10 +19,6 @@
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
23
  "options": ["copy", "view"]
28
24
  },
@@ -240,7 +236,8 @@
240
236
  "patterns/tool-transformation",
241
237
  "patterns/decorating-methods",
242
238
  "patterns/cli",
243
- "patterns/contrib"
239
+ "patterns/contrib",
240
+ "patterns/testing"
244
241
  ]
245
242
  },
246
243
  {
@@ -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.
@@ -205,6 +205,48 @@ When you run the client for the first time:
205
205
  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.
206
206
  </Info>
207
207
 
208
+ ## Production Configuration
209
+
210
+ <VersionBadge version="2.13.0" />
211
+
212
+ For production deployments with persistent token management across server restarts, configure `jwt_signing_key` and `client_storage`:
213
+
214
+ ```python server.py
215
+ import os
216
+ from fastmcp import FastMCP
217
+ from fastmcp.server.auth.providers.azure import AzureProvider
218
+ from key_value.aio.stores.redis import RedisStore
219
+ from key_value.aio.wrappers.encryption import FernetEncryptionWrapper
220
+ from cryptography.fernet import Fernet
221
+
222
+ # Production setup with encrypted persistent token storage
223
+ auth_provider = AzureProvider(
224
+ client_id="835f09b6-0f0f-40cc-85cb-f32c5829a149",
225
+ client_secret="your-client-secret",
226
+ tenant_id="08541b6e-646d-43de-a0eb-834e6713d6d5",
227
+ base_url="https://your-production-domain.com",
228
+ required_scopes=["your-scope"],
229
+
230
+ # Production token management
231
+ jwt_signing_key=os.environ["JWT_SIGNING_KEY"],
232
+ client_storage=FernetEncryptionWrapper(
233
+ key_value=RedisStore(
234
+ host=os.environ["REDIS_HOST"],
235
+ port=int(os.environ["REDIS_PORT"])
236
+ ),
237
+ fernet=Fernet(os.environ["STORAGE_ENCRYPTION_KEY"])
238
+ )
239
+ )
240
+
241
+ mcp = FastMCP(name="Production Azure App", auth=auth_provider)
242
+ ```
243
+
244
+ <Note>
245
+ 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.
246
+
247
+ For complete details on these parameters, see the [OAuth Proxy documentation](/servers/auth/oauth-proxy#configuration-parameters).
248
+ </Note>
249
+
208
250
  ## Environment Variables
209
251
 
210
252
  <VersionBadge version="2.12.1" />
@@ -135,6 +135,46 @@ When you run the client for the first time:
135
135
  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.
136
136
  </Info>
137
137
 
138
+ ## Production Configuration
139
+
140
+ <VersionBadge version="2.13.0" />
141
+
142
+ For production deployments with persistent token management across server restarts, configure `jwt_signing_key` and `client_storage`:
143
+
144
+ ```python server.py
145
+ import os
146
+ from fastmcp import FastMCP
147
+ from fastmcp.server.auth.providers.github import GitHubProvider
148
+ from key_value.aio.stores.redis import RedisStore
149
+ from key_value.aio.wrappers.encryption import FernetEncryptionWrapper
150
+ from cryptography.fernet import Fernet
151
+
152
+ # Production setup with encrypted persistent token storage
153
+ auth_provider = GitHubProvider(
154
+ client_id="Ov23liAbcDefGhiJkLmN",
155
+ client_secret="github_pat_...",
156
+ base_url="https://your-production-domain.com",
157
+
158
+ # Production token management
159
+ jwt_signing_key=os.environ["JWT_SIGNING_KEY"],
160
+ client_storage=FernetEncryptionWrapper(
161
+ key_value=RedisStore(
162
+ host=os.environ["REDIS_HOST"],
163
+ port=int(os.environ["REDIS_PORT"])
164
+ ),
165
+ fernet=Fernet(os.environ["STORAGE_ENCRYPTION_KEY"])
166
+ )
167
+ )
168
+
169
+ mcp = FastMCP(name="Production GitHub App", auth=auth_provider)
170
+ ```
171
+
172
+ <Note>
173
+ 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.
174
+
175
+ For complete details on these parameters, see the [OAuth Proxy documentation](/servers/auth/oauth-proxy#configuration-parameters).
176
+ </Note>
177
+
138
178
  ## Environment Variables
139
179
 
140
180
  <VersionBadge version="2.12.1" />
@@ -148,6 +148,47 @@ When you run the client for the first time:
148
148
  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.
149
149
  </Info>
150
150
 
151
+ ## Production Configuration
152
+
153
+ <VersionBadge version="2.13.0" />
154
+
155
+ For production deployments with persistent token management across server restarts, configure `jwt_signing_key` and `client_storage`:
156
+
157
+ ```python server.py
158
+ import os
159
+ from fastmcp import FastMCP
160
+ from fastmcp.server.auth.providers.google import GoogleProvider
161
+ from key_value.aio.stores.redis import RedisStore
162
+ from key_value.aio.wrappers.encryption import FernetEncryptionWrapper
163
+ from cryptography.fernet import Fernet
164
+
165
+ # Production setup with encrypted persistent token storage
166
+ auth_provider = GoogleProvider(
167
+ client_id="123456789.apps.googleusercontent.com",
168
+ client_secret="GOCSPX-abc123...",
169
+ base_url="https://your-production-domain.com",
170
+ required_scopes=["openid", "https://www.googleapis.com/auth/userinfo.email"],
171
+
172
+ # Production token management
173
+ jwt_signing_key=os.environ["JWT_SIGNING_KEY"],
174
+ client_storage=FernetEncryptionWrapper(
175
+ key_value=RedisStore(
176
+ host=os.environ["REDIS_HOST"],
177
+ port=int(os.environ["REDIS_PORT"])
178
+ ),
179
+ fernet=Fernet(os.environ["STORAGE_ENCRYPTION_KEY"])
180
+ )
181
+ )
182
+
183
+ mcp = FastMCP(name="Production Google App", auth=auth_provider)
184
+ ```
185
+
186
+ <Note>
187
+ 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.
188
+
189
+ For complete details on these parameters, see the [OAuth Proxy documentation](/servers/auth/oauth-proxy#configuration-parameters).
190
+ </Note>
191
+
151
192
  ## Environment Variables
152
193
 
153
194
  <VersionBadge version="2.12.1" />
@@ -126,6 +126,48 @@ When you run the client for the first time:
126
126
  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.
127
127
  </Info>
128
128
 
129
+ ## Production Configuration
130
+
131
+ <VersionBadge version="2.13.0" />
132
+
133
+ For production deployments with persistent token management across server restarts, configure `jwt_signing_key`, and `client_storage`:
134
+
135
+ ```python server.py
136
+ import os
137
+ from fastmcp import FastMCP
138
+ from fastmcp.server.auth.providers.workos import WorkOSProvider
139
+ from key_value.aio.stores.redis import RedisStore
140
+ from key_value.aio.wrappers.encryption import FernetEncryptionWrapper
141
+ from cryptography.fernet import Fernet
142
+
143
+ # Production setup with encrypted persistent token storage
144
+ auth = WorkOSProvider(
145
+ client_id="client_YOUR_CLIENT_ID",
146
+ client_secret="YOUR_CLIENT_SECRET",
147
+ authkit_domain="https://your-app.authkit.app",
148
+ base_url="https://your-production-domain.com",
149
+ required_scopes=["openid", "profile", "email"],
150
+
151
+ # Production token management
152
+ jwt_signing_key=os.environ["JWT_SIGNING_KEY"],
153
+ client_storage=FernetEncryptionWrapper(
154
+ key_value=RedisStore(
155
+ host=os.environ["REDIS_HOST"],
156
+ port=int(os.environ["REDIS_PORT"])
157
+ ),
158
+ fernet=Fernet(os.environ["STORAGE_ENCRYPTION_KEY"])
159
+ )
160
+ )
161
+
162
+ mcp = FastMCP(name="Production WorkOS App", auth=auth)
163
+ ```
164
+
165
+ <Note>
166
+ 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.
167
+
168
+ For complete details on these parameters, see the [OAuth Proxy documentation](/servers/auth/oauth-proxy#configuration-parameters).
169
+ </Note>
170
+
129
171
  ## Environment Variables
130
172
 
131
173
  <VersionBadge version="2.12.1" />