fastmcp 2.13.0rc3__tar.gz → 2.13.0.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (660) hide show
  1. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/.github/workflows/run-tests.yml +25 -0
  2. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/PKG-INFO +1 -1
  3. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/changelog.mdx +34 -0
  4. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/docs.json +26 -12
  5. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/azure.mdx +11 -3
  6. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-cli-cli.mdx +1 -1
  7. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-resources-types.mdx +9 -9
  8. fastmcp-2.13.0.1/docs/python-sdk/fastmcp-server-auth-jwt_issuer.mdx +104 -0
  9. fastmcp-2.13.0.1/docs/python-sdk/fastmcp-server-auth-middleware.mdx +26 -0
  10. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-oauth_proxy.mdx +26 -24
  11. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-oidc_proxy.mdx +2 -2
  12. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-providers-auth0.mdx +1 -1
  13. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-providers-aws.mdx +4 -4
  14. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-providers-azure.mdx +16 -6
  15. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-providers-github.mdx +3 -3
  16. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-providers-google.mdx +3 -3
  17. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-providers-workos.mdx +6 -6
  18. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-context.mdx +68 -28
  19. fastmcp-2.13.0.1/docs/python-sdk/fastmcp-server-middleware-tool_injection.mdx +91 -0
  20. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-server.mdx +54 -54
  21. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-settings.mdx +11 -11
  22. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-tools-tool_manager.mdx +10 -10
  23. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-cli.mdx +1 -1
  24. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/updates.mdx +18 -0
  25. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/auth/azure_oauth/server.py +8 -3
  26. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/get_file.py +6 -0
  27. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/memory.py +7 -5
  28. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/pyproject.toml +23 -1
  29. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/cli/cli.py +2 -2
  30. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/client/auth/oauth.py +7 -6
  31. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/client/client.py +10 -10
  32. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/client/sampling.py +1 -1
  33. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/client/transports.py +34 -34
  34. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/contrib/component_manager/__init__.py +1 -1
  35. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/contrib/component_manager/component_manager.py +2 -2
  36. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/experimental/sampling/handlers/openai.py +2 -2
  37. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/experimental/server/openapi/__init__.py +5 -8
  38. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/experimental/server/openapi/components.py +11 -7
  39. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/experimental/utilities/openapi/__init__.py +10 -15
  40. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/experimental/utilities/openapi/director.py +1 -1
  41. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/experimental/utilities/openapi/json_schema_converter.py +2 -2
  42. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/experimental/utilities/openapi/parser.py +3 -5
  43. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/mcp_config.py +2 -3
  44. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/prompts/prompt.py +9 -13
  45. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/resources/resource.py +1 -3
  46. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/resources/resource_manager.py +1 -1
  47. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/__init__.py +1 -1
  48. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/auth.py +2 -2
  49. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/oidc_proxy.py +2 -2
  50. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/providers/azure.py +48 -25
  51. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/providers/bearer.py +1 -1
  52. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/providers/in_memory.py +2 -2
  53. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/providers/introspection.py +2 -2
  54. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/providers/jwt.py +17 -18
  55. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/providers/supabase.py +1 -1
  56. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/providers/workos.py +2 -2
  57. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/context.py +8 -10
  58. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/dependencies.py +5 -6
  59. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/http.py +2 -3
  60. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/middleware/caching.py +1 -1
  61. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/middleware/error_handling.py +8 -8
  62. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/openapi.py +10 -6
  63. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/proxy.py +5 -4
  64. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/server.py +27 -29
  65. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/tools/__init__.py +1 -1
  66. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/tools/tool.py +12 -12
  67. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/tools/tool_transform.py +6 -6
  68. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/utilities/cli.py +5 -6
  69. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/utilities/inspect.py +2 -2
  70. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/utilities/json_schema_type.py +4 -4
  71. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/utilities/logging.py +14 -18
  72. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/utilities/mcp_server_config/v1/environments/base.py +1 -2
  73. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -1
  74. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/utilities/openapi.py +9 -9
  75. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/utilities/tests.py +2 -4
  76. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/auth/providers/test_azure.py +103 -38
  77. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/utilities/test_inspect.py +4 -4
  78. fastmcp-2.13.0rc3/docs/python-sdk/fastmcp-server-auth-jwt_issuer.mdx +0 -195
  79. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/.ccignore +0 -0
  80. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/.cursor/rules/core-mcp-objects.mdc +0 -0
  81. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/.cursor/worktrees.json +0 -0
  82. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/.github/ISSUE_TEMPLATE/bug.yml +0 -0
  83. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  84. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/.github/ISSUE_TEMPLATE/enhancement.yml +0 -0
  85. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/.github/copilot-instructions.md +0 -0
  86. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/.github/dependabot.yml +0 -0
  87. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/.github/pull_request_template.md +0 -0
  88. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/.github/release.yml +0 -0
  89. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/.github/workflows/auto-close-duplicates.yml +0 -0
  90. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/.github/workflows/auto-close-needs-mre.yml +0 -0
  91. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/.github/workflows/martian-issue-triage.yml +0 -0
  92. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/.github/workflows/marvin-dedupe-issues.yml +0 -0
  93. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/.github/workflows/marvin-label-triage.yml +0 -0
  94. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/.github/workflows/marvin.yml +0 -0
  95. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/.github/workflows/publish.yml +0 -0
  96. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/.github/workflows/run-static.yml +0 -0
  97. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/.github/workflows/update-config-schema.yml +0 -0
  98. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/.github/workflows/update-sdk-docs.yml +0 -0
  99. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/.gitignore +0 -0
  100. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/.pre-commit-config.yaml +0 -0
  101. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/AGENTS.md +0 -0
  102. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/CLAUDE.md +0 -0
  103. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/CODE_OF_CONDUCT.md +0 -0
  104. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/LICENSE +0 -0
  105. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/README.md +0 -0
  106. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/SECURITY.md +0 -0
  107. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/.ccignore +0 -0
  108. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/.cursor/rules/mintlify.mdc +0 -0
  109. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/assets/brand/blue-logo.png +0 -0
  110. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/assets/brand/f-watercolor-waves-dark.png +0 -0
  111. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/assets/brand/f-watercolor-waves.png +0 -0
  112. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/assets/brand/favicon.svg +0 -0
  113. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/assets/brand/thumbnail-background.png +0 -0
  114. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/assets/brand/wordmark-padded.png +0 -0
  115. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/assets/brand/wordmark-watercolor-rainbow-dark.png +0 -0
  116. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/assets/brand/wordmark-watercolor-rainbow.png +0 -0
  117. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/assets/brand/wordmark-watercolor-waves-dark.png +0 -0
  118. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/assets/brand/wordmark-watercolor-waves.png +0 -0
  119. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/assets/brand/wordmark-white-padded.png +0 -0
  120. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/assets/brand/wordmark-white.png +0 -0
  121. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/assets/brand/wordmark.png +0 -0
  122. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/assets/images/fastmcp_cloud/connect.png +0 -0
  123. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/assets/images/fastmcp_cloud/create_project.png +0 -0
  124. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/assets/images/fastmcp_cloud/deployment.png +0 -0
  125. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/assets/images/fastmcp_cloud/quickstart.png +0 -0
  126. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/assets/images/oauth-proxy-consent-screen.png +0 -0
  127. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/assets/images/tutorial-rest-api-result.png +0 -0
  128. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/assets/schemas/mcp_server_config/latest.json +0 -0
  129. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/assets/schemas/mcp_server_config/v1.json +0 -0
  130. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/assets/updates/release-2-7.png +0 -0
  131. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/clients/auth/bearer.mdx +0 -0
  132. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/clients/auth/oauth.mdx +0 -0
  133. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/clients/client.mdx +0 -0
  134. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/clients/elicitation.mdx +0 -0
  135. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/clients/logging.mdx +0 -0
  136. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/clients/messages.mdx +0 -0
  137. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/clients/progress.mdx +0 -0
  138. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/clients/prompts.mdx +0 -0
  139. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/clients/resources.mdx +0 -0
  140. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/clients/roots.mdx +0 -0
  141. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/clients/sampling.mdx +0 -0
  142. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/clients/tools.mdx +0 -0
  143. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/clients/transports.mdx +0 -0
  144. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/community/README.md +0 -0
  145. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/community/showcase.mdx +0 -0
  146. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/css/banner.css +0 -0
  147. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/css/python-sdk.css +0 -0
  148. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/css/style.css +0 -0
  149. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/css/version-badge.css +0 -0
  150. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/deployment/fastmcp-cloud.mdx +0 -0
  151. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/deployment/http.mdx +0 -0
  152. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/deployment/running-server.mdx +0 -0
  153. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/deployment/server-configuration.mdx +0 -0
  154. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/development/contributing.mdx +0 -0
  155. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/development/releases.mdx +0 -0
  156. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/development/tests.mdx +0 -0
  157. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/development/upgrade-guide.mdx +0 -0
  158. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/getting-started/installation.mdx +0 -0
  159. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/getting-started/quickstart.mdx +0 -0
  160. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/getting-started/welcome.mdx +0 -0
  161. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/anthropic.mdx +0 -0
  162. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/auth0.mdx +0 -0
  163. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/authkit.mdx +0 -0
  164. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/aws-cognito.mdx +0 -0
  165. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/chatgpt.mdx +0 -0
  166. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/claude-code.mdx +0 -0
  167. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/claude-desktop.mdx +0 -0
  168. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/cursor-install-mcp.png +0 -0
  169. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/cursor.mdx +0 -0
  170. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/descope.mdx +0 -0
  171. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/eunomia-authorization.mdx +0 -0
  172. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/fastapi.mdx +0 -0
  173. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/gemini-cli.mdx +0 -0
  174. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/gemini.mdx +0 -0
  175. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/github.mdx +0 -0
  176. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/google.mdx +0 -0
  177. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/images/authkit/enable_dcr.png +0 -0
  178. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/images/permit/abac_condition_example.png +0 -0
  179. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/images/permit/abac_policy_example.png +0 -0
  180. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/images/permit/policy_mapping.png +0 -0
  181. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/images/permit/role_assignement.png +0 -0
  182. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/mcp-json-configuration.mdx +0 -0
  183. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/openai.mdx +0 -0
  184. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/openapi.mdx +0 -0
  185. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/permit.mdx +0 -0
  186. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/scalekit.mdx +0 -0
  187. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/integrations/workos.mdx +0 -0
  188. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/patterns/cli.mdx +0 -0
  189. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/patterns/contrib.mdx +0 -0
  190. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/patterns/decorating-methods.mdx +0 -0
  191. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/patterns/testing.mdx +0 -0
  192. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/patterns/tool-transformation.mdx +0 -0
  193. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/public/schemas/fastmcp.json/latest.json +0 -0
  194. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/public/schemas/fastmcp.json/v1.json +0 -0
  195. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-cli-__init__.mdx +0 -0
  196. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-cli-install-__init__.mdx +0 -0
  197. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-cli-install-claude_code.mdx +0 -0
  198. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-cli-install-claude_desktop.mdx +0 -0
  199. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-cli-install-cursor.mdx +0 -0
  200. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-cli-install-gemini_cli.mdx +0 -0
  201. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-cli-install-mcp_json.mdx +0 -0
  202. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-cli-install-shared.mdx +0 -0
  203. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-cli-run.mdx +0 -0
  204. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-client-__init__.mdx +0 -0
  205. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-client-auth-__init__.mdx +0 -0
  206. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-client-auth-bearer.mdx +0 -0
  207. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-client-auth-oauth.mdx +0 -0
  208. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-client-client.mdx +0 -0
  209. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-client-elicitation.mdx +0 -0
  210. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-client-logging.mdx +0 -0
  211. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-client-messages.mdx +0 -0
  212. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-client-oauth_callback.mdx +0 -0
  213. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-client-progress.mdx +0 -0
  214. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-client-roots.mdx +0 -0
  215. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-client-sampling.mdx +0 -0
  216. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-client-transports.mdx +0 -0
  217. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-exceptions.mdx +0 -0
  218. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-mcp_config.mdx +0 -0
  219. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-prompts-__init__.mdx +0 -0
  220. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-prompts-prompt.mdx +0 -0
  221. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-prompts-prompt_manager.mdx +0 -0
  222. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-resources-__init__.mdx +0 -0
  223. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-resources-resource.mdx +0 -0
  224. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-resources-resource_manager.mdx +0 -0
  225. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-resources-template.mdx +0 -0
  226. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-__init__.mdx +0 -0
  227. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-__init__.mdx +0 -0
  228. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-auth.mdx +0 -0
  229. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-providers-__init__.mdx +0 -0
  230. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-providers-bearer.mdx +0 -0
  231. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-providers-descope.mdx +0 -0
  232. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-providers-in_memory.mdx +0 -0
  233. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-providers-introspection.mdx +0 -0
  234. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-providers-jwt.mdx +0 -0
  235. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-providers-scalekit.mdx +0 -0
  236. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-providers-supabase.mdx +0 -0
  237. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-auth-redirect_validation.mdx +0 -0
  238. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-dependencies.mdx +0 -0
  239. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-elicitation.mdx +0 -0
  240. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-http.mdx +0 -0
  241. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-low_level.mdx +0 -0
  242. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-middleware-__init__.mdx +0 -0
  243. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-middleware-caching.mdx +0 -0
  244. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-middleware-error_handling.mdx +0 -0
  245. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-middleware-logging.mdx +0 -0
  246. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-middleware-middleware.mdx +0 -0
  247. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-middleware-rate_limiting.mdx +0 -0
  248. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-middleware-timing.mdx +0 -0
  249. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-openapi.mdx +0 -0
  250. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-server-proxy.mdx +0 -0
  251. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-tools-__init__.mdx +0 -0
  252. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-tools-tool.mdx +0 -0
  253. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-tools-tool_transform.mdx +0 -0
  254. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-__init__.mdx +0 -0
  255. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-auth.mdx +0 -0
  256. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-components.mdx +0 -0
  257. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-exceptions.mdx +0 -0
  258. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-http.mdx +0 -0
  259. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-inspect.mdx +0 -0
  260. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-json_schema.mdx +0 -0
  261. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-json_schema_type.mdx +0 -0
  262. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-logging.mdx +0 -0
  263. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-mcp_config.mdx +0 -0
  264. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-mcp_server_config-__init__.mdx +0 -0
  265. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-__init__.mdx +0 -0
  266. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-environments-__init__.mdx +0 -0
  267. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-environments-base.mdx +0 -0
  268. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-environments-uv.mdx +0 -0
  269. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-mcp_server_config.mdx +0 -0
  270. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-sources-__init__.mdx +0 -0
  271. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-sources-base.mdx +0 -0
  272. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-sources-filesystem.mdx +0 -0
  273. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-openapi.mdx +0 -0
  274. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-tests.mdx +0 -0
  275. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-types.mdx +0 -0
  276. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/python-sdk/fastmcp-utilities-ui.mdx +0 -0
  277. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/servers/auth/authentication.mdx +0 -0
  278. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/servers/auth/full-oauth-server.mdx +0 -0
  279. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/servers/auth/oauth-proxy.mdx +0 -0
  280. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/servers/auth/oidc-proxy.mdx +0 -0
  281. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/servers/auth/remote-oauth.mdx +0 -0
  282. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/servers/auth/token-verification.mdx +0 -0
  283. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/servers/composition.mdx +0 -0
  284. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/servers/context.mdx +0 -0
  285. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/servers/elicitation.mdx +0 -0
  286. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/servers/icons.mdx +0 -0
  287. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/servers/logging.mdx +0 -0
  288. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/servers/middleware.mdx +0 -0
  289. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/servers/progress.mdx +0 -0
  290. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/servers/prompts.mdx +0 -0
  291. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/servers/proxy.mdx +0 -0
  292. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/servers/resources.mdx +0 -0
  293. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/servers/sampling.mdx +0 -0
  294. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/servers/server.mdx +0 -0
  295. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/servers/storage-backends.mdx +0 -0
  296. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/servers/tools.mdx +0 -0
  297. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/snippets/local-focus.mdx +0 -0
  298. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/snippets/version-badge.mdx +0 -0
  299. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/snippets/youtube-embed.mdx +0 -0
  300. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/tutorials/create-mcp-server.mdx +0 -0
  301. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/tutorials/mcp.mdx +0 -0
  302. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/docs/tutorials/rest-api.mdx +0 -0
  303. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/atproto_mcp/README.md +0 -0
  304. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/atproto_mcp/demo.py +0 -0
  305. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/atproto_mcp/fastmcp.json +0 -0
  306. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/atproto_mcp/pyproject.toml +0 -0
  307. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/atproto_mcp/src/atproto_mcp/__init__.py +0 -0
  308. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/atproto_mcp/src/atproto_mcp/__main__.py +0 -0
  309. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/atproto_mcp/src/atproto_mcp/_atproto/__init__.py +4 -4
  310. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/atproto_mcp/src/atproto_mcp/_atproto/_client.py +0 -0
  311. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/atproto_mcp/src/atproto_mcp/_atproto/_posts.py +0 -0
  312. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/atproto_mcp/src/atproto_mcp/_atproto/_profile.py +0 -0
  313. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/atproto_mcp/src/atproto_mcp/_atproto/_read.py +0 -0
  314. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/atproto_mcp/src/atproto_mcp/_atproto/_social.py +0 -0
  315. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/atproto_mcp/src/atproto_mcp/py.typed +0 -0
  316. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/atproto_mcp/src/atproto_mcp/server.py +0 -0
  317. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/atproto_mcp/src/atproto_mcp/settings.py +0 -0
  318. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/atproto_mcp/src/atproto_mcp/types.py +0 -0
  319. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/auth/authkit_dcr/README.md +0 -0
  320. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/auth/authkit_dcr/client.py +0 -0
  321. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/auth/authkit_dcr/server.py +0 -0
  322. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/auth/aws_oauth/README.md +0 -0
  323. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/auth/aws_oauth/client.py +0 -0
  324. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/auth/aws_oauth/requirements.txt +0 -0
  325. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/auth/aws_oauth/server.py +0 -0
  326. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/auth/azure_oauth/README.md +0 -0
  327. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/auth/azure_oauth/client.py +0 -0
  328. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/auth/github_oauth/README.md +0 -0
  329. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/auth/github_oauth/client.py +0 -0
  330. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/auth/github_oauth/server.py +0 -0
  331. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/auth/google_oauth/README.md +0 -0
  332. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/auth/google_oauth/client.py +0 -0
  333. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/auth/google_oauth/server.py +0 -0
  334. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/auth/scalekit_oauth/README.md +0 -0
  335. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/auth/scalekit_oauth/client.py +0 -0
  336. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/auth/scalekit_oauth/server.py +0 -0
  337. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/auth/workos_oauth/README.md +0 -0
  338. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/auth/workos_oauth/client.py +0 -0
  339. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/auth/workos_oauth/server.py +0 -0
  340. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/complex_inputs.py +0 -0
  341. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/config_server.py +0 -0
  342. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/desktop.py +0 -0
  343. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/echo.py +0 -0
  344. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/fastmcp_config/env_interpolation_example.json +0 -0
  345. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/fastmcp_config/fastmcp.json +0 -0
  346. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/fastmcp_config/full_example.fastmcp.json +0 -0
  347. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/fastmcp_config/server.py +0 -0
  348. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/fastmcp_config/simple.fastmcp.json +0 -0
  349. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/fastmcp_config_demo/README.md +0 -0
  350. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/fastmcp_config_demo/fastmcp.json +0 -0
  351. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/fastmcp_config_demo/server.py +0 -0
  352. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/in_memory_proxy_example.py +0 -0
  353. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/memory.fastmcp.json +0 -0
  354. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/mount_example.fastmcp.json +0 -0
  355. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/mount_example.py +0 -0
  356. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/sampling.py +0 -0
  357. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/sampling_fallback.py +0 -0
  358. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/screenshot.fastmcp.json +0 -0
  359. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/screenshot.py +0 -0
  360. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/serializer.py +0 -0
  361. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/simple_echo.py +0 -0
  362. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/smart_home/README.md +0 -0
  363. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/smart_home/hub.fastmcp.json +0 -0
  364. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/smart_home/lights.fastmcp.json +0 -0
  365. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/smart_home/pyproject.toml +0 -0
  366. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/smart_home/src/smart_home/__init__.py +0 -0
  367. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/smart_home/src/smart_home/__main__.py +0 -0
  368. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/smart_home/src/smart_home/hub.py +0 -0
  369. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/smart_home/src/smart_home/lights/__init__.py +0 -0
  370. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/smart_home/src/smart_home/lights/hue_utils.py +0 -0
  371. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/smart_home/src/smart_home/lights/server.py +0 -0
  372. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/smart_home/src/smart_home/py.typed +0 -0
  373. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/smart_home/src/smart_home/settings.py +0 -0
  374. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/tags_example.py +0 -0
  375. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/examples/text_me.py +0 -0
  376. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/justfile +0 -0
  377. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/logo.py +0 -0
  378. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/scripts/auto_close_duplicates.py +0 -0
  379. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/scripts/auto_close_needs_mre.py +0 -0
  380. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/__init__.py +2 -2
  381. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/cli/__init__.py +0 -0
  382. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/cli/install/__init__.py +0 -0
  383. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/cli/install/claude_code.py +0 -0
  384. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/cli/install/claude_desktop.py +0 -0
  385. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/cli/install/cursor.py +0 -0
  386. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/cli/install/gemini_cli.py +0 -0
  387. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/cli/install/mcp_json.py +0 -0
  388. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/cli/install/shared.py +0 -0
  389. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/cli/run.py +0 -0
  390. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/client/__init__.py +9 -9
  391. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/client/auth/__init__.py +0 -0
  392. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/client/auth/bearer.py +0 -0
  393. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/client/elicitation.py +0 -0
  394. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/client/logging.py +0 -0
  395. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/client/messages.py +0 -0
  396. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/client/oauth_callback.py +0 -0
  397. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/client/progress.py +0 -0
  398. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/client/roots.py +0 -0
  399. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/contrib/README.md +0 -0
  400. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
  401. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
  402. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
  403. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
  404. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/contrib/component_manager/README.md +0 -0
  405. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/contrib/component_manager/component_service.py +0 -0
  406. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/contrib/component_manager/example.py +0 -0
  407. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/contrib/mcp_mixin/README.md +0 -0
  408. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/contrib/mcp_mixin/__init__.py +2 -2
  409. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/contrib/mcp_mixin/example.py +0 -0
  410. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
  411. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/exceptions.py +0 -0
  412. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/experimental/sampling/__init__.py +0 -0
  413. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/experimental/sampling/handlers/__init__.py +0 -0
  414. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/experimental/sampling/handlers/base.py +0 -0
  415. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/experimental/server/openapi/README.md +0 -0
  416. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/experimental/server/openapi/routing.py +2 -2
  417. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/experimental/server/openapi/server.py +0 -0
  418. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/experimental/utilities/openapi/README.md +0 -0
  419. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/experimental/utilities/openapi/formatters.py +0 -0
  420. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/experimental/utilities/openapi/models.py +3 -3
  421. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/experimental/utilities/openapi/schemas.py +2 -2
  422. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/prompts/__init__.py +1 -1
  423. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/prompts/prompt_manager.py +0 -0
  424. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/py.typed +0 -0
  425. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/resources/__init__.py +5 -5
  426. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/resources/template.py +0 -0
  427. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/resources/types.py +0 -0
  428. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/__init__.py +5 -5
  429. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/handlers/authorize.py +0 -0
  430. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/jwt_issuer.py +0 -0
  431. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/middleware.py +0 -0
  432. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/oauth_proxy.py +0 -0
  433. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/providers/__init__.py +0 -0
  434. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/providers/auth0.py +0 -0
  435. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/providers/aws.py +0 -0
  436. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/providers/descope.py +0 -0
  437. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/providers/github.py +0 -0
  438. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/providers/google.py +0 -0
  439. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/providers/scalekit.py +0 -0
  440. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/auth/redirect_validation.py +0 -0
  441. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/elicitation.py +1 -1
  442. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/low_level.py +0 -0
  443. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/middleware/__init__.py +1 -1
  444. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/middleware/logging.py +0 -0
  445. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/middleware/middleware.py +1 -1
  446. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/middleware/rate_limiting.py +0 -0
  447. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/middleware/timing.py +0 -0
  448. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/middleware/tool_injection.py +0 -0
  449. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/server/sampling/handler.py +0 -0
  450. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/settings.py +0 -0
  451. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/tools/tool_manager.py +0 -0
  452. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/utilities/__init__.py +0 -0
  453. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/utilities/auth.py +0 -0
  454. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/utilities/components.py +0 -0
  455. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/utilities/exceptions.py +0 -0
  456. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/utilities/http.py +0 -0
  457. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/utilities/json_schema.py +0 -0
  458. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/utilities/mcp_config.py +0 -0
  459. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/utilities/mcp_server_config/__init__.py +3 -3
  460. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
  461. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
  462. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
  463. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
  464. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
  465. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
  466. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
  467. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/utilities/types.py +0 -0
  468. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/src/fastmcp/utilities/ui.py +0 -0
  469. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/__init__.py +0 -0
  470. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/cli/__init__.py +0 -0
  471. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/cli/test_cli.py +0 -0
  472. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/cli/test_config.py +0 -0
  473. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/cli/test_cursor.py +0 -0
  474. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/cli/test_install.py +0 -0
  475. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/cli/test_mcp_server_config_integration.py +0 -0
  476. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/cli/test_mcp_server_config_schema.py +0 -0
  477. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/cli/test_project_prepare.py +0 -0
  478. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/cli/test_run.py +0 -0
  479. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/cli/test_run_config.py +0 -0
  480. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/cli/test_server_args.py +0 -0
  481. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/cli/test_shared.py +0 -0
  482. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/cli/test_with_argv.py +0 -0
  483. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/client/__init__.py +0 -0
  484. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/client/auth/__init__.py +0 -0
  485. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/client/auth/test_oauth_client.py +0 -0
  486. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/client/test_client.py +0 -0
  487. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/client/test_elicitation.py +0 -0
  488. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/client/test_logs.py +0 -0
  489. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/client/test_notifications.py +0 -0
  490. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/client/test_oauth_callback_xss.py +0 -0
  491. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/client/test_openapi_experimental.py +0 -0
  492. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/client/test_openapi_legacy.py +0 -0
  493. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/client/test_progress.py +0 -0
  494. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/client/test_roots.py +0 -0
  495. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/client/test_sampling.py +0 -0
  496. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/client/test_sse.py +0 -0
  497. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/client/test_stdio.py +0 -0
  498. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/client/test_streamable_http.py +0 -0
  499. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/client/transports/__init__.py +0 -0
  500. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/client/transports/test_uv_transport.py +0 -0
  501. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/conftest.py +0 -0
  502. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/contrib/__init__.py +0 -0
  503. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/contrib/test_bulk_tool_caller.py +0 -0
  504. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/contrib/test_component_manager.py +0 -0
  505. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/contrib/test_mcp_mixin.py +0 -0
  506. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/deprecated/__init__.py +0 -0
  507. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/deprecated/test_bearer_auth_provider.py +0 -0
  508. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/deprecated/test_dependencies.py +0 -0
  509. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/deprecated/test_deprecated.py +0 -0
  510. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/deprecated/test_mount_import_arg_order.py +0 -0
  511. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/deprecated/test_mount_separators.py +0 -0
  512. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/deprecated/test_output_schema_false.py +0 -0
  513. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/deprecated/test_proxy_client.py +0 -0
  514. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/deprecated/test_resource_prefixes.py +0 -0
  515. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/deprecated/test_route_type_ignore.py +0 -0
  516. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/deprecated/test_settings.py +0 -0
  517. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/README.md +0 -0
  518. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/__init__.py +0 -0
  519. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/README.md +0 -0
  520. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/__init__.py +0 -0
  521. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/conftest.py +0 -0
  522. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/server/__init__.py +0 -0
  523. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/server/openapi/__init__.py +0 -0
  524. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/server/openapi/test_comprehensive.py +0 -0
  525. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/server/openapi/test_deepobject_style.py +0 -0
  526. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/server/openapi/test_end_to_end_compatibility.py +0 -0
  527. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/server/openapi/test_openapi_features.py +0 -0
  528. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/server/openapi/test_openapi_performance.py +0 -0
  529. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/server/openapi/test_parameter_collisions.py +0 -0
  530. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/server/openapi/test_performance_comparison.py +0 -0
  531. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/server/openapi/test_server.py +0 -0
  532. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/utilities/__init__.py +0 -0
  533. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/utilities/openapi/__init__.py +0 -0
  534. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/utilities/openapi/conftest.py +0 -0
  535. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/utilities/openapi/test_allof_requestbody.py +0 -0
  536. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/utilities/openapi/test_direct_array_schemas.py +0 -0
  537. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/utilities/openapi/test_director.py +0 -0
  538. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/utilities/openapi/test_legacy_compatibility.py +0 -0
  539. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/utilities/openapi/test_models.py +0 -0
  540. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/utilities/openapi/test_nullable_fields.py +0 -0
  541. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/utilities/openapi/test_parser.py +0 -0
  542. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/utilities/openapi/test_schemas.py +0 -0
  543. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/openapi_parser/utilities/openapi/test_transitive_references.py +0 -0
  544. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/experimental/sampling/test_openai_handler.py +0 -0
  545. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/integration_tests/__init__.py +0 -0
  546. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/integration_tests/auth/__init__.py +0 -0
  547. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/integration_tests/auth/test_github_provider_integration.py +0 -0
  548. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/integration_tests/conftest.py +0 -0
  549. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/integration_tests/test_github_mcp_remote.py +0 -0
  550. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/prompts/__init__.py +0 -0
  551. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/prompts/test_prompt.py +0 -0
  552. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/prompts/test_prompt_manager.py +0 -0
  553. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/resources/__init__.py +0 -0
  554. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/resources/test_file_resources.py +0 -0
  555. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/resources/test_function_resources.py +0 -0
  556. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/resources/test_resource_manager.py +0 -0
  557. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/resources/test_resource_template.py +0 -0
  558. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/resources/test_resource_template_meta.py +0 -0
  559. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/resources/test_resources.py +0 -0
  560. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/__init__.py +0 -0
  561. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/auth/__init__.py +0 -0
  562. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/auth/providers/__init__.py +0 -0
  563. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/auth/providers/test_auth0.py +0 -0
  564. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/auth/providers/test_aws.py +0 -0
  565. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/auth/providers/test_descope.py +0 -0
  566. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/auth/providers/test_github.py +0 -0
  567. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/auth/providers/test_google.py +0 -0
  568. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/auth/providers/test_introspection.py +0 -0
  569. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/auth/providers/test_scalekit.py +0 -0
  570. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/auth/providers/test_supabase.py +0 -0
  571. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/auth/providers/test_workos.py +0 -0
  572. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/auth/test_auth_provider.py +0 -0
  573. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/auth/test_enhanced_error_responses.py +0 -0
  574. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/auth/test_jwt_issuer.py +0 -0
  575. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/auth/test_jwt_provider.py +0 -0
  576. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/auth/test_oauth_consent_flow.py +0 -0
  577. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/auth/test_oauth_mounting.py +0 -0
  578. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/auth/test_oauth_proxy.py +0 -0
  579. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/auth/test_oauth_proxy_redirect_validation.py +0 -0
  580. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/auth/test_oauth_proxy_storage.py +0 -0
  581. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/auth/test_oidc_proxy.py +0 -0
  582. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/auth/test_redirect_validation.py +0 -0
  583. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/auth/test_remote_auth_provider.py +0 -0
  584. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/auth/test_static_token_verifier.py +0 -0
  585. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/http/__init__.py +0 -0
  586. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/http/test_bearer_auth_backend.py +0 -0
  587. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/http/test_custom_routes.py +0 -0
  588. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/http/test_http_auth_middleware.py +0 -0
  589. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/http/test_http_dependencies.py +0 -0
  590. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/http/test_http_middleware.py +0 -0
  591. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/middleware/__init__.py +0 -0
  592. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/middleware/test_caching.py +0 -0
  593. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/middleware/test_error_handling.py +0 -0
  594. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/middleware/test_initialization_middleware.py +0 -0
  595. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/middleware/test_logging.py +0 -0
  596. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/middleware/test_middleware.py +0 -0
  597. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/middleware/test_rate_limiting.py +0 -0
  598. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/middleware/test_timing.py +0 -0
  599. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/middleware/test_tool_injection.py +0 -0
  600. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/openapi/__init__.py +0 -0
  601. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/openapi/conftest.py +0 -0
  602. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/openapi/test_advanced_behavior.py +0 -0
  603. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/openapi/test_basic_functionality.py +0 -0
  604. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/openapi/test_configuration.py +0 -0
  605. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/openapi/test_deepobject_style.py +0 -0
  606. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/openapi/test_description_propagation.py +0 -0
  607. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/openapi/test_explode_integration.py +0 -0
  608. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/openapi/test_openapi_compatibility.py +0 -0
  609. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/openapi/test_openapi_path_parameters.py +0 -0
  610. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/openapi/test_optional_parameters.py +0 -0
  611. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/openapi/test_parameter_collisions.py +0 -0
  612. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/openapi/test_route_map_fn.py +0 -0
  613. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/proxy/__init__.py +0 -0
  614. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/proxy/test_proxy_client.py +0 -0
  615. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/proxy/test_proxy_server.py +0 -0
  616. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/proxy/test_stateful_proxy_client.py +0 -0
  617. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/test_app_state.py +0 -0
  618. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/test_auth_integration.py +0 -0
  619. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/test_context.py +0 -0
  620. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/test_experimental_openapi_feature_flag.py +0 -0
  621. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/test_file_server.py +0 -0
  622. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/test_icons.py +0 -0
  623. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/test_import_server.py +0 -0
  624. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/test_input_validation.py +0 -0
  625. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/test_log_level.py +0 -0
  626. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/test_logging.py +0 -0
  627. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/test_mount.py +0 -0
  628. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/test_resource_prefix_formats.py +0 -0
  629. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/test_run_server.py +0 -0
  630. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/test_server.py +0 -0
  631. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/test_server_interactions.py +0 -0
  632. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/test_server_lifespan.py +0 -0
  633. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/test_streamable_http_no_redirect.py +0 -0
  634. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/test_tool_annotations.py +0 -0
  635. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/test_tool_exclude_args.py +0 -0
  636. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/server/test_tool_transformation.py +0 -0
  637. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/test_examples.py +0 -0
  638. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/test_mcp_config.py +0 -0
  639. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/tools/__init__.py +0 -0
  640. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/tools/test_tool.py +0 -0
  641. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/tools/test_tool_future_annotations.py +0 -0
  642. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/tools/test_tool_manager.py +0 -0
  643. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/tools/test_tool_transform.py +0 -0
  644. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/utilities/__init__.py +0 -0
  645. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/utilities/openapi/__init__.py +0 -0
  646. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/utilities/openapi/conftest.py +0 -0
  647. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/utilities/openapi/test_nullable_fields.py +0 -0
  648. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/utilities/openapi/test_openapi.py +0 -0
  649. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/utilities/openapi/test_openapi_advanced.py +0 -0
  650. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/utilities/openapi/test_openapi_fastapi.py +0 -0
  651. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/utilities/openapi/test_openapi_output_schemas.py +0 -0
  652. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/utilities/test_cli.py +0 -0
  653. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/utilities/test_components.py +0 -0
  654. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/utilities/test_json_schema.py +0 -0
  655. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/utilities/test_json_schema_type.py +0 -0
  656. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/utilities/test_logging.py +0 -0
  657. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/utilities/test_tests.py +0 -0
  658. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/utilities/test_typeadapter.py +0 -0
  659. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/tests/utilities/test_types.py +0 -0
  660. {fastmcp-2.13.0rc3 → fastmcp-2.13.0.1}/uv.lock +0 -0
@@ -59,6 +59,31 @@ jobs:
59
59
  - name: Run client process tests separately
60
60
  run: uv run pytest --inline-snapshot=disable tests -m "client_process" -x
61
61
 
62
+ run_tests_lowest_direct:
63
+ name: "Run tests with lowest-direct dependencies"
64
+ runs-on: ubuntu-latest
65
+ timeout-minutes: 10
66
+
67
+ steps:
68
+ - uses: actions/checkout@v5
69
+
70
+ - name: Install uv
71
+ uses: astral-sh/setup-uv@v7
72
+ with:
73
+ enable-cache: true
74
+ cache-dependency-glob: "uv.lock"
75
+ python-version: "3.10"
76
+
77
+ - name: Install FastMCP with lowest-direct resolution
78
+ # run with lowest-direct to test against the minimum allowed dependency versions
79
+ run: uv sync --resolution lowest-direct
80
+
81
+ - name: Run tests (excluding integration and client_process)
82
+ run: uv run pytest --inline-snapshot=disable tests -m "not integration and not client_process" --numprocesses auto --maxprocesses 4 --dist worksteal
83
+
84
+ - name: Run client process tests separately
85
+ run: uv run pytest --inline-snapshot=disable tests -m "client_process" -x
86
+
62
87
  run_integration_tests:
63
88
  name: "Run integration tests"
64
89
  runs-on: ubuntu-latest
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fastmcp
3
- Version: 2.13.0rc3
3
+ Version: 2.13.0.1
4
4
  Summary: The fast, Pythonic way to build MCP servers and clients.
5
5
  Project-URL: Homepage, https://gofastmcp.com
6
6
  Project-URL: Repository, https://github.com/jlowin/fastmcp
@@ -4,6 +4,40 @@ icon: "list-check"
4
4
  rss: true
5
5
  ---
6
6
 
7
+ <Update label="v2.13.0" description="2025-10-25">
8
+
9
+ **[v2.13.0: Cache Me If You Can](https://github.com/jlowin/fastmcp/releases/tag/v2.13.0)**
10
+
11
+ FastMCP 2.13 "Cache Me If You Can" represents a fundamental maturation of the framework. After months of community feedback on authentication and state management, this release delivers the infrastructure FastMCP needs to handle production workloads: persistent storage, response caching, and pragmatic OAuth improvements that reflect real-world deployment challenges.
12
+
13
+ 💾 **Pluggable storage backends** bring persistent state to FastMCP servers. Built on [py-key-value-aio](https://github.com/strawgate/py-key-value), a new library from FastMCP maintainer Bill Easton ([@strawgate](https://github.com/strawgate)), the storage layer provides encrypted disk storage by default, platform-aware token management, and a simple key-value interface for application state. We're excited to bring this elegantly designed library into the FastMCP ecosystem - it's both powerful and remarkably easy to use, including wrappers to add encryption, TTLs, caching, and more to backends ranging from Elasticsearch, Redis, DynamoDB, filesystem, in-memory, and more! OAuth providers now automatically persist tokens across restarts, and developers can store arbitrary state without reaching for external databases. This foundation enables long-running sessions, cached credentials, and stateful applications built on MCP.
14
+
15
+ 🔐 **OAuth maturity** brings months of production learnings into the framework. The new consent screen prevents confused deputy and authorization bypass attacks discovered in earlier versions while providing a clean UX with customizable branding. The OAuth proxy now issues its own tokens with automatic key derivation from client secrets, and RFC 7662 token introspection support enables enterprise auth flows. Path prefix mounting enables OAuth-protected servers to integrate into existing web applications under custom paths like `/api`, and MCP 1.17+ compliance with RFC 9728 ensures protocol compatibility. Combined with improved error handling and platform-aware token storage, OAuth is now production-ready and security-hardened for serious applications.
16
+
17
+ FastMCP now supports out-of-the-box authentication with:
18
+ - **[WorkOS](https://gofastmcp.com/integrations/workos)** and **[AuthKit](https://gofastmcp.com/integrations/authkit)**
19
+ - **[GitHub](https://gofastmcp.com/integrations/github)**
20
+ - **[Google](https://gofastmcp.com/integrations/google)**
21
+ - **[Azure](https://gofastmcp.com/integrations/azure)** (Entra ID)
22
+ - **[AWS Cognito](https://gofastmcp.com/integrations/aws-cognito)**
23
+ - **[Auth0](https://gofastmcp.com/integrations/auth0)**
24
+ - **[Descope](https://gofastmcp.com/integrations/descope)**
25
+ - **[Scalekit](https://gofastmcp.com/integrations/scalekit)**
26
+ - **[JWTs](https://gofastmcp.com/servers/auth/token-verification#jwt-token-verification)**
27
+ - **[RFC 7662 token introspection](https://gofastmcp.com/servers/auth/token-verification#token-introspection-protocol)**
28
+
29
+ ⚡ **Response Caching Middleware** dramatically improves performance for expensive operations. Cache tool and resource responses with configurable TTLs, reducing redundant API calls and speeding up repeated queries.
30
+
31
+ 🔄 **Server lifespans** provide proper initialization and cleanup hooks that run once per server instance instead of per client session. This fixes a long-standing source of confusion in the MCP SDK and enables proper resource management for database connections, background tasks, and other server-level state. Note: this is a breaking behavioral change if you were using the `lifespan` parameter.
32
+
33
+ ✨ **Developer experience improvements** include Pydantic input validation for better type safety, icon support for richer UX, RFC 6570 query parameters for resource templates, improved Context API methods (list_resources, list_prompts, get_prompt), and async file/directory resources.
34
+
35
+ This release includes contributions from **20** new contributors and represents the largest feature set in a while. Thank you to everyone who tested preview builds and filed issues - your feedback shaped these improvements!
36
+
37
+ **Full Changelog**: [v2.12.5...v2.13.0](https://github.com/jlowin/fastmcp/compare/v2.12.5...v2.13.0)
38
+
39
+ </Update>
40
+
7
41
  <Update label="v2.12.5" description="2025-10-17">
8
42
 
9
43
  **[v2.12.5: Safety Pin](https://github.com/jlowin/fastmcp/releases/tag/v2.12.5)**
@@ -20,7 +20,10 @@
20
20
  "primary": "#2d00f7"
21
21
  },
22
22
  "contextual": {
23
- "options": ["copy", "view"]
23
+ "options": [
24
+ "copy",
25
+ "view"
26
+ ]
24
27
  },
25
28
  "description": "The fast, Pythonic way to build MCP servers and clients.",
26
29
  "errors": {
@@ -146,7 +149,10 @@
146
149
  {
147
150
  "group": "Essentials",
148
151
  "icon": "cube",
149
- "pages": ["clients/client", "clients/transports"]
152
+ "pages": [
153
+ "clients/client",
154
+ "clients/transports"
155
+ ]
150
156
  },
151
157
  {
152
158
  "group": "Core Operations",
@@ -172,7 +178,10 @@
172
178
  {
173
179
  "group": "Authentication",
174
180
  "icon": "user-shield",
175
- "pages": ["clients/auth/oauth", "clients/auth/bearer"]
181
+ "pages": [
182
+ "clients/auth/oauth",
183
+ "clients/auth/bearer"
184
+ ]
176
185
  }
177
186
  ]
178
187
  },
@@ -226,7 +235,10 @@
226
235
  {
227
236
  "group": "API Integration",
228
237
  "icon": "globe",
229
- "pages": ["integrations/fastapi", "integrations/openapi"]
238
+ "pages": [
239
+ "integrations/fastapi",
240
+ "integrations/openapi"
241
+ ]
230
242
  }
231
243
  ]
232
244
  },
@@ -333,6 +345,7 @@
333
345
  "python-sdk/fastmcp-server-auth-__init__",
334
346
  "python-sdk/fastmcp-server-auth-auth",
335
347
  "python-sdk/fastmcp-server-auth-jwt_issuer",
348
+ "python-sdk/fastmcp-server-auth-middleware",
336
349
  "python-sdk/fastmcp-server-auth-oauth_proxy",
337
350
  "python-sdk/fastmcp-server-auth-oidc_proxy",
338
351
  {
@@ -371,7 +384,8 @@
371
384
  "python-sdk/fastmcp-server-middleware-logging",
372
385
  "python-sdk/fastmcp-server-middleware-middleware",
373
386
  "python-sdk/fastmcp-server-middleware-rate_limiting",
374
- "python-sdk/fastmcp-server-middleware-timing"
387
+ "python-sdk/fastmcp-server-middleware-timing",
388
+ "python-sdk/fastmcp-server-middleware-tool_injection"
375
389
  ]
376
390
  },
377
391
  "python-sdk/fastmcp-server-openapi",
@@ -458,17 +472,17 @@
458
472
  "search": {
459
473
  "prompt": "Search the docs..."
460
474
  },
461
- "theme": "almond",
462
- "thumbnails": {
463
- "appearance": "light",
464
- "background": "/assets/brand/thumbnail-background.png"
465
- },
466
475
  "styling": {
467
476
  "codeblocks": {
468
477
  "theme": {
469
- "light": "snazzy-light",
470
- "dark": "dark-plus"
478
+ "dark": "dark-plus",
479
+ "light": "snazzy-light"
471
480
  }
472
481
  }
482
+ },
483
+ "theme": "almond",
484
+ "thumbnails": {
485
+ "appearance": "light",
486
+ "background": "/assets/brand/thumbnail-background.png"
473
487
  }
474
488
  }
@@ -122,7 +122,7 @@ auth_provider = AzureProvider(
122
122
  client_secret="your-client-secret", # Your Azure App Client Secret
123
123
  tenant_id="08541b6e-646d-43de-a0eb-834e6713d6d5", # Your Azure Tenant ID (REQUIRED)
124
124
  base_url="http://localhost:8000", # Must match your App registration
125
- required_scopes=["your-scope"], # Name of scope created when configuring your App
125
+ required_scopes=["your-scope"], # At least one scope REQUIRED - name of scope from your App
126
126
  # identifier_uri defaults to api://{client_id}
127
127
  # identifier_uri="api://your-api-id",
128
128
  # Optional: request additional upstream scopes in the authorize request
@@ -159,6 +159,10 @@ async def get_user_info() -> dict:
159
159
  Using your specific tenant ID is recommended for better security and control.
160
160
  </Note>
161
161
 
162
+ <Note>
163
+ **Important**: The `required_scopes` parameter is **REQUIRED** and must include at least one scope. Azure's OAuth API requires the `scope` parameter in all authorization requests - you cannot authenticate without specifying at least one scope. Use the unprefixed scope names from your Azure App registration (e.g., `["read", "write"]`). These scopes must be created under **Expose an API** in your App registration.
164
+ </Note>
165
+
162
166
  ## Testing
163
167
 
164
168
  ### Running the Server
@@ -296,8 +300,12 @@ Issuer URL for OAuth metadata (defaults to `BASE_URL`). Set to root-level URL wh
296
300
  Redirect path configured in your Azure App registration
297
301
  </ParamField>
298
302
 
299
- <ParamField path="FASTMCP_SERVER_AUTH_AZURE_REQUIRED_SCOPES" default="">
300
- Comma-, space-, or JSON-separated list of required scopes for your API. These are validated on tokens and used as defaults if the client does not request specific scopes.
303
+ <ParamField path="FASTMCP_SERVER_AUTH_AZURE_REQUIRED_SCOPES" required>
304
+ Comma-, space-, or JSON-separated list of required scopes for your API (at least one scope required). These are validated on tokens and used as defaults if the client does not request specific scopes. Use unprefixed scope names from your Azure App registration (e.g., `read,write`).
305
+
306
+ <Note>
307
+ Azure's OAuth API requires the `scope` parameter - you must provide at least one scope.
308
+ </Note>
301
309
  </ParamField>
302
310
 
303
311
  <ParamField path="FASTMCP_SERVER_AUTH_AZURE_ADDITIONAL_AUTHORIZE_SCOPES" default="">
@@ -105,7 +105,7 @@ fastmcp inspect # auto-detect fastmcp.json
105
105
  - `server_spec`: Python file to inspect, optionally with \:object suffix, or fastmcp.json
106
106
 
107
107
 
108
- ### `prepare` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/cli/cli.py#L785" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
108
+ ### `prepare` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/cli/cli.py#L786" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
109
109
 
110
110
  ```python
111
111
  prepare(config_path: Annotated[str | None, cyclopts.Parameter(help='Path to fastmcp.json configuration file')] = None, output_dir: Annotated[str | None, cyclopts.Parameter(help='Directory to create the persistent environment in')] = None, skip_source: Annotated[bool, cyclopts.Parameter(help='Skip source preparation (e.g., git clone)')] = False) -> None
@@ -54,7 +54,7 @@ Set is_binary=True to read file as binary data instead of text.
54
54
 
55
55
  **Methods:**
56
56
 
57
- #### `validate_absolute_path` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/resources/types.py#L59" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
57
+ #### `validate_absolute_path` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/resources/types.py#L63" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
58
58
 
59
59
  ```python
60
60
  validate_absolute_path(cls, path: Path) -> Path
@@ -63,7 +63,7 @@ validate_absolute_path(cls, path: Path) -> Path
63
63
  Ensure path is absolute.
64
64
 
65
65
 
66
- #### `set_binary_from_mime_type` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/resources/types.py#L67" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
66
+ #### `set_binary_from_mime_type` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/resources/types.py#L71" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
67
67
 
68
68
  ```python
69
69
  set_binary_from_mime_type(cls, is_binary: bool, info: ValidationInfo) -> bool
@@ -72,7 +72,7 @@ set_binary_from_mime_type(cls, is_binary: bool, info: ValidationInfo) -> bool
72
72
  Set is_binary based on mime_type if not explicitly set.
73
73
 
74
74
 
75
- #### `read` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/resources/types.py#L74" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
75
+ #### `read` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/resources/types.py#L79" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
76
76
 
77
77
  ```python
78
78
  read(self) -> str | bytes
@@ -81,7 +81,7 @@ read(self) -> str | bytes
81
81
  Read the file content.
82
82
 
83
83
 
84
- ### `HttpResource` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/resources/types.py#L84" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
84
+ ### `HttpResource` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/resources/types.py#L89" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
85
85
 
86
86
 
87
87
  A resource that reads from an HTTP endpoint.
@@ -89,7 +89,7 @@ A resource that reads from an HTTP endpoint.
89
89
 
90
90
  **Methods:**
91
91
 
92
- #### `read` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/resources/types.py#L92" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
92
+ #### `read` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/resources/types.py#L98" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
93
93
 
94
94
  ```python
95
95
  read(self) -> str | bytes
@@ -98,7 +98,7 @@ read(self) -> str | bytes
98
98
  Read the HTTP content.
99
99
 
100
100
 
101
- ### `DirectoryResource` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/resources/types.py#L100" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
101
+ ### `DirectoryResource` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/resources/types.py#L106" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
102
102
 
103
103
 
104
104
  A resource that lists files in a directory.
@@ -106,7 +106,7 @@ A resource that lists files in a directory.
106
106
 
107
107
  **Methods:**
108
108
 
109
- #### `validate_absolute_path` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/resources/types.py#L116" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
109
+ #### `validate_absolute_path` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/resources/types.py#L126" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
110
110
 
111
111
  ```python
112
112
  validate_absolute_path(cls, path: Path) -> Path
@@ -115,7 +115,7 @@ validate_absolute_path(cls, path: Path) -> Path
115
115
  Ensure path is absolute.
116
116
 
117
117
 
118
- #### `list_files` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/resources/types.py#L122" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
118
+ #### `list_files` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/resources/types.py#L132" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
119
119
 
120
120
  ```python
121
121
  list_files(self) -> list[Path]
@@ -124,7 +124,7 @@ list_files(self) -> list[Path]
124
124
  List files in the directory.
125
125
 
126
126
 
127
- #### `read` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/resources/types.py#L144" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
127
+ #### `read` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/resources/types.py#L148" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
128
128
 
129
129
  ```python
130
130
  read(self) -> str
@@ -0,0 +1,104 @@
1
+ ---
2
+ title: jwt_issuer
3
+ sidebarTitle: jwt_issuer
4
+ ---
5
+
6
+ # `fastmcp.server.auth.jwt_issuer`
7
+
8
+
9
+ JWT token issuance and verification for FastMCP OAuth Proxy.
10
+
11
+ This module implements the token factory pattern for OAuth proxies, where the proxy
12
+ issues its own JWT tokens to clients instead of forwarding upstream provider tokens.
13
+ This maintains proper OAuth 2.0 token audience boundaries.
14
+
15
+
16
+ ## Functions
17
+
18
+ ### `derive_jwt_key` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/jwt_issuer.py#L37" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
19
+
20
+ ```python
21
+ derive_jwt_key() -> bytes
22
+ ```
23
+
24
+
25
+ Derive JWT signing key from a high-entropy or low-entropy key material and server salt.
26
+
27
+
28
+ ## Classes
29
+
30
+ ### `JWTIssuer` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/jwt_issuer.py#L74" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
31
+
32
+
33
+ Issues and validates FastMCP-signed JWT tokens using HS256.
34
+
35
+ This issuer creates JWT tokens for MCP clients with proper audience claims,
36
+ maintaining OAuth 2.0 token boundaries. Tokens are signed with HS256 using
37
+ a key derived from the upstream client secret.
38
+
39
+
40
+ **Methods:**
41
+
42
+ #### `issue_access_token` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/jwt_issuer.py#L100" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
43
+
44
+ ```python
45
+ issue_access_token(self, client_id: str, scopes: list[str], jti: str, expires_in: int = 3600) -> str
46
+ ```
47
+
48
+ Issue a minimal FastMCP access token.
49
+
50
+ FastMCP tokens are reference tokens containing only the minimal claims
51
+ needed for validation and lookup. The JTI maps to the upstream token
52
+ which contains actual user identity and authorization data.
53
+
54
+ **Args:**
55
+ - `client_id`: MCP client ID
56
+ - `scopes`: Token scopes
57
+ - `jti`: Unique token identifier (maps to upstream token)
58
+ - `expires_in`: Token lifetime in seconds
59
+
60
+ **Returns:**
61
+ - Signed JWT token
62
+
63
+
64
+ #### `issue_refresh_token` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/jwt_issuer.py#L147" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
65
+
66
+ ```python
67
+ issue_refresh_token(self, client_id: str, scopes: list[str], jti: str, expires_in: int) -> str
68
+ ```
69
+
70
+ Issue a minimal FastMCP refresh token.
71
+
72
+ FastMCP refresh tokens are reference tokens containing only the minimal
73
+ claims needed for validation and lookup. The JTI maps to the upstream
74
+ token which contains actual user identity and authorization data.
75
+
76
+ **Args:**
77
+ - `client_id`: MCP client ID
78
+ - `scopes`: Token scopes
79
+ - `jti`: Unique token identifier (maps to upstream token)
80
+ - `expires_in`: Token lifetime in seconds (should match upstream refresh expiry)
81
+
82
+ **Returns:**
83
+ - Signed JWT token
84
+
85
+
86
+ #### `verify_token` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/jwt_issuer.py#L195" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
87
+
88
+ ```python
89
+ verify_token(self, token: str) -> dict[str, Any]
90
+ ```
91
+
92
+ Verify and decode a FastMCP token.
93
+
94
+ Validates JWT signature, expiration, issuer, and audience.
95
+
96
+ **Args:**
97
+ - `token`: JWT token to verify
98
+
99
+ **Returns:**
100
+ - Decoded token payload
101
+
102
+ **Raises:**
103
+ - `JoseError`: If token is invalid, expired, or has wrong claims
104
+
@@ -0,0 +1,26 @@
1
+ ---
2
+ title: middleware
3
+ sidebarTitle: middleware
4
+ ---
5
+
6
+ # `fastmcp.server.auth.middleware`
7
+
8
+
9
+ Enhanced authentication middleware with better error messages.
10
+
11
+ This module provides enhanced versions of MCP SDK authentication middleware
12
+ that return more helpful error messages for developers troubleshooting
13
+ authentication issues.
14
+
15
+
16
+ ## Classes
17
+
18
+ ### `RequireAuthMiddleware` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/middleware.py#L22" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
19
+
20
+
21
+ Enhanced authentication middleware with detailed error messages.
22
+
23
+ Extends the SDK's RequireAuthMiddleware to provide more actionable
24
+ error messages when authentication fails. This helps developers
25
+ understand what went wrong and how to fix it.
26
+
@@ -26,7 +26,7 @@ production use with enterprise identity providers.
26
26
 
27
27
  ## Functions
28
28
 
29
- ### `create_consent_html` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L230" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
29
+ ### `create_consent_html` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L236" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
30
30
 
31
31
  ```python
32
32
  create_consent_html(client_id: str, redirect_uri: str, scopes: list[str], txn_id: str, csrf_token: str, client_name: str | None = None, title: str = 'Application Access Request', server_name: str | None = None, server_icon_url: str | None = None, server_website_url: str | None = None, client_website_url: str | None = None) -> str
@@ -38,7 +38,7 @@ Create a styled HTML consent page for OAuth authorization requests.
38
38
 
39
39
  ## Classes
40
40
 
41
- ### `OAuthTransaction` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L103" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
41
+ ### `OAuthTransaction` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L108" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
42
42
 
43
43
 
44
44
  OAuth transaction state for consent flow.
@@ -47,7 +47,7 @@ Stored server-side to track active authorization flows with client context.
47
47
  Includes CSRF tokens for consent protection per MCP security best practices.
48
48
 
49
49
 
50
- ### `ClientCode` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L124" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
50
+ ### `ClientCode` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L129" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
51
51
 
52
52
 
53
53
  Client authorization code with PKCE and upstream tokens.
@@ -56,16 +56,17 @@ Stored server-side after upstream IdP callback. Contains the upstream
56
56
  tokens bound to the client's PKCE challenge for secure token exchange.
57
57
 
58
58
 
59
- ### `UpstreamTokenSet` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L142" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
59
+ ### `UpstreamTokenSet` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L147" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
60
60
 
61
61
 
62
62
  Stored upstream OAuth tokens from identity provider.
63
63
 
64
64
  These tokens are obtained from the upstream provider (Google, GitHub, etc.)
65
- and are stored encrypted at rest. They are never exposed to MCP clients.
65
+ and stored in plaintext within this model. Encryption is handled transparently
66
+ at the storage layer via FernetEncryptionWrapper. Tokens are never exposed to MCP clients.
66
67
 
67
68
 
68
- ### `JTIMapping` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L163" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
69
+ ### `JTIMapping` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L169" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
69
70
 
70
71
 
71
72
  Maps FastMCP token JTI to upstream token ID.
@@ -74,7 +75,7 @@ This allows stateless JWT validation while still being able to look up
74
75
  the corresponding upstream token when tools need to access upstream APIs.
75
76
 
76
77
 
77
- ### `ProxyDCRClient` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L175" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
78
+ ### `ProxyDCRClient` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L181" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
78
79
 
79
80
 
80
81
  Client for DCR proxy with configurable redirect URI validation.
@@ -104,7 +105,7 @@ arise from accepting arbitrary redirect URIs.
104
105
 
105
106
  **Methods:**
106
107
 
107
- #### `validate_redirect_uri` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L204" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
108
+ #### `validate_redirect_uri` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L210" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
108
109
 
109
110
  ```python
110
111
  validate_redirect_uri(self, redirect_uri: AnyUrl | None) -> AnyUrl
@@ -118,7 +119,7 @@ This is essential for cached token scenarios where the client may
118
119
  reconnect with a different port.
119
120
 
120
121
 
121
- ### `TokenHandler` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L377" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
122
+ ### `TokenHandler` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L383" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
122
123
 
123
124
 
124
125
  TokenHandler that returns OAuth 2.1 compliant error responses.
@@ -141,7 +142,7 @@ Per MCP spec: "Invalid or expired tokens MUST receive a HTTP 401 response."
141
142
 
142
143
  **Methods:**
143
144
 
144
- #### `response` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L396" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
145
+ #### `response` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L402" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
145
146
 
146
147
  ```python
147
148
  response(self, obj: TokenSuccessResponse | TokenErrorResponse)
@@ -150,7 +151,7 @@ response(self, obj: TokenSuccessResponse | TokenErrorResponse)
150
151
  Override response method to provide OAuth 2.1 compliant error handling.
151
152
 
152
153
 
153
- ### `OAuthProxy` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L426" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
154
+ ### `OAuthProxy` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L432" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
154
155
 
155
156
 
156
157
  OAuth provider that presents a DCR-compliant interface while proxying to non-DCR IDPs.
@@ -260,7 +261,7 @@ Handles provider-specific requirements:
260
261
 
261
262
  **Methods:**
262
263
 
263
- #### `get_client` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L860" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
264
+ #### `get_client` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L813" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
264
265
 
265
266
  ```python
266
267
  get_client(self, client_id: str) -> OAuthClientInformationFull | None
@@ -272,7 +273,7 @@ provided to the DCR client during registration, not the upstream client ID.
272
273
  For unregistered clients, returns None (which will raise an error in the SDK).
273
274
 
274
275
 
275
- #### `register_client` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L875" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
276
+ #### `register_client` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L829" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
276
277
 
277
278
  ```python
278
279
  register_client(self, client_info: OAuthClientInformationFull) -> None
@@ -286,7 +287,7 @@ redirect URI will likely be localhost or unknown to the proxied IDP. The
286
287
  proxied IDP only knows about this server's fixed redirect URI.
287
288
 
288
289
 
289
- #### `authorize` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L921" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
290
+ #### `authorize` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L876" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
290
291
 
291
292
  ```python
292
293
  authorize(self, client: OAuthClientInformationFull, params: AuthorizationParams) -> str
@@ -303,7 +304,7 @@ If consent is disabled (require_authorization_consent=False), skip the consent s
303
304
  and redirect directly to the upstream IdP.
304
305
 
305
306
 
306
- #### `load_authorization_code` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L995" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
307
+ #### `load_authorization_code` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L951" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
307
308
 
308
309
  ```python
309
310
  load_authorization_code(self, client: OAuthClientInformationFull, authorization_code: str) -> AuthorizationCode | None
@@ -315,7 +316,7 @@ Look up our client code and return authorization code object
315
316
  with PKCE challenge for validation.
316
317
 
317
318
 
318
- #### `exchange_authorization_code` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L1037" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
319
+ #### `exchange_authorization_code` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L994" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
319
320
 
320
321
  ```python
321
322
  exchange_authorization_code(self, client: OAuthClientInformationFull, authorization_code: AuthorizationCode) -> OAuthToken
@@ -333,7 +334,7 @@ Implements the token factory pattern:
333
334
  PKCE validation is handled by the MCP framework before this method is called.
334
335
 
335
336
 
336
- #### `load_refresh_token` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L1207" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
337
+ #### `load_refresh_token` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L1159" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
337
338
 
338
339
  ```python
339
340
  load_refresh_token(self, client: OAuthClientInformationFull, refresh_token: str) -> RefreshToken | None
@@ -342,7 +343,7 @@ load_refresh_token(self, client: OAuthClientInformationFull, refresh_token: str)
342
343
  Load refresh token from local storage.
343
344
 
344
345
 
345
- #### `exchange_refresh_token` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L1215" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
346
+ #### `exchange_refresh_token` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L1167" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
346
347
 
347
348
  ```python
348
349
  exchange_refresh_token(self, client: OAuthClientInformationFull, refresh_token: RefreshToken, scopes: list[str]) -> OAuthToken
@@ -359,7 +360,7 @@ Implements two-tier refresh:
359
360
  6. Keep same FastMCP refresh token (unless upstream rotates)
360
361
 
361
362
 
362
- #### `load_access_token` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L1429" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
363
+ #### `load_access_token` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L1368" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
363
364
 
364
365
  ```python
365
366
  load_access_token(self, token: str) -> AccessToken | None
@@ -378,7 +379,7 @@ The FastMCP JWT is a reference token - all authorization data comes
378
379
  from validating the upstream token via the TokenVerifier.
379
380
 
380
381
 
381
- #### `revoke_token` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L1493" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
382
+ #### `revoke_token` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L1424" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
382
383
 
383
384
  ```python
384
385
  revoke_token(self, token: AccessToken | RefreshToken) -> None
@@ -390,16 +391,17 @@ Removes tokens from local storage and attempts to revoke them with
390
391
  the upstream server if a revocation endpoint is configured.
391
392
 
392
393
 
393
- #### `get_routes` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L1537" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
394
+ #### `get_routes` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/server/auth/oauth_proxy.py#L1468" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
394
395
 
395
396
  ```python
396
397
  get_routes(self, mcp_path: str | None = None) -> list[Route]
397
398
  ```
398
399
 
399
- Get OAuth routes with custom proxy token handler.
400
+ Get OAuth routes with custom handlers for better error UX.
400
401
 
401
- This method creates standard OAuth routes and replaces the token endpoint
402
- with our proxy handler that forwards requests to the upstream OAuth server.
402
+ This method creates standard OAuth routes and replaces:
403
+ - /authorize endpoint: Enhanced error responses for unregistered clients
404
+ - /token endpoint: OAuth 2.1 compliant error codes
403
405
 
404
406
  **Args:**
405
407
  - `mcp_path`: The path where the MCP endpoint is mounted (e.g., "/mcp")