fastmcp 2.13.0rc1__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.0rc1 → fastmcp-2.13.0rc3}/.github/workflows/martian-issue-triage.yml +5 -4
  2. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/.github/workflows/marvin-dedupe-issues.yml +1 -1
  3. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/.github/workflows/marvin-label-triage.yml +1 -1
  4. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/AGENTS.md +2 -2
  5. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/PKG-INFO +5 -5
  6. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/README.md +1 -2
  7. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/changelog.mdx +15 -0
  8. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/clients/elicitation.mdx +0 -1
  9. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/clients/sampling.mdx +3 -48
  10. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/deployment/http.mdx +85 -16
  11. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/development/tests.mdx +4 -0
  12. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/development/upgrade-guide.mdx +14 -8
  13. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/docs.json +19 -21
  14. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/getting-started/welcome.mdx +0 -1
  15. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/auth0.mdx +42 -0
  16. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/aws-cognito.mdx +52 -13
  17. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/azure.mdx +42 -0
  18. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/fastapi.mdx +6 -0
  19. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/github.mdx +40 -0
  20. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/google.mdx +41 -0
  21. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/workos.mdx +42 -0
  22. fastmcp-2.13.0rc3/docs/patterns/testing.mdx +85 -0
  23. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-auth-oauth.mdx +12 -12
  24. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-oauth_callback.mdx +13 -6
  25. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-transports.mdx +7 -7
  26. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-jwt_issuer.mdx +4 -4
  27. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-oauth_proxy.mdx +24 -21
  28. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-oidc_proxy.mdx +2 -2
  29. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-aws.mdx +1 -1
  30. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-azure.mdx +1 -1
  31. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-workos.mdx +3 -3
  32. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-context.mdx +28 -28
  33. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-http.mdx +8 -8
  34. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-middleware-error_handling.mdx +5 -5
  35. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-cli.mdx +3 -3
  36. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-tests.mdx +25 -4
  37. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-ui.mdx +9 -8
  38. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/servers/auth/authentication.mdx +0 -1
  39. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/servers/auth/full-oauth-server.mdx +1 -1
  40. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/servers/auth/oauth-proxy.mdx +68 -27
  41. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/servers/auth/oidc-proxy.mdx +47 -4
  42. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/servers/auth/token-verification.mdx +0 -1
  43. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/servers/composition.mdx +1 -1
  44. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/servers/context.mdx +30 -5
  45. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/servers/elicitation.mdx +0 -1
  46. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/servers/icons.mdx +1 -0
  47. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/servers/middleware.mdx +67 -4
  48. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/servers/sampling.mdx +85 -6
  49. fastmcp-2.13.0rc3/docs/servers/storage-backends.mdx +271 -0
  50. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/servers/tools.mdx +1 -1
  51. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/updates.mdx +10 -0
  52. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/auth/github_oauth/server.py +1 -10
  53. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/memory.py +3 -3
  54. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/smart_home/src/smart_home/hub.py +3 -8
  55. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/smart_home/src/smart_home/lights/hue_utils.py +1 -1
  56. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/smart_home/src/smart_home/settings.py +2 -2
  57. fastmcp-2.13.0rc3/logo.py +25 -0
  58. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/pyproject.toml +4 -2
  59. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/cli/cli.py +1 -0
  60. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/cli/install/claude_code.py +3 -3
  61. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/client/oauth_callback.py +6 -2
  62. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/client/transports.py +1 -0
  63. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/resources/types.py +30 -24
  64. fastmcp-2.13.0rc3/src/fastmcp/server/auth/handlers/authorize.py +324 -0
  65. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/jwt_issuer.py +39 -92
  66. fastmcp-2.13.0rc3/src/fastmcp/server/auth/middleware.py +96 -0
  67. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/oauth_proxy.py +238 -228
  68. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/oidc_proxy.py +16 -1
  69. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/auth0.py +30 -17
  70. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/aws.py +17 -2
  71. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/azure.py +69 -31
  72. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/github.py +17 -2
  73. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/google.py +18 -3
  74. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/workos.py +17 -2
  75. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/context.py +33 -2
  76. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/http.py +6 -3
  77. fastmcp-2.13.0rc3/src/fastmcp/server/middleware/tool_injection.py +116 -0
  78. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/server.py +47 -26
  79. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/settings.py +2 -1
  80. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/tools/tool_manager.py +8 -4
  81. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/cli.py +62 -22
  82. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/ui.py +126 -6
  83. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/server/openapi/test_openapi_performance.py +1 -0
  84. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/server/openapi/test_performance_comparison.py +0 -6
  85. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/integration_tests/auth/test_github_provider_integration.py +2 -0
  86. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/auth/providers/test_auth0.py +7 -0
  87. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/auth/providers/test_aws.py +6 -0
  88. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/auth/providers/test_azure.py +44 -25
  89. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/auth/providers/test_github.py +7 -0
  90. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/auth/providers/test_google.py +5 -0
  91. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/auth/providers/test_workos.py +7 -0
  92. fastmcp-2.13.0rc3/tests/server/auth/test_enhanced_error_responses.py +364 -0
  93. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/auth/test_jwt_issuer.py +36 -103
  94. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/auth/test_oauth_consent_flow.py +5 -0
  95. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/auth/test_oauth_proxy.py +18 -0
  96. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/auth/test_oauth_proxy_redirect_validation.py +5 -0
  97. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/auth/test_oauth_proxy_storage.py +12 -9
  98. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/auth/test_oidc_proxy.py +6 -0
  99. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/http/test_http_auth_middleware.py +29 -16
  100. fastmcp-2.13.0rc3/tests/server/middleware/test_tool_injection.py +498 -0
  101. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/test_server.py +48 -0
  102. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/uv.lock +130 -10
  103. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/.ccignore +0 -0
  104. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/.cursor/rules/core-mcp-objects.mdc +0 -0
  105. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/.cursor/worktrees.json +0 -0
  106. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/.github/ISSUE_TEMPLATE/bug.yml +0 -0
  107. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  108. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/.github/ISSUE_TEMPLATE/enhancement.yml +0 -0
  109. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/.github/copilot-instructions.md +0 -0
  110. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/.github/dependabot.yml +0 -0
  111. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/.github/pull_request_template.md +0 -0
  112. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/.github/release.yml +0 -0
  113. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/.github/workflows/auto-close-duplicates.yml +0 -0
  114. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/.github/workflows/auto-close-needs-mre.yml +0 -0
  115. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/.github/workflows/marvin.yml +0 -0
  116. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/.github/workflows/publish.yml +0 -0
  117. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/.github/workflows/run-static.yml +0 -0
  118. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/.github/workflows/run-tests.yml +0 -0
  119. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/.github/workflows/update-config-schema.yml +0 -0
  120. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/.github/workflows/update-sdk-docs.yml +0 -0
  121. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/.gitignore +0 -0
  122. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/.pre-commit-config.yaml +0 -0
  123. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/CLAUDE.md +0 -0
  124. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/CODE_OF_CONDUCT.md +0 -0
  125. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/LICENSE +0 -0
  126. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/SECURITY.md +0 -0
  127. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/.ccignore +0 -0
  128. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/.cursor/rules/mintlify.mdc +0 -0
  129. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/assets/brand/blue-logo.png +0 -0
  130. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/assets/brand/f-watercolor-waves-dark.png +0 -0
  131. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/assets/brand/f-watercolor-waves.png +0 -0
  132. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/assets/brand/favicon.svg +0 -0
  133. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/assets/brand/thumbnail-background.png +0 -0
  134. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/assets/brand/wordmark-padded.png +0 -0
  135. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/assets/brand/wordmark-watercolor-rainbow-dark.png +0 -0
  136. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/assets/brand/wordmark-watercolor-rainbow.png +0 -0
  137. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/assets/brand/wordmark-watercolor-waves-dark.png +0 -0
  138. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/assets/brand/wordmark-watercolor-waves.png +0 -0
  139. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/assets/brand/wordmark-white-padded.png +0 -0
  140. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/assets/brand/wordmark-white.png +0 -0
  141. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/assets/brand/wordmark.png +0 -0
  142. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/assets/images/fastmcp_cloud/connect.png +0 -0
  143. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/assets/images/fastmcp_cloud/create_project.png +0 -0
  144. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/assets/images/fastmcp_cloud/deployment.png +0 -0
  145. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/assets/images/fastmcp_cloud/quickstart.png +0 -0
  146. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/assets/images/oauth-proxy-consent-screen.png +0 -0
  147. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/assets/images/tutorial-rest-api-result.png +0 -0
  148. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/assets/schemas/mcp_server_config/latest.json +0 -0
  149. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/assets/schemas/mcp_server_config/v1.json +0 -0
  150. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/assets/updates/release-2-7.png +0 -0
  151. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/clients/auth/bearer.mdx +0 -0
  152. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/clients/auth/oauth.mdx +0 -0
  153. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/clients/client.mdx +0 -0
  154. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/clients/logging.mdx +0 -0
  155. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/clients/messages.mdx +0 -0
  156. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/clients/progress.mdx +0 -0
  157. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/clients/prompts.mdx +0 -0
  158. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/clients/resources.mdx +0 -0
  159. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/clients/roots.mdx +0 -0
  160. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/clients/tools.mdx +0 -0
  161. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/clients/transports.mdx +0 -0
  162. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/community/README.md +0 -0
  163. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/community/showcase.mdx +0 -0
  164. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/css/banner.css +0 -0
  165. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/css/python-sdk.css +0 -0
  166. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/css/style.css +0 -0
  167. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/css/version-badge.css +0 -0
  168. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/deployment/fastmcp-cloud.mdx +0 -0
  169. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/deployment/running-server.mdx +0 -0
  170. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/deployment/server-configuration.mdx +0 -0
  171. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/development/contributing.mdx +0 -0
  172. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/development/releases.mdx +0 -0
  173. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/getting-started/installation.mdx +0 -0
  174. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/getting-started/quickstart.mdx +0 -0
  175. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/anthropic.mdx +0 -0
  176. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/authkit.mdx +0 -0
  177. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/chatgpt.mdx +0 -0
  178. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/claude-code.mdx +0 -0
  179. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/claude-desktop.mdx +0 -0
  180. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/cursor-install-mcp.png +0 -0
  181. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/cursor.mdx +0 -0
  182. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/descope.mdx +0 -0
  183. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/eunomia-authorization.mdx +0 -0
  184. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/gemini-cli.mdx +0 -0
  185. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/gemini.mdx +0 -0
  186. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/images/authkit/enable_dcr.png +0 -0
  187. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/images/permit/abac_condition_example.png +0 -0
  188. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/images/permit/abac_policy_example.png +0 -0
  189. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/images/permit/policy_mapping.png +0 -0
  190. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/images/permit/role_assignement.png +0 -0
  191. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/mcp-json-configuration.mdx +0 -0
  192. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/openai.mdx +0 -0
  193. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/openapi.mdx +0 -0
  194. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/permit.mdx +0 -0
  195. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/integrations/scalekit.mdx +0 -0
  196. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/patterns/cli.mdx +0 -0
  197. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/patterns/contrib.mdx +0 -0
  198. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/patterns/decorating-methods.mdx +0 -0
  199. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/patterns/tool-transformation.mdx +0 -0
  200. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/public/schemas/fastmcp.json/latest.json +0 -0
  201. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/public/schemas/fastmcp.json/v1.json +0 -0
  202. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-cli-__init__.mdx +0 -0
  203. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-cli-cli.mdx +0 -0
  204. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-cli-install-__init__.mdx +0 -0
  205. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-cli-install-claude_code.mdx +0 -0
  206. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-cli-install-claude_desktop.mdx +0 -0
  207. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-cli-install-cursor.mdx +0 -0
  208. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-cli-install-gemini_cli.mdx +0 -0
  209. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-cli-install-mcp_json.mdx +0 -0
  210. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-cli-install-shared.mdx +0 -0
  211. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-cli-run.mdx +0 -0
  212. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-__init__.mdx +0 -0
  213. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-auth-__init__.mdx +0 -0
  214. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-auth-bearer.mdx +0 -0
  215. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-client.mdx +0 -0
  216. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-elicitation.mdx +0 -0
  217. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-logging.mdx +0 -0
  218. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-messages.mdx +0 -0
  219. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-progress.mdx +0 -0
  220. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-roots.mdx +0 -0
  221. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-client-sampling.mdx +0 -0
  222. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-exceptions.mdx +0 -0
  223. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-mcp_config.mdx +0 -0
  224. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-prompts-__init__.mdx +0 -0
  225. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-prompts-prompt.mdx +0 -0
  226. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-prompts-prompt_manager.mdx +0 -0
  227. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-resources-__init__.mdx +0 -0
  228. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-resources-resource.mdx +0 -0
  229. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-resources-resource_manager.mdx +0 -0
  230. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-resources-template.mdx +0 -0
  231. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-resources-types.mdx +0 -0
  232. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-__init__.mdx +0 -0
  233. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-__init__.mdx +0 -0
  234. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-auth.mdx +0 -0
  235. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-__init__.mdx +0 -0
  236. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-auth0.mdx +0 -0
  237. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-bearer.mdx +0 -0
  238. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-descope.mdx +0 -0
  239. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-github.mdx +0 -0
  240. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-google.mdx +0 -0
  241. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-in_memory.mdx +0 -0
  242. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-introspection.mdx +0 -0
  243. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-jwt.mdx +0 -0
  244. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-scalekit.mdx +0 -0
  245. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-providers-supabase.mdx +0 -0
  246. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-auth-redirect_validation.mdx +0 -0
  247. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-dependencies.mdx +0 -0
  248. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-elicitation.mdx +0 -0
  249. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-low_level.mdx +0 -0
  250. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-middleware-__init__.mdx +0 -0
  251. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-middleware-caching.mdx +0 -0
  252. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-middleware-logging.mdx +0 -0
  253. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-middleware-middleware.mdx +0 -0
  254. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-middleware-rate_limiting.mdx +0 -0
  255. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-middleware-timing.mdx +0 -0
  256. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-openapi.mdx +0 -0
  257. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-proxy.mdx +0 -0
  258. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-server-server.mdx +0 -0
  259. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-settings.mdx +0 -0
  260. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-tools-__init__.mdx +0 -0
  261. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-tools-tool.mdx +0 -0
  262. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-tools-tool_manager.mdx +0 -0
  263. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-tools-tool_transform.mdx +0 -0
  264. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-__init__.mdx +0 -0
  265. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-auth.mdx +0 -0
  266. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-components.mdx +0 -0
  267. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-exceptions.mdx +0 -0
  268. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-http.mdx +0 -0
  269. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-inspect.mdx +0 -0
  270. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-json_schema.mdx +0 -0
  271. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-json_schema_type.mdx +0 -0
  272. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-logging.mdx +0 -0
  273. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-mcp_config.mdx +0 -0
  274. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-mcp_server_config-__init__.mdx +0 -0
  275. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-__init__.mdx +0 -0
  276. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-environments-__init__.mdx +0 -0
  277. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-environments-base.mdx +0 -0
  278. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-environments-uv.mdx +0 -0
  279. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-mcp_server_config.mdx +0 -0
  280. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-sources-__init__.mdx +0 -0
  281. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-sources-base.mdx +0 -0
  282. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-sources-filesystem.mdx +0 -0
  283. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-openapi.mdx +0 -0
  284. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/python-sdk/fastmcp-utilities-types.mdx +0 -0
  285. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/servers/auth/remote-oauth.mdx +0 -0
  286. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/servers/logging.mdx +0 -0
  287. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/servers/progress.mdx +0 -0
  288. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/servers/prompts.mdx +0 -0
  289. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/servers/proxy.mdx +0 -0
  290. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/servers/resources.mdx +0 -0
  291. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/servers/server.mdx +0 -0
  292. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/snippets/local-focus.mdx +0 -0
  293. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/snippets/version-badge.mdx +0 -0
  294. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/snippets/youtube-embed.mdx +0 -0
  295. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/tutorials/create-mcp-server.mdx +0 -0
  296. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/tutorials/mcp.mdx +0 -0
  297. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/docs/tutorials/rest-api.mdx +0 -0
  298. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/atproto_mcp/README.md +0 -0
  299. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/atproto_mcp/demo.py +0 -0
  300. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/atproto_mcp/fastmcp.json +0 -0
  301. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/atproto_mcp/pyproject.toml +0 -0
  302. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/atproto_mcp/src/atproto_mcp/__init__.py +0 -0
  303. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/atproto_mcp/src/atproto_mcp/__main__.py +0 -0
  304. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/atproto_mcp/src/atproto_mcp/_atproto/__init__.py +0 -0
  305. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/atproto_mcp/src/atproto_mcp/_atproto/_client.py +0 -0
  306. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/atproto_mcp/src/atproto_mcp/_atproto/_posts.py +0 -0
  307. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/atproto_mcp/src/atproto_mcp/_atproto/_profile.py +0 -0
  308. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/atproto_mcp/src/atproto_mcp/_atproto/_read.py +0 -0
  309. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/atproto_mcp/src/atproto_mcp/_atproto/_social.py +0 -0
  310. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/atproto_mcp/src/atproto_mcp/py.typed +0 -0
  311. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/atproto_mcp/src/atproto_mcp/server.py +0 -0
  312. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/atproto_mcp/src/atproto_mcp/settings.py +0 -0
  313. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/atproto_mcp/src/atproto_mcp/types.py +0 -0
  314. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/auth/authkit_dcr/README.md +0 -0
  315. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/auth/authkit_dcr/client.py +0 -0
  316. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/auth/authkit_dcr/server.py +0 -0
  317. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/auth/aws_oauth/README.md +0 -0
  318. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/auth/aws_oauth/client.py +0 -0
  319. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/auth/aws_oauth/requirements.txt +0 -0
  320. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/auth/aws_oauth/server.py +0 -0
  321. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/auth/azure_oauth/README.md +0 -0
  322. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/auth/azure_oauth/client.py +0 -0
  323. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/auth/azure_oauth/server.py +0 -0
  324. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/auth/github_oauth/README.md +0 -0
  325. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/auth/github_oauth/client.py +0 -0
  326. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/auth/google_oauth/README.md +0 -0
  327. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/auth/google_oauth/client.py +0 -0
  328. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/auth/google_oauth/server.py +0 -0
  329. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/auth/scalekit_oauth/README.md +0 -0
  330. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/auth/scalekit_oauth/client.py +0 -0
  331. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/auth/scalekit_oauth/server.py +0 -0
  332. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/auth/workos_oauth/README.md +0 -0
  333. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/auth/workos_oauth/client.py +0 -0
  334. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/auth/workos_oauth/server.py +0 -0
  335. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/complex_inputs.py +0 -0
  336. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/config_server.py +0 -0
  337. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/desktop.py +0 -0
  338. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/echo.py +0 -0
  339. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/fastmcp_config/env_interpolation_example.json +0 -0
  340. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/fastmcp_config/fastmcp.json +0 -0
  341. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/fastmcp_config/full_example.fastmcp.json +0 -0
  342. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/fastmcp_config/server.py +0 -0
  343. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/fastmcp_config/simple.fastmcp.json +0 -0
  344. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/fastmcp_config_demo/README.md +0 -0
  345. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/fastmcp_config_demo/fastmcp.json +0 -0
  346. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/fastmcp_config_demo/server.py +0 -0
  347. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/get_file.py +0 -0
  348. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/in_memory_proxy_example.py +0 -0
  349. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/memory.fastmcp.json +0 -0
  350. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/mount_example.fastmcp.json +0 -0
  351. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/mount_example.py +0 -0
  352. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/sampling.py +0 -0
  353. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/sampling_fallback.py +0 -0
  354. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/screenshot.fastmcp.json +0 -0
  355. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/screenshot.py +0 -0
  356. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/serializer.py +0 -0
  357. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/simple_echo.py +0 -0
  358. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/smart_home/README.md +0 -0
  359. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/smart_home/hub.fastmcp.json +0 -0
  360. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/smart_home/lights.fastmcp.json +0 -0
  361. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/smart_home/pyproject.toml +0 -0
  362. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/smart_home/src/smart_home/__init__.py +0 -0
  363. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/smart_home/src/smart_home/__main__.py +0 -0
  364. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/smart_home/src/smart_home/lights/__init__.py +0 -0
  365. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/smart_home/src/smart_home/lights/server.py +0 -0
  366. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/smart_home/src/smart_home/py.typed +0 -0
  367. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/tags_example.py +0 -0
  368. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/examples/text_me.py +0 -0
  369. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/justfile +0 -0
  370. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/scripts/auto_close_duplicates.py +0 -0
  371. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/scripts/auto_close_needs_mre.py +0 -0
  372. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/__init__.py +0 -0
  373. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/cli/__init__.py +0 -0
  374. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/cli/install/__init__.py +0 -0
  375. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/cli/install/claude_desktop.py +0 -0
  376. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/cli/install/cursor.py +0 -0
  377. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/cli/install/gemini_cli.py +0 -0
  378. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/cli/install/mcp_json.py +0 -0
  379. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/cli/install/shared.py +0 -0
  380. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/cli/run.py +0 -0
  381. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/client/__init__.py +0 -0
  382. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/client/auth/__init__.py +0 -0
  383. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/client/auth/bearer.py +0 -0
  384. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/client/auth/oauth.py +0 -0
  385. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/client/client.py +0 -0
  386. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/client/elicitation.py +0 -0
  387. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/client/logging.py +0 -0
  388. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/client/messages.py +0 -0
  389. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/client/progress.py +0 -0
  390. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/client/roots.py +0 -0
  391. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/client/sampling.py +0 -0
  392. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/README.md +0 -0
  393. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
  394. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
  395. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
  396. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
  397. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/component_manager/README.md +0 -0
  398. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/component_manager/__init__.py +0 -0
  399. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/component_manager/component_manager.py +0 -0
  400. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/component_manager/component_service.py +0 -0
  401. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/component_manager/example.py +0 -0
  402. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/mcp_mixin/README.md +0 -0
  403. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
  404. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/mcp_mixin/example.py +0 -0
  405. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
  406. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/exceptions.py +0 -0
  407. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/sampling/__init__.py +0 -0
  408. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/sampling/handlers/__init__.py +0 -0
  409. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/sampling/handlers/base.py +0 -0
  410. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/sampling/handlers/openai.py +0 -0
  411. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/server/openapi/README.md +0 -0
  412. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/server/openapi/__init__.py +0 -0
  413. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/server/openapi/components.py +0 -0
  414. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/server/openapi/routing.py +0 -0
  415. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/server/openapi/server.py +0 -0
  416. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/utilities/openapi/README.md +0 -0
  417. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/utilities/openapi/__init__.py +0 -0
  418. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/utilities/openapi/director.py +0 -0
  419. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/utilities/openapi/formatters.py +0 -0
  420. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/utilities/openapi/json_schema_converter.py +0 -0
  421. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/utilities/openapi/models.py +0 -0
  422. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/utilities/openapi/parser.py +0 -0
  423. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/experimental/utilities/openapi/schemas.py +0 -0
  424. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/mcp_config.py +0 -0
  425. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/prompts/__init__.py +0 -0
  426. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/prompts/prompt.py +0 -0
  427. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/prompts/prompt_manager.py +0 -0
  428. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/py.typed +0 -0
  429. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/resources/__init__.py +0 -0
  430. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/resources/resource.py +0 -0
  431. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/resources/resource_manager.py +0 -0
  432. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/resources/template.py +0 -0
  433. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/__init__.py +0 -0
  434. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/__init__.py +0 -0
  435. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/auth.py +0 -0
  436. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/__init__.py +0 -0
  437. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/bearer.py +0 -0
  438. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/descope.py +0 -0
  439. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/in_memory.py +0 -0
  440. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/introspection.py +0 -0
  441. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/jwt.py +0 -0
  442. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/scalekit.py +0 -0
  443. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/providers/supabase.py +0 -0
  444. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/auth/redirect_validation.py +0 -0
  445. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/dependencies.py +0 -0
  446. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/elicitation.py +0 -0
  447. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/low_level.py +0 -0
  448. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/middleware/__init__.py +0 -0
  449. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/middleware/caching.py +0 -0
  450. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/middleware/error_handling.py +0 -0
  451. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/middleware/logging.py +0 -0
  452. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/middleware/middleware.py +0 -0
  453. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/middleware/rate_limiting.py +0 -0
  454. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/middleware/timing.py +0 -0
  455. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/openapi.py +0 -0
  456. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/proxy.py +0 -0
  457. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/server/sampling/handler.py +0 -0
  458. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/tools/__init__.py +0 -0
  459. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/tools/tool.py +0 -0
  460. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/tools/tool_transform.py +0 -0
  461. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/__init__.py +0 -0
  462. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/auth.py +0 -0
  463. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/components.py +0 -0
  464. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/exceptions.py +0 -0
  465. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/http.py +0 -0
  466. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/inspect.py +0 -0
  467. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/json_schema.py +0 -0
  468. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/json_schema_type.py +0 -0
  469. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/logging.py +0 -0
  470. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/mcp_config.py +0 -0
  471. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
  472. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
  473. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
  474. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
  475. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
  476. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
  477. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
  478. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
  479. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
  480. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
  481. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/openapi.py +0 -0
  482. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/tests.py +0 -0
  483. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/src/fastmcp/utilities/types.py +0 -0
  484. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/__init__.py +0 -0
  485. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/cli/__init__.py +0 -0
  486. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/cli/test_cli.py +0 -0
  487. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/cli/test_config.py +0 -0
  488. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/cli/test_cursor.py +0 -0
  489. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/cli/test_install.py +0 -0
  490. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/cli/test_mcp_server_config_integration.py +0 -0
  491. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/cli/test_mcp_server_config_schema.py +0 -0
  492. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/cli/test_project_prepare.py +0 -0
  493. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/cli/test_run.py +0 -0
  494. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/cli/test_run_config.py +0 -0
  495. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/cli/test_server_args.py +0 -0
  496. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/cli/test_shared.py +0 -0
  497. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/cli/test_with_argv.py +0 -0
  498. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/client/__init__.py +0 -0
  499. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/client/auth/__init__.py +0 -0
  500. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/client/auth/test_oauth_client.py +0 -0
  501. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/client/test_client.py +0 -0
  502. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/client/test_elicitation.py +0 -0
  503. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/client/test_logs.py +0 -0
  504. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/client/test_notifications.py +0 -0
  505. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/client/test_oauth_callback_xss.py +0 -0
  506. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/client/test_openapi_experimental.py +0 -0
  507. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/client/test_openapi_legacy.py +0 -0
  508. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/client/test_progress.py +0 -0
  509. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/client/test_roots.py +0 -0
  510. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/client/test_sampling.py +0 -0
  511. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/client/test_sse.py +0 -0
  512. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/client/test_stdio.py +0 -0
  513. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/client/test_streamable_http.py +0 -0
  514. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/client/transports/__init__.py +0 -0
  515. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/client/transports/test_uv_transport.py +0 -0
  516. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/conftest.py +0 -0
  517. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/contrib/__init__.py +0 -0
  518. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/contrib/test_bulk_tool_caller.py +0 -0
  519. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/contrib/test_component_manager.py +0 -0
  520. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/contrib/test_mcp_mixin.py +0 -0
  521. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/deprecated/__init__.py +0 -0
  522. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/deprecated/test_bearer_auth_provider.py +0 -0
  523. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/deprecated/test_dependencies.py +0 -0
  524. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/deprecated/test_deprecated.py +0 -0
  525. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/deprecated/test_mount_import_arg_order.py +0 -0
  526. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/deprecated/test_mount_separators.py +0 -0
  527. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/deprecated/test_output_schema_false.py +0 -0
  528. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/deprecated/test_proxy_client.py +0 -0
  529. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/deprecated/test_resource_prefixes.py +0 -0
  530. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/deprecated/test_route_type_ignore.py +0 -0
  531. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/deprecated/test_settings.py +0 -0
  532. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/README.md +0 -0
  533. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/__init__.py +0 -0
  534. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/README.md +0 -0
  535. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/__init__.py +0 -0
  536. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/conftest.py +0 -0
  537. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/server/__init__.py +0 -0
  538. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/server/openapi/__init__.py +0 -0
  539. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/server/openapi/test_comprehensive.py +0 -0
  540. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/server/openapi/test_deepobject_style.py +0 -0
  541. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/server/openapi/test_end_to_end_compatibility.py +0 -0
  542. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/server/openapi/test_openapi_features.py +0 -0
  543. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/server/openapi/test_parameter_collisions.py +0 -0
  544. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/server/openapi/test_server.py +0 -0
  545. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/utilities/__init__.py +0 -0
  546. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/utilities/openapi/__init__.py +0 -0
  547. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/utilities/openapi/conftest.py +0 -0
  548. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/utilities/openapi/test_allof_requestbody.py +0 -0
  549. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/utilities/openapi/test_direct_array_schemas.py +0 -0
  550. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/utilities/openapi/test_director.py +0 -0
  551. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/utilities/openapi/test_legacy_compatibility.py +0 -0
  552. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/utilities/openapi/test_models.py +0 -0
  553. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/utilities/openapi/test_nullable_fields.py +0 -0
  554. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/utilities/openapi/test_parser.py +0 -0
  555. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/utilities/openapi/test_schemas.py +0 -0
  556. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/openapi_parser/utilities/openapi/test_transitive_references.py +0 -0
  557. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/experimental/sampling/test_openai_handler.py +0 -0
  558. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/integration_tests/__init__.py +0 -0
  559. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/integration_tests/auth/__init__.py +0 -0
  560. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/integration_tests/conftest.py +0 -0
  561. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/integration_tests/test_github_mcp_remote.py +0 -0
  562. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/prompts/__init__.py +0 -0
  563. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/prompts/test_prompt.py +0 -0
  564. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/prompts/test_prompt_manager.py +0 -0
  565. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/resources/__init__.py +0 -0
  566. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/resources/test_file_resources.py +0 -0
  567. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/resources/test_function_resources.py +0 -0
  568. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/resources/test_resource_manager.py +0 -0
  569. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/resources/test_resource_template.py +0 -0
  570. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/resources/test_resource_template_meta.py +0 -0
  571. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/resources/test_resources.py +0 -0
  572. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/__init__.py +0 -0
  573. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/auth/__init__.py +0 -0
  574. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/auth/providers/__init__.py +0 -0
  575. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/auth/providers/test_descope.py +0 -0
  576. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/auth/providers/test_introspection.py +0 -0
  577. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/auth/providers/test_scalekit.py +0 -0
  578. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/auth/providers/test_supabase.py +0 -0
  579. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/auth/test_auth_provider.py +0 -0
  580. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/auth/test_jwt_provider.py +0 -0
  581. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/auth/test_oauth_mounting.py +0 -0
  582. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/auth/test_redirect_validation.py +0 -0
  583. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/auth/test_remote_auth_provider.py +0 -0
  584. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/auth/test_static_token_verifier.py +0 -0
  585. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/http/__init__.py +0 -0
  586. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/http/test_bearer_auth_backend.py +0 -0
  587. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/http/test_custom_routes.py +0 -0
  588. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/http/test_http_dependencies.py +0 -0
  589. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/http/test_http_middleware.py +0 -0
  590. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/middleware/__init__.py +0 -0
  591. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/middleware/test_caching.py +0 -0
  592. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/middleware/test_error_handling.py +0 -0
  593. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/middleware/test_initialization_middleware.py +0 -0
  594. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/middleware/test_logging.py +0 -0
  595. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/middleware/test_middleware.py +0 -0
  596. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/middleware/test_rate_limiting.py +0 -0
  597. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/middleware/test_timing.py +0 -0
  598. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/openapi/__init__.py +0 -0
  599. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/openapi/conftest.py +0 -0
  600. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/openapi/test_advanced_behavior.py +0 -0
  601. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/openapi/test_basic_functionality.py +0 -0
  602. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/openapi/test_configuration.py +0 -0
  603. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/openapi/test_deepobject_style.py +0 -0
  604. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/openapi/test_description_propagation.py +0 -0
  605. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/openapi/test_explode_integration.py +0 -0
  606. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/openapi/test_openapi_compatibility.py +0 -0
  607. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/openapi/test_openapi_path_parameters.py +0 -0
  608. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/openapi/test_optional_parameters.py +0 -0
  609. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/openapi/test_parameter_collisions.py +0 -0
  610. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/openapi/test_route_map_fn.py +0 -0
  611. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/proxy/__init__.py +0 -0
  612. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/proxy/test_proxy_client.py +0 -0
  613. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/proxy/test_proxy_server.py +0 -0
  614. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/proxy/test_stateful_proxy_client.py +0 -0
  615. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/test_app_state.py +0 -0
  616. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/test_auth_integration.py +0 -0
  617. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/test_context.py +0 -0
  618. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/test_experimental_openapi_feature_flag.py +0 -0
  619. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/test_file_server.py +0 -0
  620. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/test_icons.py +0 -0
  621. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/test_import_server.py +0 -0
  622. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/test_input_validation.py +0 -0
  623. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/test_log_level.py +0 -0
  624. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/test_logging.py +0 -0
  625. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/test_mount.py +0 -0
  626. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/test_resource_prefix_formats.py +0 -0
  627. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/test_run_server.py +0 -0
  628. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/test_server_interactions.py +0 -0
  629. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/test_server_lifespan.py +0 -0
  630. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/test_streamable_http_no_redirect.py +0 -0
  631. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/test_tool_annotations.py +0 -0
  632. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/test_tool_exclude_args.py +0 -0
  633. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/server/test_tool_transformation.py +0 -0
  634. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/test_examples.py +0 -0
  635. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/test_mcp_config.py +0 -0
  636. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/tools/__init__.py +0 -0
  637. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/tools/test_tool.py +0 -0
  638. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/tools/test_tool_future_annotations.py +0 -0
  639. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/tools/test_tool_manager.py +0 -0
  640. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/tools/test_tool_transform.py +0 -0
  641. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/utilities/__init__.py +0 -0
  642. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/utilities/openapi/__init__.py +0 -0
  643. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/utilities/openapi/conftest.py +0 -0
  644. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/utilities/openapi/test_nullable_fields.py +0 -0
  645. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/utilities/openapi/test_openapi.py +0 -0
  646. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/utilities/openapi/test_openapi_advanced.py +0 -0
  647. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/utilities/openapi/test_openapi_fastapi.py +0 -0
  648. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/utilities/openapi/test_openapi_output_schemas.py +0 -0
  649. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/utilities/test_cli.py +0 -0
  650. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/utilities/test_components.py +0 -0
  651. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/utilities/test_inspect.py +0 -0
  652. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/utilities/test_json_schema.py +0 -0
  653. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/utilities/test_json_schema_type.py +0 -0
  654. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/utilities/test_logging.py +0 -0
  655. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/utilities/test_tests.py +0 -0
  656. {fastmcp-2.13.0rc1 → fastmcp-2.13.0rc3}/tests/utilities/test_typeadapter.py +0 -0
  657. {fastmcp-2.13.0rc1 → 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:
@@ -80,9 +80,9 @@ jobs:
80
80
  bot_name: "Marvin Context Protocol"
81
81
  prompt: ${{ steps.dedupe-prompt.outputs.PROMPT }}
82
82
  anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY_FOR_CI }}
83
+ allowed_non_write_users: "*"
83
84
  claude_args: |
84
85
  --allowedTools Bash(gh issue view:*),Bash(gh search:*),Bash(gh issue list:*),Bash(gh api:*),Bash(gh issue comment:*),Task
85
- --mcp-config /tmp/mcp-config/mcp-servers.json
86
86
  settings: |
87
87
  {
88
88
  "model": "claude-sonnet-4-5-20250929",
@@ -131,7 +131,7 @@ jobs:
131
131
  bot_name: "Marvin Context Protocol"
132
132
  prompt: ${{ steps.triage-prompt.outputs.PROMPT }}
133
133
  anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY_FOR_CI }}
134
- allowed_non_write_users: "*" # Required for issue triage workflow, if users without repo write access create issues
134
+ allowed_non_write_users: "*"
135
135
  claude_args: |
136
136
  --allowedTools Bash(gh label list),mcp__github__get_issue,mcp__github__get_issue_comments,mcp__github__update_issue,mcp__github__get_pull_request_files
137
137
  settings: |
@@ -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.0rc1
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)
@@ -4,6 +4,21 @@ icon: "list-check"
4
4
  rss: true
5
5
  ---
6
6
 
7
+ <Update label="v2.12.5" description="2025-10-17">
8
+
9
+ **[v2.12.5: Safety Pin](https://github.com/jlowin/fastmcp/releases/tag/v2.12.5)**
10
+
11
+ FastMCP 2.12.5 is a point release that pins the MCP SDK version below 1.17, which introduced a change affecting FastMCP users with auth providers mounted as part of a larger application. This ensures the `.well-known` payload appears in the expected location when using FastMCP authentication providers with composite applications.
12
+
13
+ ## What's Changed
14
+
15
+ ### Fixes 🐞
16
+ * Pin MCP SDK version below 1.17 by [@jlowin](https://github.com/jlowin) in [a1b2c3d](https://github.com/jlowin/fastmcp/commit/dab2b316ddc3883b7896a86da21cacb68da01e5c)
17
+
18
+ **Full Changelog**: [v2.12.4...v2.12.5](https://github.com/jlowin/fastmcp/compare/v2.12.4...v2.12.5)
19
+
20
+ </Update>
21
+
7
22
  <Update label="v2.12.4" description="2025-09-26">
8
23
 
9
24
  **[v2.12.4: OIDC What You Did There](https://github.com/jlowin/fastmcp/releases/tag/v2.12.4)**
@@ -3,7 +3,6 @@ title: User Elicitation
3
3
  sidebarTitle: Elicitation
4
4
  description: Handle server-initiated user input requests with structured schemas.
5
5
  icon: message-question
6
- tag: NEW
7
6
  ---
8
7
 
9
8
  import { VersionBadge } from "/snippets/version-badge.mdx";
@@ -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>
@@ -145,6 +145,59 @@ middleware = [
145
145
  http_app = mcp.http_app(middleware=middleware)
146
146
  ```
147
147
 
148
+ ### CORS for Browser-Based Clients
149
+
150
+ <Tip>
151
+ Most MCP clients, including those that you access through a browser like ChatGPT or Claude, don't need CORS configuration. Only enable CORS if you're working with an MCP client that connects directly from a browser, such as debugging tools or inspectors.
152
+ </Tip>
153
+
154
+ CORS (Cross-Origin Resource Sharing) is needed when JavaScript running in a web browser connects directly to your MCP server. This is different from using an LLM through a browser—in that case, the browser connects to the LLM service, and the LLM service connects to your MCP server (no CORS needed).
155
+
156
+ Browser-based MCP clients that need CORS include:
157
+
158
+ - **MCP Inspector** - Browser-based debugging tool for testing MCP servers
159
+ - **Custom browser-based MCP clients** - If you're building a web app that directly connects to MCP servers
160
+
161
+ For these scenarios, add CORS middleware with the specific headers required for MCP protocol:
162
+
163
+ ```python
164
+ from fastmcp import FastMCP
165
+ from starlette.middleware import Middleware
166
+ from starlette.middleware.cors import CORSMiddleware
167
+
168
+ mcp = FastMCP("MyServer")
169
+
170
+ # Configure CORS for browser-based clients
171
+ middleware = [
172
+ Middleware(
173
+ CORSMiddleware,
174
+ allow_origins=["*"], # Allow all origins; use specific origins for security
175
+ allow_methods=["GET", "POST", "DELETE", "OPTIONS"],
176
+ allow_headers=[
177
+ "mcp-protocol-version",
178
+ "mcp-session-id",
179
+ "Authorization",
180
+ "Content-Type",
181
+ ],
182
+ expose_headers=["mcp-session-id"],
183
+ )
184
+ ]
185
+
186
+ app = mcp.http_app(middleware=middleware)
187
+ ```
188
+
189
+ **Key configuration details:**
190
+
191
+ - **`allow_origins`**: Specify exact origins (e.g., `["http://localhost:3000"]`) rather than `["*"]` for production deployments
192
+ - **`allow_headers`**: Must include `mcp-protocol-version`, `mcp-session-id`, and `Authorization` (for authenticated servers)
193
+ - **`expose_headers`**: Must include `mcp-session-id` so JavaScript can read the session ID from responses and send it in subsequent requests
194
+
195
+ Without `expose_headers=["mcp-session-id"]`, browsers will receive the session ID but JavaScript won't be able to access it, causing session management to fail.
196
+
197
+ <Warning>
198
+ **Production Security**: Never use `allow_origins=["*"]` in production. Specify the exact origins of your browser-based clients. Using wildcards exposes your server to unauthorized access from any website.
199
+ </Warning>
200
+
148
201
  ## Integration with Web Frameworks
149
202
 
150
203
  If you already have a web application running, you can add MCP capabilities by mounting a FastMCP server as a sub-application. This allows you to expose MCP tools alongside your existing API endpoints, sharing the same domain and infrastructure. The MCP server becomes just another route in your application, making it easy to manage and deploy.
@@ -280,6 +333,14 @@ OAuth specifications (RFC 8414 and RFC 9728) require discovery metadata to be ac
280
333
  Follow the configuration instructions below to set up mounting correctly.
281
334
  </Warning>
282
335
 
336
+ <Warning>
337
+ **CORS Middleware Conflicts:**
338
+
339
+ If you're integrating FastMCP into an existing application with its own CORS middleware, be aware that layering CORS middleware can cause conflicts (such as 404 errors on `.well-known` routes or OPTIONS requests).
340
+
341
+ FastMCP and the MCP SDK already handle CORS for OAuth routes. If you need CORS on your own application routes, consider using the sub-app pattern: mount FastMCP and your routes as separate apps, each with their own middleware, rather than adding application-wide CORS middleware.
342
+ </Warning>
343
+
283
344
  ### Route Types
284
345
 
285
346
  OAuth-protected MCP servers expose two categories of routes:
@@ -484,39 +545,47 @@ MCP_AUTH_TOKEN=secret uvicorn app:app --host 0.0.0.0 --port 8000
484
545
 
485
546
  <VersionBadge version="2.13.0" />
486
547
 
487
- 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.
488
549
 
489
- **Development vs Production:**
550
+ **Default Behavior (Development Only):**
490
551
 
491
- 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.
492
555
 
493
- 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.
494
557
 
495
- 1. **Explicit JWT signing key** for signing tokens issued to clients
496
- 2. **Explicit token encryption key** for encrypting upstream OAuth tokens at rest
497
- 3. **Persistent storage** so encrypted upstream tokens survive restart
498
- 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:
499
561
 
500
- 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)
501
564
 
502
565
  **Configuration:**
503
566
 
504
- 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
505
573
 
506
- ```python {4-7}
507
574
  auth = GitHubProvider(
508
575
  client_id=os.environ["GITHUB_CLIENT_ID"],
509
576
  client_secret=os.environ["GITHUB_CLIENT_SECRET"],
510
577
  jwt_signing_key=os.environ["JWT_SIGNING_KEY"],
511
- token_encryption_key=os.environ["TOKEN_ENCRYPTION_KEY"],
512
- client_storage=RedisStore(host="redis.example.com", ...),
513
- 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
514
583
  )
515
584
  ```
516
585
 
517
- 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.
518
587
 
519
- 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).
520
589
 
521
590
  ## Testing Your Deployment
522
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
@@ -3,6 +3,7 @@ title: Upgrade Guide
3
3
  sidebarTitle: Upgrade Guide
4
4
  description: Migration instructions for upgrading between FastMCP versions
5
5
  icon: up
6
+ tag: NEW
6
7
  ---
7
8
 
8
9
  This guide provides migration instructions for breaking changes and major updates when upgrading between FastMCP versions.
@@ -17,11 +18,17 @@ The OAuth proxy now issues its own JWT tokens to clients instead of forwarding u
17
18
 
18
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.
19
20
 
20
- 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):**
21
22
 
22
- **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).
23
26
 
24
- 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:
25
32
 
26
33
  ```python
27
34
  auth = GitHubProvider(
@@ -29,16 +36,15 @@ auth = GitHubProvider(
29
36
  client_secret=os.environ["GITHUB_CLIENT_SECRET"],
30
37
  base_url="https://your-server.com",
31
38
 
32
- # Add these for production token persistence
39
+ # Explicit keys (required for production)
33
40
  jwt_signing_key=os.environ["JWT_SIGNING_KEY"],
34
- token_encryption_key=os.environ["TOKEN_ENCRYPTION_KEY"],
35
41
 
36
- client_storage=RedisStore(...) # Persistent storage
42
+ # Persistent network storage (required for production)
43
+ client_storage=RedisStore(host="redis.example.com", port=6379)
37
44
  )
38
45
  ```
39
46
 
40
- Both keys accept any secret string. Make sure they're different from each other.
41
-
42
47
  **More information:**
43
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
44
50
  - [OAuth Proxy Parameters](/servers/auth/oauth-proxy#configuration-parameters) - Parameter documentation
@@ -20,10 +20,7 @@
20
20
  "primary": "#2d00f7"
21
21
  },
22
22
  "contextual": {
23
- "options": [
24
- "copy",
25
- "view"
26
- ]
23
+ "options": ["copy", "view"]
27
24
  },
28
25
  "description": "The fast, Pythonic way to build MCP servers and clients.",
29
26
  "errors": {
@@ -107,15 +104,16 @@
107
104
  "group": "Advanced Features",
108
105
  "icon": "stars",
109
106
  "pages": [
110
- "servers/icons",
111
- "servers/context",
112
- "servers/proxy",
113
107
  "servers/composition",
108
+ "servers/context",
114
109
  "servers/elicitation",
110
+ "servers/icons",
115
111
  "servers/logging",
112
+ "servers/middleware",
116
113
  "servers/progress",
114
+ "servers/proxy",
117
115
  "servers/sampling",
118
- "servers/middleware"
116
+ "servers/storage-backends"
119
117
  ]
120
118
  },
121
119
  {
@@ -148,10 +146,7 @@
148
146
  {
149
147
  "group": "Essentials",
150
148
  "icon": "cube",
151
- "pages": [
152
- "clients/client",
153
- "clients/transports"
154
- ]
149
+ "pages": ["clients/client", "clients/transports"]
155
150
  },
156
151
  {
157
152
  "group": "Core Operations",
@@ -177,10 +172,7 @@
177
172
  {
178
173
  "group": "Authentication",
179
174
  "icon": "user-shield",
180
- "pages": [
181
- "clients/auth/oauth",
182
- "clients/auth/bearer"
183
- ]
175
+ "pages": ["clients/auth/oauth", "clients/auth/bearer"]
184
176
  }
185
177
  ]
186
178
  },
@@ -234,10 +226,7 @@
234
226
  {
235
227
  "group": "API Integration",
236
228
  "icon": "globe",
237
- "pages": [
238
- "integrations/fastapi",
239
- "integrations/openapi"
240
- ]
229
+ "pages": ["integrations/fastapi", "integrations/openapi"]
241
230
  }
242
231
  ]
243
232
  },
@@ -247,7 +236,8 @@
247
236
  "patterns/tool-transformation",
248
237
  "patterns/decorating-methods",
249
238
  "patterns/cli",
250
- "patterns/contrib"
239
+ "patterns/contrib",
240
+ "patterns/testing"
251
241
  ]
252
242
  },
253
243
  {
@@ -472,5 +462,13 @@
472
462
  "thumbnails": {
473
463
  "appearance": "light",
474
464
  "background": "/assets/brand/thumbnail-background.png"
465
+ },
466
+ "styling": {
467
+ "codeblocks": {
468
+ "theme": {
469
+ "light": "snazzy-light",
470
+ "dark": "dark-plus"
471
+ }
472
+ }
475
473
  }
476
474
  }
@@ -3,7 +3,6 @@ title: "Welcome to FastMCP 2.0!"
3
3
  sidebarTitle: "Welcome!"
4
4
  description: The fast, Pythonic way to build MCP servers and clients.
5
5
  icon: hand-wave
6
- mode: wide
7
6
  ---
8
7
  <img
9
8
  src="/assets/brand/f-watercolor-waves.png"
@@ -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>