fastmcp 2.12.0rc1__tar.gz → 2.12.2__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 (595) hide show
  1. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/.github/workflows/run-tests.yml +2 -1
  2. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/AGENTS.md +14 -0
  3. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/PKG-INFO +3 -2
  4. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/changelog.mdx +168 -0
  5. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/deployment/self-hosted.mdx +1 -1
  6. fastmcp-2.12.2/docs/development/contributing.mdx +187 -0
  7. fastmcp-2.12.2/docs/development/releases.mdx +79 -0
  8. fastmcp-2.12.2/docs/development/tests.mdx +350 -0
  9. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/docs.json +139 -160
  10. fastmcp-2.12.2/docs/getting-started/installation.mdx +82 -0
  11. fastmcp-2.12.2/docs/getting-started/quickstart.mdx +137 -0
  12. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/integrations/authkit.mdx +40 -10
  13. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/integrations/azure.mdx +12 -8
  14. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/integrations/github.mdx +12 -8
  15. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/integrations/google.mdx +18 -11
  16. fastmcp-2.12.0rc1/docs/integrations/workos-oauth.mdx → fastmcp-2.12.2/docs/integrations/workos.mdx +10 -8
  17. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-client-auth-oauth.mdx +34 -16
  18. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-client-elicitation.mdx +2 -2
  19. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-server-auth-auth.mdx +29 -23
  20. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-server-auth-oauth_proxy.mdx +29 -43
  21. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-server-auth-providers-azure.mdx +4 -4
  22. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-server-auth-providers-github.mdx +4 -4
  23. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-server-auth-providers-google.mdx +4 -4
  24. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-server-auth-providers-in_memory.mdx +10 -10
  25. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-server-auth-providers-jwt.mdx +11 -11
  26. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-server-auth-providers-workos.mdx +10 -6
  27. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-server-context.mdx +28 -28
  28. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-server-dependencies.mdx +4 -4
  29. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-server-elicitation.mdx +7 -7
  30. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-server-http.mdx +8 -8
  31. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-server-server.mdx +51 -51
  32. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-mcp_server_config.mdx +1 -1
  33. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/servers/auth/authentication.mdx +22 -14
  34. fastmcp-2.12.2/docs/servers/auth/oauth-proxy.mdx +322 -0
  35. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/servers/auth/remote-oauth.mdx +3 -3
  36. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/servers/auth/token-verification.mdx +3 -1
  37. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/servers/composition.mdx +5 -1
  38. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/servers/proxy.mdx +6 -0
  39. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/updates.mdx +52 -0
  40. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/auth/azure_oauth/server.py +0 -1
  41. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/auth/github_oauth/server.py +0 -1
  42. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/auth/google_oauth/server.py +0 -1
  43. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/auth/workos_oauth/server.py +0 -1
  44. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/sampling_fallback.py +4 -0
  45. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/pyproject.toml +11 -9
  46. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/client/auth/oauth.py +78 -2
  47. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/client/elicitation.py +3 -2
  48. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/experimental/sampling/handlers/openai.py +16 -9
  49. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/server/auth/auth.py +130 -59
  50. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/server/auth/oauth_proxy.py +122 -221
  51. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/server/auth/providers/azure.py +3 -12
  52. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/server/auth/providers/github.py +5 -13
  53. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/server/auth/providers/google.py +4 -11
  54. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/server/auth/providers/in_memory.py +0 -2
  55. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/server/auth/providers/jwt.py +5 -7
  56. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/server/auth/providers/workos.py +16 -16
  57. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/server/context.py +3 -2
  58. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/server/dependencies.py +1 -4
  59. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/server/elicitation.py +3 -2
  60. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/server/http.py +22 -59
  61. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/server/middleware/middleware.py +3 -3
  62. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/server/server.py +2 -3
  63. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/settings.py +14 -6
  64. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/tools/tool.py +2 -2
  65. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/utilities/components.py +3 -3
  66. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +2 -2
  67. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/utilities/types.py +2 -2
  68. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/cli/test_mcp_server_config_integration.py +7 -7
  69. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/cli/test_mcp_server_config_schema.py +24 -1
  70. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/server/auth/providers/test_azure.py +1 -1
  71. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/server/auth/providers/test_github.py +1 -1
  72. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/server/auth/providers/test_google.py +1 -1
  73. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/server/auth/providers/test_workos.py +56 -2
  74. fastmcp-2.12.2/tests/server/auth/test_auth_provider.py +102 -0
  75. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/server/auth/test_jwt_provider.py +4 -0
  76. fastmcp-2.12.2/tests/server/auth/test_oauth_proxy.py +795 -0
  77. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/server/auth/test_oauth_proxy_redirect_validation.py +6 -5
  78. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/server/auth/test_remote_auth_provider.py +150 -98
  79. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/server/http/test_http_auth_middleware.py +2 -2
  80. fastmcp-2.12.2/tests/tools/__init__.py +0 -0
  81. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/uv.lock +11 -207
  82. fastmcp-2.12.0rc1/docs/deployment/testing.mdx +0 -159
  83. fastmcp-2.12.0rc1/docs/getting-started/installation.mdx +0 -110
  84. fastmcp-2.12.0rc1/docs/getting-started/quickstart.mdx +0 -129
  85. fastmcp-2.12.0rc1/docs/python-sdk/fastmcp-server-auth-registry.mdx +0 -43
  86. fastmcp-2.12.0rc1/docs/servers/auth/oauth-proxy.mdx +0 -381
  87. fastmcp-2.12.0rc1/src/fastmcp/experimental/sampling/handlers/__init__.py +0 -3
  88. fastmcp-2.12.0rc1/src/fastmcp/server/auth/registry.py +0 -52
  89. fastmcp-2.12.0rc1/test_github_oauth.py +0 -21
  90. fastmcp-2.12.0rc1/test_google_oauth.py +0 -22
  91. fastmcp-2.12.0rc1/tests/server/auth/test_oauth_proxy.py +0 -594
  92. fastmcp-2.12.0rc1/tests/server/auth/test_workos.py +0 -58
  93. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/.ccignore +0 -0
  94. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/.cursor/rules/core-mcp-objects.mdc +0 -0
  95. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/.github/ISSUE_TEMPLATE/bug.yml +0 -0
  96. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  97. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/.github/ISSUE_TEMPLATE/enhancement.yml +0 -0
  98. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/.github/copilot-instructions.md +0 -0
  99. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/.github/dependabot.yml +0 -0
  100. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/.github/pull_request_template.md +0 -0
  101. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/.github/release.yml +0 -0
  102. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/.github/workflows/auto-close-duplicates.yml +0 -0
  103. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/.github/workflows/marvin-dedupe-issues.yml +0 -0
  104. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/.github/workflows/marvin-label-triage.yml +0 -0
  105. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/.github/workflows/marvin.yml +0 -0
  106. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/.github/workflows/publish.yml +0 -0
  107. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/.github/workflows/run-static.yml +0 -0
  108. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/.github/workflows/update-config-schema.yml +0 -0
  109. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/.github/workflows/update-sdk-docs.yml +0 -0
  110. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/.gitignore +0 -0
  111. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/.pre-commit-config.yaml +0 -0
  112. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/CLAUDE.md +0 -0
  113. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/CODE_OF_CONDUCT.md +0 -0
  114. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/LICENSE +0 -0
  115. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/README.md +0 -0
  116. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/README_OPENAPI.md +0 -0
  117. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/Windows_Notes.md +0 -0
  118. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/.ccignore +0 -0
  119. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/.cursor/rules/mintlify.mdc +0 -0
  120. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/assets/brand/blue-logo.png +0 -0
  121. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/assets/brand/card-background.png +0 -0
  122. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/assets/brand/favicon.svg +0 -0
  123. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/assets/brand/logo-wordmark-dark.svg +0 -0
  124. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/assets/brand/logo-wordmark.svg +0 -0
  125. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/assets/images/fastmcp_cloud/connect.png +0 -0
  126. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/assets/images/fastmcp_cloud/create_project.png +0 -0
  127. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/assets/images/fastmcp_cloud/deployment.png +0 -0
  128. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/assets/images/fastmcp_cloud/quickstart.png +0 -0
  129. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/assets/images/tutorial-rest-api-result.png +0 -0
  130. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/assets/schemas/mcp_server_config/latest.json +0 -0
  131. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/assets/schemas/mcp_server_config/v1.json +0 -0
  132. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/assets/updates/release-2-7.png +0 -0
  133. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/clients/auth/bearer.mdx +0 -0
  134. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/clients/auth/oauth.mdx +0 -0
  135. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/clients/client.mdx +0 -0
  136. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/clients/elicitation.mdx +0 -0
  137. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/clients/logging.mdx +0 -0
  138. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/clients/messages.mdx +0 -0
  139. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/clients/progress.mdx +0 -0
  140. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/clients/prompts.mdx +0 -0
  141. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/clients/resources.mdx +0 -0
  142. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/clients/roots.mdx +0 -0
  143. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/clients/sampling.mdx +0 -0
  144. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/clients/tools.mdx +0 -0
  145. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/clients/transports.mdx +0 -0
  146. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/community/README.md +0 -0
  147. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/community/showcase.mdx +0 -0
  148. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/css/banner.css +0 -0
  149. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/css/python-sdk.css +0 -0
  150. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/css/style.css +0 -0
  151. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/css/version-badge.css +0 -0
  152. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/deployment/fastmcp-cloud.mdx +0 -0
  153. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/deployment/running-server.mdx +0 -0
  154. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/deployment/server-configuration.mdx +0 -0
  155. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/getting-started/welcome.mdx +0 -0
  156. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/integrations/anthropic.mdx +0 -0
  157. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/integrations/asgi.mdx +0 -0
  158. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/integrations/chatgpt.mdx +0 -0
  159. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/integrations/claude-code.mdx +0 -0
  160. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/integrations/claude-desktop.mdx +0 -0
  161. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/integrations/cursor-install-mcp.png +0 -0
  162. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/integrations/cursor.mdx +0 -0
  163. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/integrations/eunomia-authorization.mdx +0 -0
  164. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/integrations/fastapi.mdx +0 -0
  165. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/integrations/gemini.mdx +0 -0
  166. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/integrations/images/authkit/enable_dcr.png +0 -0
  167. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/integrations/images/permit/abac_condition_example.png +0 -0
  168. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/integrations/images/permit/abac_policy_example.png +0 -0
  169. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/integrations/images/permit/policy_mapping.png +0 -0
  170. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/integrations/images/permit/role_assignement.png +0 -0
  171. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/integrations/mcp-json-configuration.mdx +0 -0
  172. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/integrations/openai.mdx +0 -0
  173. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/integrations/openapi.mdx +0 -0
  174. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/integrations/permit.mdx +0 -0
  175. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/patterns/cli.mdx +0 -0
  176. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/patterns/contrib.mdx +0 -0
  177. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/patterns/decorating-methods.mdx +0 -0
  178. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/patterns/tool-transformation.mdx +0 -0
  179. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/public/schemas/fastmcp.json/latest.json +0 -0
  180. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/public/schemas/fastmcp.json/v1.json +0 -0
  181. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-cli-__init__.mdx +0 -0
  182. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-cli-claude.mdx +0 -0
  183. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-cli-cli.mdx +0 -0
  184. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-cli-install-__init__.mdx +0 -0
  185. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-cli-install-claude_code.mdx +0 -0
  186. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-cli-install-claude_desktop.mdx +0 -0
  187. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-cli-install-cursor.mdx +0 -0
  188. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-cli-install-mcp_json.mdx +0 -0
  189. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-cli-install-shared.mdx +0 -0
  190. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-cli-run.mdx +0 -0
  191. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-client-__init__.mdx +0 -0
  192. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-client-auth-__init__.mdx +0 -0
  193. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-client-auth-bearer.mdx +0 -0
  194. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-client-client.mdx +0 -0
  195. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-client-logging.mdx +0 -0
  196. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-client-messages.mdx +0 -0
  197. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-client-oauth_callback.mdx +0 -0
  198. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-client-progress.mdx +0 -0
  199. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-client-roots.mdx +0 -0
  200. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-client-sampling.mdx +0 -0
  201. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-client-transports.mdx +0 -0
  202. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-exceptions.mdx +0 -0
  203. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-mcp_config.mdx +0 -0
  204. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-prompts-__init__.mdx +0 -0
  205. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-prompts-prompt.mdx +0 -0
  206. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-prompts-prompt_manager.mdx +0 -0
  207. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-resources-__init__.mdx +0 -0
  208. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-resources-resource.mdx +0 -0
  209. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-resources-resource_manager.mdx +0 -0
  210. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-resources-template.mdx +0 -0
  211. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-resources-types.mdx +0 -0
  212. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-server-__init__.mdx +0 -0
  213. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-server-auth-__init__.mdx +0 -0
  214. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-server-auth-providers-__init__.mdx +0 -0
  215. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-server-auth-providers-bearer.mdx +0 -0
  216. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-server-auth-redirect_validation.mdx +0 -0
  217. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-server-low_level.mdx +0 -0
  218. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-server-middleware-__init__.mdx +0 -0
  219. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-server-middleware-error_handling.mdx +0 -0
  220. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-server-middleware-logging.mdx +0 -0
  221. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-server-middleware-middleware.mdx +0 -0
  222. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-server-middleware-rate_limiting.mdx +0 -0
  223. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-server-middleware-timing.mdx +0 -0
  224. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-server-openapi.mdx +0 -0
  225. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-server-proxy.mdx +0 -0
  226. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-settings.mdx +0 -0
  227. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-tools-__init__.mdx +0 -0
  228. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-tools-tool.mdx +0 -0
  229. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-tools-tool_manager.mdx +0 -0
  230. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-tools-tool_transform.mdx +0 -0
  231. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-utilities-__init__.mdx +0 -0
  232. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-utilities-auth.mdx +0 -0
  233. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-utilities-cli.mdx +0 -0
  234. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-utilities-components.mdx +0 -0
  235. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-utilities-exceptions.mdx +0 -0
  236. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-utilities-http.mdx +0 -0
  237. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-utilities-inspect.mdx +0 -0
  238. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-utilities-json_schema.mdx +0 -0
  239. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-utilities-json_schema_type.mdx +0 -0
  240. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-utilities-logging.mdx +0 -0
  241. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-utilities-mcp_config.mdx +0 -0
  242. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-utilities-mcp_server_config-__init__.mdx +0 -0
  243. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-__init__.mdx +0 -0
  244. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-environments-__init__.mdx +0 -0
  245. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-environments-base.mdx +0 -0
  246. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-environments-uv.mdx +0 -0
  247. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-sources-__init__.mdx +0 -0
  248. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-sources-base.mdx +0 -0
  249. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-sources-filesystem.mdx +0 -0
  250. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-utilities-openapi.mdx +0 -0
  251. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-utilities-tests.mdx +0 -0
  252. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/python-sdk/fastmcp-utilities-types.mdx +0 -0
  253. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/servers/auth/full-oauth-server.mdx +0 -0
  254. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/servers/context.mdx +0 -0
  255. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/servers/elicitation.mdx +0 -0
  256. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/servers/logging.mdx +0 -0
  257. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/servers/middleware.mdx +0 -0
  258. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/servers/progress.mdx +0 -0
  259. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/servers/prompts.mdx +0 -0
  260. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/servers/resources.mdx +0 -0
  261. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/servers/sampling.mdx +0 -0
  262. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/servers/server.mdx +0 -0
  263. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/servers/tools.mdx +0 -0
  264. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/snippets/local-focus.mdx +0 -0
  265. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/snippets/version-badge.mdx +0 -0
  266. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/snippets/youtube-embed.mdx +0 -0
  267. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/tutorials/create-mcp-server.mdx +0 -0
  268. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/tutorials/mcp.mdx +0 -0
  269. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/docs/tutorials/rest-api.mdx +0 -0
  270. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/atproto_mcp/README.md +0 -0
  271. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/atproto_mcp/demo.py +0 -0
  272. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/atproto_mcp/fastmcp.json +0 -0
  273. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/atproto_mcp/pyproject.toml +0 -0
  274. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/atproto_mcp/src/atproto_mcp/__init__.py +0 -0
  275. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/atproto_mcp/src/atproto_mcp/__main__.py +0 -0
  276. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/atproto_mcp/src/atproto_mcp/_atproto/__init__.py +0 -0
  277. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/atproto_mcp/src/atproto_mcp/_atproto/_client.py +0 -0
  278. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/atproto_mcp/src/atproto_mcp/_atproto/_posts.py +0 -0
  279. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/atproto_mcp/src/atproto_mcp/_atproto/_profile.py +0 -0
  280. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/atproto_mcp/src/atproto_mcp/_atproto/_read.py +0 -0
  281. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/atproto_mcp/src/atproto_mcp/_atproto/_social.py +0 -0
  282. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/atproto_mcp/src/atproto_mcp/py.typed +0 -0
  283. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/atproto_mcp/src/atproto_mcp/server.py +0 -0
  284. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/atproto_mcp/src/atproto_mcp/settings.py +0 -0
  285. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/atproto_mcp/src/atproto_mcp/types.py +0 -0
  286. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/auth/azure_oauth/README.md +0 -0
  287. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/auth/azure_oauth/client.py +0 -0
  288. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/auth/github_oauth/README.md +0 -0
  289. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/auth/github_oauth/client.py +0 -0
  290. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/auth/google_oauth/README.md +0 -0
  291. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/auth/google_oauth/client.py +0 -0
  292. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/auth/workos_oauth/README.md +0 -0
  293. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/auth/workos_oauth/client.py +0 -0
  294. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/complex_inputs.py +0 -0
  295. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/config_server.py +0 -0
  296. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/desktop.py +0 -0
  297. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/echo.py +0 -0
  298. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/fastmcp_config/env_interpolation_example.json +0 -0
  299. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/fastmcp_config/fastmcp.json +0 -0
  300. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/fastmcp_config/full_example.fastmcp.json +0 -0
  301. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/fastmcp_config/server.py +0 -0
  302. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/fastmcp_config/simple.fastmcp.json +0 -0
  303. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/fastmcp_config_demo/README.md +0 -0
  304. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/fastmcp_config_demo/fastmcp.json +0 -0
  305. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/fastmcp_config_demo/server.py +0 -0
  306. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/get_file.py +0 -0
  307. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/in_memory_proxy_example.py +0 -0
  308. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/memory.fastmcp.json +0 -0
  309. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/memory.py +0 -0
  310. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/mount_example.fastmcp.json +0 -0
  311. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/mount_example.py +0 -0
  312. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/sampling.py +0 -0
  313. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/screenshot.fastmcp.json +0 -0
  314. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/screenshot.py +0 -0
  315. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/serializer.py +0 -0
  316. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/simple_echo.py +0 -0
  317. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/smart_home/README.md +0 -0
  318. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/smart_home/hub.fastmcp.json +0 -0
  319. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/smart_home/lights.fastmcp.json +0 -0
  320. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/smart_home/pyproject.toml +0 -0
  321. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/smart_home/src/smart_home/__init__.py +0 -0
  322. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/smart_home/src/smart_home/__main__.py +0 -0
  323. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/smart_home/src/smart_home/hub.py +0 -0
  324. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/smart_home/src/smart_home/lights/__init__.py +0 -0
  325. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/smart_home/src/smart_home/lights/hue_utils.py +0 -0
  326. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/smart_home/src/smart_home/lights/server.py +0 -0
  327. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/smart_home/src/smart_home/py.typed +0 -0
  328. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/smart_home/src/smart_home/settings.py +0 -0
  329. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/smart_home/uv.lock +0 -0
  330. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/tags_example.py +0 -0
  331. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/examples/text_me.py +0 -0
  332. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/justfile +0 -0
  333. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/scripts/auto_close_duplicates.py +0 -0
  334. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/__init__.py +0 -0
  335. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/cli/__init__.py +0 -0
  336. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/cli/claude.py +0 -0
  337. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/cli/cli.py +0 -0
  338. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/cli/install/__init__.py +0 -0
  339. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/cli/install/claude_code.py +0 -0
  340. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/cli/install/claude_desktop.py +0 -0
  341. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/cli/install/cursor.py +0 -0
  342. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/cli/install/mcp_json.py +0 -0
  343. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/cli/install/shared.py +0 -0
  344. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/cli/run.py +0 -0
  345. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/client/__init__.py +0 -0
  346. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/client/auth/__init__.py +0 -0
  347. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/client/auth/bearer.py +0 -0
  348. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/client/client.py +0 -0
  349. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/client/logging.py +0 -0
  350. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/client/messages.py +0 -0
  351. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/client/oauth_callback.py +0 -0
  352. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/client/progress.py +0 -0
  353. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/client/roots.py +0 -0
  354. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/client/sampling.py +0 -0
  355. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/client/transports.py +0 -0
  356. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/contrib/README.md +0 -0
  357. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
  358. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
  359. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
  360. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
  361. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/contrib/component_manager/README.md +0 -0
  362. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/contrib/component_manager/__init__.py +0 -0
  363. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/contrib/component_manager/component_manager.py +0 -0
  364. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/contrib/component_manager/component_service.py +0 -0
  365. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/contrib/component_manager/example.py +0 -0
  366. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/contrib/mcp_mixin/README.md +0 -0
  367. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
  368. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/contrib/mcp_mixin/example.py +0 -0
  369. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
  370. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/exceptions.py +0 -0
  371. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/experimental/sampling/__init__.py +0 -0
  372. {fastmcp-2.12.0rc1/src/fastmcp/server/auth/providers → fastmcp-2.12.2/src/fastmcp/experimental/sampling/handlers}/__init__.py +0 -0
  373. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/experimental/sampling/handlers/base.py +0 -0
  374. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/experimental/server/openapi/README.md +0 -0
  375. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/experimental/server/openapi/__init__.py +0 -0
  376. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/experimental/server/openapi/components.py +0 -0
  377. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/experimental/server/openapi/routing.py +0 -0
  378. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/experimental/server/openapi/server.py +0 -0
  379. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/experimental/utilities/openapi/README.md +0 -0
  380. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/experimental/utilities/openapi/__init__.py +0 -0
  381. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/experimental/utilities/openapi/director.py +0 -0
  382. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/experimental/utilities/openapi/formatters.py +0 -0
  383. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/experimental/utilities/openapi/json_schema_converter.py +0 -0
  384. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/experimental/utilities/openapi/models.py +0 -0
  385. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/experimental/utilities/openapi/parser.py +0 -0
  386. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/experimental/utilities/openapi/schemas.py +0 -0
  387. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/mcp_config.py +0 -0
  388. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/prompts/__init__.py +0 -0
  389. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/prompts/prompt.py +0 -0
  390. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/prompts/prompt_manager.py +0 -0
  391. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/py.typed +0 -0
  392. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/resources/__init__.py +0 -0
  393. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/resources/resource.py +0 -0
  394. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/resources/resource_manager.py +0 -0
  395. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/resources/template.py +0 -0
  396. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/resources/types.py +0 -0
  397. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/server/__init__.py +0 -0
  398. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/server/auth/__init__.py +0 -0
  399. {fastmcp-2.12.0rc1/src/fastmcp/utilities/mcp_server_config/v1 → fastmcp-2.12.2/src/fastmcp/server/auth/providers}/__init__.py +0 -0
  400. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/server/auth/providers/bearer.py +0 -0
  401. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/server/auth/redirect_validation.py +0 -0
  402. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/server/low_level.py +0 -0
  403. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/server/middleware/__init__.py +0 -0
  404. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/server/middleware/error_handling.py +0 -0
  405. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/server/middleware/logging.py +0 -0
  406. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/server/middleware/rate_limiting.py +0 -0
  407. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/server/middleware/timing.py +0 -0
  408. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/server/openapi.py +0 -0
  409. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/server/proxy.py +0 -0
  410. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/server/sampling/handler.py +0 -0
  411. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/tools/__init__.py +0 -0
  412. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/tools/tool_manager.py +0 -0
  413. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/tools/tool_transform.py +0 -0
  414. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/utilities/__init__.py +0 -0
  415. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/utilities/auth.py +0 -0
  416. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/utilities/cli.py +0 -0
  417. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/utilities/exceptions.py +0 -0
  418. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/utilities/http.py +0 -0
  419. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/utilities/inspect.py +0 -0
  420. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/utilities/json_schema.py +0 -0
  421. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/utilities/json_schema_type.py +0 -0
  422. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/utilities/logging.py +0 -0
  423. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/utilities/mcp_config.py +0 -0
  424. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
  425. {fastmcp-2.12.0rc1/src/fastmcp/utilities/mcp_server_config/v1/sources → fastmcp-2.12.2/src/fastmcp/utilities/mcp_server_config/v1}/__init__.py +0 -0
  426. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
  427. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
  428. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
  429. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
  430. {fastmcp-2.12.0rc1/tests → fastmcp-2.12.2/src/fastmcp/utilities/mcp_server_config/v1/sources}/__init__.py +0 -0
  431. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
  432. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
  433. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/utilities/openapi.py +0 -0
  434. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/src/fastmcp/utilities/tests.py +0 -0
  435. {fastmcp-2.12.0rc1/tests/client → fastmcp-2.12.2/tests}/__init__.py +0 -0
  436. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/cli/__init__.py +0 -0
  437. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/cli/test_cli.py +0 -0
  438. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/cli/test_config.py +0 -0
  439. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/cli/test_cursor.py +0 -0
  440. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/cli/test_install.py +0 -0
  441. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/cli/test_project_prepare.py +0 -0
  442. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/cli/test_run.py +0 -0
  443. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/cli/test_run_config.py +0 -0
  444. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/cli/test_run_with_uv.py +0 -0
  445. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/cli/test_server_args.py +0 -0
  446. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/cli/test_shared.py +0 -0
  447. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/cli/test_with_argv.py +0 -0
  448. {fastmcp-2.12.0rc1/tests/client/auth → fastmcp-2.12.2/tests/client}/__init__.py +0 -0
  449. {fastmcp-2.12.0rc1/tests/client/transports → fastmcp-2.12.2/tests/client/auth}/__init__.py +0 -0
  450. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/client/auth/test_oauth_client.py +0 -0
  451. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/client/auth/test_oauth_token_expiry.py +0 -0
  452. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/client/test_client.py +0 -0
  453. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/client/test_elicitation.py +0 -0
  454. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/client/test_logs.py +0 -0
  455. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/client/test_notifications.py +0 -0
  456. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/client/test_openapi_experimental.py +0 -0
  457. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/client/test_openapi_legacy.py +0 -0
  458. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/client/test_progress.py +0 -0
  459. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/client/test_roots.py +0 -0
  460. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/client/test_sampling.py +0 -0
  461. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/client/test_sse.py +0 -0
  462. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/client/test_stdio.py +0 -0
  463. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/client/test_streamable_http.py +0 -0
  464. {fastmcp-2.12.0rc1/tests/experimental → fastmcp-2.12.2/tests/client/transports}/__init__.py +0 -0
  465. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/client/transports/test_uv_transport.py +0 -0
  466. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/conftest.py +0 -0
  467. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/contrib/__init__.py +0 -0
  468. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/contrib/test_bulk_tool_caller.py +0 -0
  469. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/contrib/test_component_manager.py +0 -0
  470. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/contrib/test_mcp_mixin.py +0 -0
  471. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/deprecated/__init__.py +0 -0
  472. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/deprecated/test_bearer_auth_provider.py +0 -0
  473. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/deprecated/test_dependencies.py +0 -0
  474. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/deprecated/test_deprecated.py +0 -0
  475. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/deprecated/test_mount_import_arg_order.py +0 -0
  476. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/deprecated/test_mount_separators.py +0 -0
  477. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/deprecated/test_output_schema_false.py +0 -0
  478. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/deprecated/test_proxy_client.py +0 -0
  479. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/deprecated/test_resource_prefixes.py +0 -0
  480. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/deprecated/test_route_type_ignore.py +0 -0
  481. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/deprecated/test_settings.py +0 -0
  482. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/experimental/README.md +0 -0
  483. {fastmcp-2.12.0rc1/tests/experimental/openapi_parser → fastmcp-2.12.2/tests/experimental}/__init__.py +0 -0
  484. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/experimental/openapi_parser/README.md +0 -0
  485. {fastmcp-2.12.0rc1/tests/experimental/openapi_parser/server → fastmcp-2.12.2/tests/experimental/openapi_parser}/__init__.py +0 -0
  486. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/experimental/openapi_parser/conftest.py +0 -0
  487. {fastmcp-2.12.0rc1/tests/experimental/openapi_parser/utilities → fastmcp-2.12.2/tests/experimental/openapi_parser/server}/__init__.py +0 -0
  488. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/experimental/openapi_parser/server/openapi/__init__.py +0 -0
  489. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/experimental/openapi_parser/server/openapi/test_comprehensive.py +0 -0
  490. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/experimental/openapi_parser/server/openapi/test_deepobject_style.py +0 -0
  491. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/experimental/openapi_parser/server/openapi/test_end_to_end_compatibility.py +0 -0
  492. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/experimental/openapi_parser/server/openapi/test_openapi_features.py +0 -0
  493. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/experimental/openapi_parser/server/openapi/test_openapi_performance.py +0 -0
  494. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/experimental/openapi_parser/server/openapi/test_parameter_collisions.py +0 -0
  495. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/experimental/openapi_parser/server/openapi/test_performance_comparison.py +0 -0
  496. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/experimental/openapi_parser/server/openapi/test_server.py +0 -0
  497. {fastmcp-2.12.0rc1/tests/integration_tests → fastmcp-2.12.2/tests/experimental/openapi_parser/utilities}/__init__.py +0 -0
  498. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/experimental/openapi_parser/utilities/openapi/__init__.py +0 -0
  499. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/experimental/openapi_parser/utilities/openapi/conftest.py +0 -0
  500. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/experimental/openapi_parser/utilities/openapi/test_allof_requestbody.py +0 -0
  501. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/experimental/openapi_parser/utilities/openapi/test_director.py +0 -0
  502. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/experimental/openapi_parser/utilities/openapi/test_legacy_compatibility.py +0 -0
  503. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/experimental/openapi_parser/utilities/openapi/test_models.py +0 -0
  504. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/experimental/openapi_parser/utilities/openapi/test_nullable_fields.py +0 -0
  505. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/experimental/openapi_parser/utilities/openapi/test_parser.py +0 -0
  506. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/experimental/openapi_parser/utilities/openapi/test_schemas.py +0 -0
  507. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/experimental/openapi_parser/utilities/openapi/test_transitive_references.py +0 -0
  508. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/experimental/sampling/test_openai_handler.py +0 -0
  509. {fastmcp-2.12.0rc1/tests/integration_tests/auth → fastmcp-2.12.2/tests/integration_tests}/__init__.py +0 -0
  510. {fastmcp-2.12.0rc1/tests/prompts → fastmcp-2.12.2/tests/integration_tests/auth}/__init__.py +0 -0
  511. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/integration_tests/auth/test_github_provider_integration.py +0 -0
  512. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/integration_tests/conftest.py +0 -0
  513. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/integration_tests/test_github_mcp_remote.py +0 -0
  514. {fastmcp-2.12.0rc1/tests/resources → fastmcp-2.12.2/tests/prompts}/__init__.py +0 -0
  515. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/prompts/test_prompt.py +0 -0
  516. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/prompts/test_prompt_manager.py +0 -0
  517. {fastmcp-2.12.0rc1/tests/server → fastmcp-2.12.2/tests/resources}/__init__.py +0 -0
  518. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/resources/test_file_resources.py +0 -0
  519. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/resources/test_function_resources.py +0 -0
  520. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/resources/test_resource_manager.py +0 -0
  521. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/resources/test_resource_template.py +0 -0
  522. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/resources/test_resource_template_meta.py +0 -0
  523. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/resources/test_resources.py +0 -0
  524. {fastmcp-2.12.0rc1/tests/server/auth → fastmcp-2.12.2/tests/server}/__init__.py +0 -0
  525. {fastmcp-2.12.0rc1/tests/server/auth/providers → fastmcp-2.12.2/tests/server/auth}/__init__.py +0 -0
  526. {fastmcp-2.12.0rc1/tests/server/http → fastmcp-2.12.2/tests/server/auth/providers}/__init__.py +0 -0
  527. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/server/auth/test_redirect_validation.py +0 -0
  528. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/server/auth/test_static_token_verifier.py +0 -0
  529. {fastmcp-2.12.0rc1/tests/server/middleware → fastmcp-2.12.2/tests/server/http}/__init__.py +0 -0
  530. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/server/http/test_bearer_auth_backend.py +0 -0
  531. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/server/http/test_custom_routes.py +0 -0
  532. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/server/http/test_http_dependencies.py +0 -0
  533. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/server/http/test_http_middleware.py +0 -0
  534. {fastmcp-2.12.0rc1/tests/server/openapi → fastmcp-2.12.2/tests/server/middleware}/__init__.py +0 -0
  535. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/server/middleware/test_error_handling.py +0 -0
  536. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/server/middleware/test_logging.py +0 -0
  537. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/server/middleware/test_middleware.py +0 -0
  538. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/server/middleware/test_rate_limiting.py +0 -0
  539. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/server/middleware/test_timing.py +0 -0
  540. {fastmcp-2.12.0rc1/tests/server/proxy → fastmcp-2.12.2/tests/server/openapi}/__init__.py +0 -0
  541. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/server/openapi/conftest.py +0 -0
  542. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/server/openapi/test_advanced_behavior.py +0 -0
  543. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/server/openapi/test_basic_functionality.py +0 -0
  544. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/server/openapi/test_configuration.py +0 -0
  545. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/server/openapi/test_deepobject_style.py +0 -0
  546. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/server/openapi/test_description_propagation.py +0 -0
  547. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/server/openapi/test_explode_integration.py +0 -0
  548. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/server/openapi/test_openapi_compatibility.py +0 -0
  549. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/server/openapi/test_openapi_path_parameters.py +0 -0
  550. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/server/openapi/test_optional_parameters.py +0 -0
  551. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/server/openapi/test_parameter_collisions.py +0 -0
  552. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/server/openapi/test_route_map_fn.py +0 -0
  553. {fastmcp-2.12.0rc1/tests/tools → fastmcp-2.12.2/tests/server/proxy}/__init__.py +0 -0
  554. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/server/proxy/test_proxy_client.py +0 -0
  555. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/server/proxy/test_proxy_server.py +0 -0
  556. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/server/proxy/test_stateful_proxy_client.py +0 -0
  557. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/server/test_app_state.py +0 -0
  558. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/server/test_auth_integration.py +0 -0
  559. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/server/test_context.py +0 -0
  560. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/server/test_experimental_openapi_feature_flag.py +0 -0
  561. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/server/test_file_server.py +0 -0
  562. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/server/test_import_server.py +0 -0
  563. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/server/test_logging.py +0 -0
  564. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/server/test_mount.py +0 -0
  565. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/server/test_resource_prefix_formats.py +0 -0
  566. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/server/test_run_server.py +0 -0
  567. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/server/test_server.py +0 -0
  568. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/server/test_server_interactions.py +0 -0
  569. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/server/test_streamable_http_no_redirect.py +0 -0
  570. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/server/test_tool_annotations.py +0 -0
  571. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/server/test_tool_exclude_args.py +0 -0
  572. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/server/test_tool_transformation.py +0 -0
  573. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/test_examples.py +0 -0
  574. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/test_mcp_config.py +0 -0
  575. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/tools/test_tool.py +0 -0
  576. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/tools/test_tool_future_annotations.py +0 -0
  577. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/tools/test_tool_manager.py +0 -0
  578. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/tools/test_tool_transform.py +0 -0
  579. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/utilities/__init__.py +0 -0
  580. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/utilities/openapi/__init__.py +0 -0
  581. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/utilities/openapi/conftest.py +0 -0
  582. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/utilities/openapi/test_nullable_fields.py +0 -0
  583. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/utilities/openapi/test_openapi.py +0 -0
  584. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/utilities/openapi/test_openapi_advanced.py +0 -0
  585. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/utilities/openapi/test_openapi_fastapi.py +0 -0
  586. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/utilities/openapi/test_openapi_output_schemas.py +0 -0
  587. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/utilities/test_cli.py +0 -0
  588. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/utilities/test_components.py +0 -0
  589. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/utilities/test_inspect.py +0 -0
  590. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/utilities/test_json_schema.py +0 -0
  591. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/utilities/test_json_schema_type.py +0 -0
  592. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/utilities/test_logging.py +0 -0
  593. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/utilities/test_tests.py +0 -0
  594. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/utilities/test_typeadapter.py +0 -0
  595. {fastmcp-2.12.0rc1 → fastmcp-2.12.2}/tests/utilities/test_types.py +0 -0
@@ -73,7 +73,8 @@ jobs:
73
73
  run: uv sync --frozen
74
74
 
75
75
  - name: Run integration tests
76
- run: uv run pytest -v tests -m "integration"
76
+ # use longer per-test timeout than the default 3s
77
+ run: uv run pytest -v tests -m "integration" --timeout=15
77
78
  env:
78
79
  FASTMCP_GITHUB_TOKEN: ${{ secrets.FASTMCP_GITHUB_TOKEN }}
79
80
  FASTMCP_TEST_AUTH_GITHUB_CLIENT_ID: ${{ secrets.FASTMCP_TEST_AUTH_GITHUB_CLIENT_ID }}
@@ -48,6 +48,15 @@ When modifying MCP functionality, changes typically need to be applied across al
48
48
  - **Resource Templates** (`src/resources/` + `ResourceManager`)
49
49
  - **Prompts** (`src/prompts/` + `PromptManager`)
50
50
 
51
+ ## Writing Style
52
+
53
+ - Be brief and to the point. Do not regurgitate information that can easily be gleaned from the code, except to guide the reader to where the code is located.
54
+ - **NEVER** use "This isn't..." or "not just..." constructions. State what something IS directly. Avoid defensive writing patterns like:
55
+ - "This isn't X, it's Y" or "Not just X, but Y" → Just say "This is Y"
56
+ - "Not just about X" → State the actual purpose
57
+ - "We're not doing X, we're doing Y" → Just explain what you're doing
58
+ - Any variation of explaining what something isn't before what it is
59
+
51
60
  ## Testing Best Practices
52
61
 
53
62
  ### Testing Standards
@@ -59,6 +68,10 @@ When modifying MCP functionality, changes typically need to be applied across al
59
68
  - **NEVER** add `@pytest.mark.asyncio` to tests - `asyncio_mode = "auto"` is set globally
60
69
  - **ALWAYS** run pytest after significant changes
61
70
 
71
+ ### Inline Snapshots
72
+
73
+ FastMCP uses `inline-snapshot` for testing complex data structures. On first run with empty `snapshot()`, pytest will auto-populate the expected value. To update snapshots after intentional changes, run `pytest --inline-snapshot=fix`. This is particularly useful for testing JSON schemas and API responses.
74
+
62
75
  ### Always Use In-Memory Transport
63
76
 
64
77
  Pass FastMCP servers directly to clients for testing:
@@ -203,6 +216,7 @@ If something needs work, your review should help it get there through specific,
203
216
  ### Review Checklist
204
217
 
205
218
  Before approving, verify:
219
+
206
220
  - [ ] All required development workflow steps completed (uv sync, pre-commit, pytest)
207
221
  - [ ] Changes align with repository patterns and conventions
208
222
  - [ ] API changes are documented and backwards-compatible where possible
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fastmcp
3
- Version: 2.12.0rc1
3
+ Version: 2.12.2
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
@@ -22,13 +22,14 @@ Requires-Dist: cyclopts>=3.0.0
22
22
  Requires-Dist: exceptiongroup>=1.2.2
23
23
  Requires-Dist: httpx>=0.28.1
24
24
  Requires-Dist: mcp<2.0.0,>=1.12.4
25
- Requires-Dist: openai>=1.95.1
26
25
  Requires-Dist: openapi-core>=0.19.5
27
26
  Requires-Dist: openapi-pydantic>=0.5.1
28
27
  Requires-Dist: pydantic[email]>=2.11.7
29
28
  Requires-Dist: pyperclip>=1.9.0
30
29
  Requires-Dist: python-dotenv>=1.1.0
31
30
  Requires-Dist: rich>=13.9.4
31
+ Provides-Extra: openai
32
+ Requires-Dist: openai>=1.102.0; extra == 'openai'
32
33
  Provides-Extra: websockets
33
34
  Requires-Dist: websockets>=15.0.1; extra == 'websockets'
34
35
  Description-Content-Type: text/markdown
@@ -4,6 +4,174 @@ icon: "list-check"
4
4
  rss: true
5
5
  ---
6
6
 
7
+ <Update label="v2.12.1" description="2025-09-06">
8
+
9
+ **[v2.12.1: OAuth to Joy](https://github.com/jlowin/fastmcp/releases/tag/v2.12.1)**
10
+
11
+ FastMCP 2.12.1 strengthens the OAuth proxy implementation based on extensive community testing and feedback. This release improves client storage reliability, adds PKCE forwarding for enhanced security, introduces configurable token endpoint authentication methods, and expands scope handling—all addressing real-world integration challenges discovered since 2.12.0. The enhanced test suite with mock providers ensures these improvements are robust and maintainable.
12
+
13
+ ## Breaking Changes
14
+ - **OAuth Proxy**: Users of built-in IDP integrations should note that `resource_server_url` has been renamed to `base_url` for clarity and consistency
15
+
16
+ ## What's Changed
17
+ ### Enhancements 🔧
18
+ * Make openai dependency optional by [@jlowin](https://github.com/jlowin) in [#1701](https://github.com/jlowin/fastmcp/pull/1701)
19
+ * Remove orphaned OAuth proxy code by [@jlowin](https://github.com/jlowin) in [#1722](https://github.com/jlowin/fastmcp/pull/1722)
20
+ * Expose valid scopes from OAuthProxy metadata by [@dmikusa](https://github.com/dmikusa) in [#1717](https://github.com/jlowin/fastmcp/pull/1717)
21
+ * OAuth proxy PKCE forwarding by [@jlowin](https://github.com/jlowin) in [#1733](https://github.com/jlowin/fastmcp/pull/1733)
22
+ * Add token_endpoint_auth_method parameter to OAuthProxy by [@jlowin](https://github.com/jlowin) in [#1736](https://github.com/jlowin/fastmcp/pull/1736)
23
+ * Clean up and enhance OAuth proxy tests with mock provider by [@jlowin](https://github.com/jlowin) in [#1738](https://github.com/jlowin/fastmcp/pull/1738)
24
+ ### Fixes 🐞
25
+ * refactor: replace auth provider registry with ImportString by [@jlowin](https://github.com/jlowin) in [#1710](https://github.com/jlowin/fastmcp/pull/1710)
26
+ * Fix OAuth resource URL handling and WWW-Authenticate header by [@jlowin](https://github.com/jlowin) in [#1706](https://github.com/jlowin/fastmcp/pull/1706)
27
+ * Fix OAuth proxy client storage and add retry logic by [@jlowin](https://github.com/jlowin) in [#1732](https://github.com/jlowin/fastmcp/pull/1732)
28
+ ### Docs 📚
29
+ * Fix documentation: use StreamableHttpTransport for headers in testing by [@jlowin](https://github.com/jlowin) in [#1702](https://github.com/jlowin/fastmcp/pull/1702)
30
+ * docs: add performance warnings for mounted servers and proxies by [@strawgate](https://github.com/strawgate) in [#1669](https://github.com/jlowin/fastmcp/pull/1669)
31
+ * Update documentation around scopes for google by [@jlowin](https://github.com/jlowin) in [#1703](https://github.com/jlowin/fastmcp/pull/1703)
32
+ * Add deployment information to quickstart by [@seanpwlms](https://github.com/seanpwlms) in [#1433](https://github.com/jlowin/fastmcp/pull/1433)
33
+ * Update quickstart by [@jlowin](https://github.com/jlowin) in [#1728](https://github.com/jlowin/fastmcp/pull/1728)
34
+ * Add development docs for FastMCP by [@jlowin](https://github.com/jlowin) in [#1719](https://github.com/jlowin/fastmcp/pull/1719)
35
+ ### Other Changes 🦾
36
+ * Set generics without bounds to default=Any by [@strawgate](https://github.com/strawgate) in [#1648](https://github.com/jlowin/fastmcp/pull/1648)
37
+
38
+ ## New Contributors
39
+ * [@dmikusa](https://github.com/dmikusa) made their first contribution in [#1717](https://github.com/jlowin/fastmcp/pull/1717)
40
+ * [@seanpwlms](https://github.com/seanpwlms) made their first contribution in [#1433](https://github.com/jlowin/fastmcp/pull/1433)
41
+
42
+ **Full Changelog**: [v2.12.0...v2.12.1](https://github.com/jlowin/fastmcp/compare/v2.12.0...v2.12.1)
43
+
44
+ </Update>
45
+
46
+ <Update label="v2.12.0" description="2025-08-31">
47
+
48
+ **[v2.12.0: Auth to the Races](https://github.com/jlowin/fastmcp/releases/tag/v2.12.0)**
49
+
50
+ FastMCP 2.12 represents one of our most significant releases to date, both in scope and community involvement. After extensive testing and iteration with the community, we're shipping major improvements to authentication, configuration, and MCP feature adoption.
51
+
52
+ 🔐 **OAuth Proxy for Broader Provider Support** addresses a fundamental challenge: while MCP requires Dynamic Client Registration (DCR), many popular OAuth providers don't support it. The new OAuth proxy bridges this gap, enabling FastMCP servers to authenticate with providers like GitHub, Google, WorkOS, and Azure through minimal configuration. These native integrations ship today, with more providers planned based on community needs.
53
+
54
+ 📋 **Declarative JSON Configuration** introduces a standardized, portable way to describe and deploy MCP servers. The `fastmcp.json` configuration file becomes the single source of truth for dependencies, transport settings, entrypoints, and server metadata. This foundation sets the stage for future capabilities like transformations and remote sources, moving toward a world where MCP servers are as portable and shareable as container images.
55
+
56
+ 🧠 **Sampling API Fallback** tackles the chicken-and-egg problem limiting adoption of advanced MCP features. Sampling—where servers request LLM completions from clients—is powerful but underutilized due to limited client support. FastMCP now lets server authors define fallback handlers that generate sampling completions server-side when clients don't support the feature, encouraging adoption while maintaining compatibility.
57
+
58
+ This release took longer than usual to ship, and for good reason: the community's aggressive testing and feedback on the authentication system helped us reach a level of stability we're confident in. There's certainly more work ahead, but these foundations position FastMCP to handle increasingly complex use cases while remaining approachable for developers.
59
+
60
+ Thank you to our new contributors and everyone who tested preview builds. Your feedback directly shaped these features.
61
+
62
+ ## What's Changed
63
+ ### New Features 🎉
64
+ * Add OAuth proxy that allows authentication with social IDPs without DCR support by [@jlowin](https://github.com/jlowin) in [#1434](https://github.com/jlowin/fastmcp/pull/1434)
65
+ * feat: introduce declarative JSON configuration system by [@jlowin](https://github.com/jlowin) in [#1517](https://github.com/jlowin/fastmcp/pull/1517)
66
+ * ✨ Fallback to a Completions API when Sampling is not available by [@strawgate](https://github.com/strawgate) in [#1145](https://github.com/jlowin/fastmcp/pull/1145)
67
+ * Implement typed source system for FastMCP declarative configuration by [@jlowin](https://github.com/jlowin) in [#1607](https://github.com/jlowin/fastmcp/pull/1607)
68
+ ### Enhancements 🔧
69
+ * Support importing custom_route endpoints when mounting servers by [@jlowin](https://github.com/jlowin) in [#1470](https://github.com/jlowin/fastmcp/pull/1470)
70
+ * Remove unnecessary asserts by [@jlowin](https://github.com/jlowin) in [#1484](https://github.com/jlowin/fastmcp/pull/1484)
71
+ * Add Claude issue triage by [@jlowin](https://github.com/jlowin) in [#1510](https://github.com/jlowin/fastmcp/pull/1510)
72
+ * Inline dedupe prompt by [@jlowin](https://github.com/jlowin) in [#1512](https://github.com/jlowin/fastmcp/pull/1512)
73
+ * Improve stdio and mcp_config clean-up by [@strawgate](https://github.com/strawgate) in [#1444](https://github.com/jlowin/fastmcp/pull/1444)
74
+ * involve kwargs to pass parameters on creating RichHandler for logging customization. by [@itaru2622](https://github.com/itaru2622) in [#1504](https://github.com/jlowin/fastmcp/pull/1504)
75
+ * Move SDK docs generation to post-merge workflow by [@jlowin](https://github.com/jlowin) in [#1513](https://github.com/jlowin/fastmcp/pull/1513)
76
+ * Improve label triage guidance by [@jlowin](https://github.com/jlowin) in [#1516](https://github.com/jlowin/fastmcp/pull/1516)
77
+ * Add code review guidelines for agents by [@jlowin](https://github.com/jlowin) in [#1520](https://github.com/jlowin/fastmcp/pull/1520)
78
+ * Remove trailing slash in unit tests by [@jlowin](https://github.com/jlowin) in [#1535](https://github.com/jlowin/fastmcp/pull/1535)
79
+ * Update OAuth callback UI branding by [@jlowin](https://github.com/jlowin) in [#1536](https://github.com/jlowin/fastmcp/pull/1536)
80
+ * Fix Marvin workflow to support development tools by [@jlowin](https://github.com/jlowin) in [#1537](https://github.com/jlowin/fastmcp/pull/1537)
81
+ * Add mounted_components_raise_on_load_error setting for debugging by [@jlowin](https://github.com/jlowin) in [#1534](https://github.com/jlowin/fastmcp/pull/1534)
82
+ * feat: Add --workspace flag to fastmcp install cursor by [@jlowin](https://github.com/jlowin) in [#1522](https://github.com/jlowin/fastmcp/pull/1522)
83
+ * switch from `pyright` to `ty` by [@zzstoatzz](https://github.com/zzstoatzz) in [#1545](https://github.com/jlowin/fastmcp/pull/1545)
84
+ * feat: trigger Marvin workflow on PR body content by [@jlowin](https://github.com/jlowin) in [#1549](https://github.com/jlowin/fastmcp/pull/1549)
85
+ * Add WorkOS and Azure OAuth providers by [@jlowin](https://github.com/jlowin) in [#1550](https://github.com/jlowin/fastmcp/pull/1550)
86
+ * Adjust timeout for slow MCP Server shutdown test by [@strawgate](https://github.com/strawgate) in [#1561](https://github.com/jlowin/fastmcp/pull/1561)
87
+ * Update banner by [@jlowin](https://github.com/jlowin) in [#1567](https://github.com/jlowin/fastmcp/pull/1567)
88
+ * Added import of AuthProxy to auth __init__ by [@KaliszS](https://github.com/KaliszS) in [#1568](https://github.com/jlowin/fastmcp/pull/1568)
89
+ * Add configurable redirect URI validation for OAuth providers by [@jlowin](https://github.com/jlowin) in [#1582](https://github.com/jlowin/fastmcp/pull/1582)
90
+ * Remove invalid-argument-type ignore and fix type errors by [@jlowin](https://github.com/jlowin) in [#1588](https://github.com/jlowin/fastmcp/pull/1588)
91
+ * Remove generate-schema from public CLI by [@jlowin](https://github.com/jlowin) in [#1591](https://github.com/jlowin/fastmcp/pull/1591)
92
+ * Skip flaky windows test / mulit-client garbage collection by [@jlowin](https://github.com/jlowin) in [#1592](https://github.com/jlowin/fastmcp/pull/1592)
93
+ * Add setting to disable logging configuration by [@isra17](https://github.com/isra17) in [#1575](https://github.com/jlowin/fastmcp/pull/1575)
94
+ * Improve debug logging for nested Servers / Clients by [@strawgate](https://github.com/strawgate) in [#1604](https://github.com/jlowin/fastmcp/pull/1604)
95
+ * Add GitHub pull request template by [@strawgate](https://github.com/strawgate) in [#1581](https://github.com/jlowin/fastmcp/pull/1581)
96
+ * chore: Automate docs and schema updates via PRs by [@jlowin](https://github.com/jlowin) in [#1611](https://github.com/jlowin/fastmcp/pull/1611)
97
+ * Experiment with haiku for limited workflows by [@jlowin](https://github.com/jlowin) in [#1613](https://github.com/jlowin/fastmcp/pull/1613)
98
+ * feat: Improve GitHub workflow automation for schema and SDK docs by [@jlowin](https://github.com/jlowin) in [#1615](https://github.com/jlowin/fastmcp/pull/1615)
99
+ * Consolidate server loading logic into FileSystemSource by [@jlowin](https://github.com/jlowin) in [#1614](https://github.com/jlowin/fastmcp/pull/1614)
100
+ * Prevent Haiku Marvin from commenting when there are no duplicates by [@jlowin](https://github.com/jlowin) in [#1622](https://github.com/jlowin/fastmcp/pull/1622)
101
+ * chore: Add clarifying note to automated PR bodies by [@jlowin](https://github.com/jlowin) in [#1623](https://github.com/jlowin/fastmcp/pull/1623)
102
+ * feat: introduce inline snapshots by [@strawgate](https://github.com/strawgate) in [#1605](https://github.com/jlowin/fastmcp/pull/1605)
103
+ * Improve fastmcp.json environment configuration and project-based deployments by [@jlowin](https://github.com/jlowin) in [#1631](https://github.com/jlowin/fastmcp/pull/1631)
104
+ * fix: allow passing query params in OAuthProxy upstream authorization url by [@danb27](https://github.com/danb27) in [#1630](https://github.com/jlowin/fastmcp/pull/1630)
105
+ * Support multiple --with-editable flags in CLI commands by [@jlowin](https://github.com/jlowin) in [#1634](https://github.com/jlowin/fastmcp/pull/1634)
106
+ * feat: support comma separated oauth scopes by [@jlowin](https://github.com/jlowin) in [#1642](https://github.com/jlowin/fastmcp/pull/1642)
107
+ * Add allowed_client_redirect_uris to OAuth provider subclasses by [@jlowin](https://github.com/jlowin) in [#1662](https://github.com/jlowin/fastmcp/pull/1662)
108
+ * Consolidate CLI config parsing and prevent infinite loops by [@jlowin](https://github.com/jlowin) in [#1660](https://github.com/jlowin/fastmcp/pull/1660)
109
+ * Internal refactor: mcp server config by [@jlowin](https://github.com/jlowin) in [#1672](https://github.com/jlowin/fastmcp/pull/1672)
110
+ * Refactor Environment to support multiple runtime types by [@jlowin](https://github.com/jlowin) in [#1673](https://github.com/jlowin/fastmcp/pull/1673)
111
+ * Add type field to Environment base class by [@jlowin](https://github.com/jlowin) in [#1676](https://github.com/jlowin/fastmcp/pull/1676)
112
+ ### Fixes 🐞
113
+ * Fix breaking change: restore output_schema=False compatibility by [@jlowin](https://github.com/jlowin) in [#1482](https://github.com/jlowin/fastmcp/pull/1482)
114
+ * Fix #1506: Update tool filtering documentation from _meta to meta by [@maybenotconnor](https://github.com/maybenotconnor) in [#1511](https://github.com/jlowin/fastmcp/pull/1511)
115
+ * Fix pytest warnings by [@jlowin](https://github.com/jlowin) in [#1559](https://github.com/jlowin/fastmcp/pull/1559)
116
+ * nest schemas under assets by [@jlowin](https://github.com/jlowin) in [#1593](https://github.com/jlowin/fastmcp/pull/1593)
117
+ * Skip flaky windows test by [@jlowin](https://github.com/jlowin) in [#1596](https://github.com/jlowin/fastmcp/pull/1596)
118
+ * ACTUALLY move schemas to fastmcp.json by [@jlowin](https://github.com/jlowin) in [#1597](https://github.com/jlowin/fastmcp/pull/1597)
119
+ * Fix and centralize CLI path resolution by [@jlowin](https://github.com/jlowin) in [#1590](https://github.com/jlowin/fastmcp/pull/1590)
120
+ * Remove client info modifications by [@jlowin](https://github.com/jlowin) in [#1620](https://github.com/jlowin/fastmcp/pull/1620)
121
+ * Fix $defs being discarded in input schema of transformed tool by [@pldesch-chift](https://github.com/pldesch-chift) in [#1578](https://github.com/jlowin/fastmcp/pull/1578)
122
+ * Fix enum elicitation to use inline schemas for MCP compatibility by [@jlowin](https://github.com/jlowin) in [#1632](https://github.com/jlowin/fastmcp/pull/1632)
123
+ * Reuse session for `StdioTransport` in `Client.new` by [@strawgate](https://github.com/strawgate) in [#1635](https://github.com/jlowin/fastmcp/pull/1635)
124
+ * Feat: Configurable LoggingMiddleware payload serialization by [@vl-kp](https://github.com/vl-kp) in [#1636](https://github.com/jlowin/fastmcp/pull/1636)
125
+ * Fix OAuth redirect URI validation for DCR compatibility by [@jlowin](https://github.com/jlowin) in [#1661](https://github.com/jlowin/fastmcp/pull/1661)
126
+ * Add default scope handling in OAuth proxy by [@romanusyk](https://github.com/romanusyk) in [#1667](https://github.com/jlowin/fastmcp/pull/1667)
127
+ * Fix OAuth token expiry handling by [@jlowin](https://github.com/jlowin) in [#1671](https://github.com/jlowin/fastmcp/pull/1671)
128
+ * Add resource_server_url parameter to OAuth proxy providers by [@jlowin](https://github.com/jlowin) in [#1682](https://github.com/jlowin/fastmcp/pull/1682)
129
+ ### Breaking Changes 🛫
130
+ * Enhance inspect command with structured output and format options by [@jlowin](https://github.com/jlowin) in [#1481](https://github.com/jlowin/fastmcp/pull/1481)
131
+ ### Docs 📚
132
+ * Update changelog by [@jlowin](https://github.com/jlowin) in [#1453](https://github.com/jlowin/fastmcp/pull/1453)
133
+ * Update banner by [@jlowin](https://github.com/jlowin) in [#1472](https://github.com/jlowin/fastmcp/pull/1472)
134
+ * Update logo files by [@jlowin](https://github.com/jlowin) in [#1473](https://github.com/jlowin/fastmcp/pull/1473)
135
+ * Update deployment docs by [@jlowin](https://github.com/jlowin) in [#1486](https://github.com/jlowin/fastmcp/pull/1486)
136
+ * Update FastMCP Cloud screenshot by [@jlowin](https://github.com/jlowin) in [#1487](https://github.com/jlowin/fastmcp/pull/1487)
137
+ * Update authentication note in docs by [@jlowin](https://github.com/jlowin) in [#1488](https://github.com/jlowin/fastmcp/pull/1488)
138
+ * chore: Update installation.mdx version snippet by [@thomas-te](https://github.com/thomas-te) in [#1496](https://github.com/jlowin/fastmcp/pull/1496)
139
+ * Update fastmcp cloud server requirements by [@jlowin](https://github.com/jlowin) in [#1497](https://github.com/jlowin/fastmcp/pull/1497)
140
+ * Fix oauth pyright type checking by [@strawgate](https://github.com/strawgate) in [#1498](https://github.com/jlowin/fastmcp/pull/1498)
141
+ * docs: Fix type annotation in return value documentation by [@MaikelVeen](https://github.com/MaikelVeen) in [#1499](https://github.com/jlowin/fastmcp/pull/1499)
142
+ * Fix PromptMessage usage in docs example by [@jlowin](https://github.com/jlowin) in [#1515](https://github.com/jlowin/fastmcp/pull/1515)
143
+ * Create CODE_OF_CONDUCT.md by [@jlowin](https://github.com/jlowin) in [#1523](https://github.com/jlowin/fastmcp/pull/1523)
144
+ * Fixed wrong import path in new docs page by [@KaliszS](https://github.com/KaliszS) in [#1538](https://github.com/jlowin/fastmcp/pull/1538)
145
+ * Document symmetric key JWT verification support by [@jlowin](https://github.com/jlowin) in [#1586](https://github.com/jlowin/fastmcp/pull/1586)
146
+ * Update fastmcp.json schema path by [@jlowin](https://github.com/jlowin) in [#1595](https://github.com/jlowin/fastmcp/pull/1595)
147
+ ### Dependencies 📦
148
+ * Bump actions/create-github-app-token from 1 to 2 by [@dependabot](https://github.com/dependabot)[bot] in [#1436](https://github.com/jlowin/fastmcp/pull/1436)
149
+ * Bump astral-sh/setup-uv from 4 to 6 by [@dependabot](https://github.com/dependabot)[bot] in [#1532](https://github.com/jlowin/fastmcp/pull/1532)
150
+ * Bump actions/checkout from 4 to 5 by [@dependabot](https://github.com/dependabot)[bot] in [#1533](https://github.com/jlowin/fastmcp/pull/1533)
151
+ ### Other Changes 🦾
152
+ * Add dedupe workflow by [@jlowin](https://github.com/jlowin) in [#1454](https://github.com/jlowin/fastmcp/pull/1454)
153
+ * Update AGENTS.md by [@jlowin](https://github.com/jlowin) in [#1471](https://github.com/jlowin/fastmcp/pull/1471)
154
+ * Give Marvin the power of the Internet by [@strawgate](https://github.com/strawgate) in [#1475](https://github.com/jlowin/fastmcp/pull/1475)
155
+ * Update `just` error message for static checks by [@jlowin](https://github.com/jlowin) in [#1483](https://github.com/jlowin/fastmcp/pull/1483)
156
+ * Remove labeler by [@jlowin](https://github.com/jlowin) in [#1509](https://github.com/jlowin/fastmcp/pull/1509)
157
+ * update aproto server to handle rich links by [@zzstoatzz](https://github.com/zzstoatzz) in [#1556](https://github.com/jlowin/fastmcp/pull/1556)
158
+ * fix: enable triage bot for fork PRs using pull_request_target by [@jlowin](https://github.com/jlowin) in [#1557](https://github.com/jlowin/fastmcp/pull/1557)
159
+
160
+ ## New Contributors
161
+ * [@thomas-te](https://github.com/thomas-te) made their first contribution in [#1496](https://github.com/jlowin/fastmcp/pull/1496)
162
+ * [@maybenotconnor](https://github.com/maybenotconnor) made their first contribution in [#1511](https://github.com/jlowin/fastmcp/pull/1511)
163
+ * [@MaikelVeen](https://github.com/MaikelVeen) made their first contribution in [#1499](https://github.com/jlowin/fastmcp/pull/1499)
164
+ * [@KaliszS](https://github.com/KaliszS) made their first contribution in [#1538](https://github.com/jlowin/fastmcp/pull/1538)
165
+ * [@isra17](https://github.com/isra17) made their first contribution in [#1575](https://github.com/jlowin/fastmcp/pull/1575)
166
+ * [@marvin-context-protocol](https://github.com/marvin-context-protocol)[bot] made their first contribution in [#1616](https://github.com/jlowin/fastmcp/pull/1616)
167
+ * [@pldesch-chift](https://github.com/pldesch-chift) made their first contribution in [#1578](https://github.com/jlowin/fastmcp/pull/1578)
168
+ * [@vl-kp](https://github.com/vl-kp) made their first contribution in [#1636](https://github.com/jlowin/fastmcp/pull/1636)
169
+ * [@romanusyk](https://github.com/romanusyk) made their first contribution in [#1667](https://github.com/jlowin/fastmcp/pull/1667)
170
+
171
+ **Full Changelog**: [v2.11.3...v2.12.0](https://github.com/jlowin/fastmcp/compare/v2.11.3...v2.12.0)
172
+
173
+ </Update>
174
+
7
175
  <Update label="v2.11.3" description="2025-08-11">
8
176
 
9
177
  **[v2.11.3: API-tite for Change](https://github.com/jlowin/fastmcp/releases/tag/v2.11.3)**
@@ -194,7 +194,7 @@ MCP_AUTH_TOKEN=secret uvicorn app:app --host 0.0.0.0 --port 8000
194
194
 
195
195
  ## Testing Your Deployment
196
196
 
197
- Once your server is deployed, you'll need to verify it's accessible and functioning correctly. For comprehensive testing strategies including connectivity tests, client testing, and authentication testing, see the [Testing Your Server](/deployment/testing) guide.
197
+ Once your server is deployed, you'll need to verify it's accessible and functioning correctly. For comprehensive testing strategies including connectivity tests, client testing, and authentication testing, see the [Testing Your Server](/development/tests) guide.
198
198
 
199
199
  ## Hosting Your Server
200
200
 
@@ -0,0 +1,187 @@
1
+ ---
2
+ title: "Contributing"
3
+ description: "Development workflow for FastMCP contributors"
4
+ icon: code-pull-request
5
+ ---
6
+
7
+ Contributing to FastMCP means joining a community that values clean, maintainable code and thoughtful API design. All contributions are valued - from fixing typos in documentation to implementing major features.
8
+
9
+ ## Issues
10
+
11
+ ### Issue First, Code Second
12
+
13
+ **Every pull request requires a corresponding issue - no exceptions.** This requirement creates a collaborative space where approach, scope, and alignment are established before code is written. Issues serve as design documents where maintainers and contributors discuss implementation strategy, identify potential conflicts with existing patterns, and ensure proposed changes advance FastMCP's vision.
14
+
15
+ **FastMCP is an opinionated framework, not a kitchen sink.** The maintainers have strong beliefs about what FastMCP should and shouldn't do. Just because something takes N lines of code and you want it in fewer lines doesn't mean FastMCP should take on the maintenance burden or endorse that pattern. This is judged at the maintainers' discretion.
16
+
17
+ Use issues to understand scope BEFORE opening PRs. The issue discussion determines whether a feature belongs in core, contrib, or not at all.
18
+
19
+ ### Writing Good Issues
20
+
21
+ FastMCP is an extremely highly-trafficked repository maintained by a very small team. Issues that appear to transfer burden to maintainers without any effort to validate the problem will be closed. Please help the maintainers help you by always providing a minimal reproducible example and clearly describing the problem.
22
+
23
+ **LLM-generated issues will be closed immediately.** Issues that contain paragraphs of unnecessary explanation, verbose problem descriptions, or obvious LLM authorship patterns obfuscate the actual problem and transfer burden to maintainers.
24
+
25
+ Write clear, concise issues that:
26
+ - State the problem directly
27
+ - Provide a minimal reproducible example
28
+ - Skip unnecessary background or context
29
+ - Take responsibility for clear communication
30
+
31
+ Issues may be labeled "Invalid" simply due to confusion caused by verbosity or not adhering to the guidelines outlined here.
32
+
33
+ ## Pull Requests
34
+
35
+ PRs that deviate from FastMCP's core principles will be rejected regardless of implementation quality. **PRs are NOT for iterating on ideas** - they should only be opened for ideas that already have a bias toward acceptance based on issue discussion.
36
+
37
+
38
+ ### Development Environment
39
+
40
+ #### Installation
41
+
42
+ To contribute to FastMCP, you'll need to set up a development environment with all necessary tools and dependencies.
43
+
44
+ ```bash
45
+ # Clone the repository
46
+ git clone https://github.com/jlowin/fastmcp.git
47
+ cd fastmcp
48
+
49
+ # Install all dependencies including dev tools
50
+ uv sync
51
+
52
+ # Install pre-commit hooks
53
+ uv run pre-commit install
54
+ ```
55
+
56
+ In addition, some development commands require [just](https://github.com/casey/just) to be installed.
57
+
58
+ Pre-commit hooks will run automatically on every commit to catch issues before they reach CI. If you see failures, fix them before committing - never commit broken code expecting to fix it later.
59
+
60
+ ### Development Standards
61
+
62
+ #### Scope
63
+
64
+ Large pull requests create review bottlenecks and quality risks. Unless you're fixing a discrete bug or making an incredibly well-scoped change, keep PRs small and focused.
65
+
66
+ A PR that changes 50 lines across 3 files can be thoroughly reviewed in minutes. A PR that changes 500 lines across 20 files requires hours of careful analysis and often hides subtle issues.
67
+
68
+ Breaking large features into smaller PRs:
69
+ - Creates better review experiences
70
+ - Makes git history clear
71
+ - Simplifies debugging with bisect
72
+ - Reduces merge conflicts
73
+ - Gets your code merged faster
74
+
75
+ #### Code Quality
76
+
77
+ FastMCP values clarity over cleverness. Every line you write will be maintained by someone else - possibly years from now, possibly without context about your decisions.
78
+
79
+ **PRs can be rejected for two opposing reasons:**
80
+ 1. **Insufficient quality** - Code that doesn't meet our standards for clarity, maintainability, or idiomaticity
81
+ 2. **Overengineering** - Code that is overbearing, unnecessarily complex, or tries to be too clever
82
+
83
+ The focus is on idiomatic, high-quality Python. FastMCP uses patterns like `NotSet` type as an alternative to `None` in certain situations - follow existing patterns.
84
+
85
+ #### Required Practices
86
+
87
+ **Full type annotations** on all functions and methods. They catch bugs before runtime and serve as inline documentation.
88
+
89
+ **Async/await patterns** for all I/O operations. Even if your specific use case doesn't need concurrency, consistency means users can compose features without worrying about blocking operations.
90
+
91
+ **Descriptive names** make code self-documenting. `auth_token` is clear; `tok` requires mental translation.
92
+
93
+ **Specific exception types** make error handling predictable. Catching `ValueError` tells readers exactly what error you expect. Never use bare `except` clauses.
94
+
95
+ #### Anti-Patterns to Avoid
96
+
97
+ **Complex one-liners** are hard to debug and modify. Break operations into clear steps.
98
+
99
+ **Mutable default arguments** cause subtle bugs. Use `None` as the default and create the mutable object inside the function.
100
+
101
+ **Breaking established patterns** confuses readers. If you must deviate, discuss in the issue first.
102
+
103
+ ### Pre-Commit Checks
104
+
105
+ ```bash
106
+ # Runs automatically on commit, or manually:
107
+ uv run pre-commit run --all-files
108
+ ```
109
+
110
+ This runs three critical tools:
111
+ - **Ruff**: Linting and formatting
112
+ - **ty**: Static type checking
113
+ - **Pytest**: Core test suite
114
+
115
+ CI will reject PRs that fail these checks. Always run them locally first.
116
+
117
+ ### Testing
118
+
119
+ Tests are documentation that shows how features work. Good tests give reviewers confidence and help future maintainers understand intent.
120
+
121
+ ```bash
122
+ # Run specific test directory
123
+ uv run pytest tests/server/ -v
124
+
125
+ # Run all tests before submitting PR
126
+ uv run pytest
127
+ ```
128
+
129
+ Every new feature needs tests. See the [Testing Guide](/development/tests) for patterns and requirements.
130
+
131
+ ### Documentation
132
+
133
+ A feature doesn't exist unless it's documented. Note that FastMCP's hosted documentation always tracks the main branch - users who want historical documentation can clone the repo, checkout a specific tag, and host it themselves.
134
+
135
+ ```bash
136
+ # Preview documentation locally
137
+ just docs
138
+ ```
139
+
140
+ Documentation requirements:
141
+ - **Explain concepts in prose first** - Code without context is just syntax
142
+ - **Complete, runnable examples** - Every code block should be copy-pasteable
143
+ - **Register in docs.json** - Makes pages appear in navigation
144
+ - **Version badges** - Mark when features were added using `<VersionBadge />`
145
+
146
+ #### SDK Documentation
147
+
148
+ FastMCP's SDK documentation is auto-generated from the source code docstrings and type annotations. It is automatically updated on every merge to main by a GitHub Actions workflow, so users are *not* responsible for keeping the documentation up to date. However, to generate it proactively, you can use the following command:
149
+
150
+ ```bash
151
+ just api-ref-all
152
+ ```
153
+
154
+ ### Submitting Your PR
155
+
156
+ #### Before Submitting
157
+
158
+ 1. **Run all checks**: `uv run pre-commit run --all-files && uv run pytest`
159
+ 2. **Keep scope small**: One feature or fix per PR
160
+ 3. **Write clear description**: Your PR description becomes permanent documentation
161
+ 4. **Update docs**: Include documentation for API changes
162
+
163
+ #### PR Description
164
+
165
+ Write PR descriptions that explain:
166
+ - What problem you're solving
167
+ - Why you chose this approach
168
+ - Any trade-offs or alternatives considered
169
+ - Migration path for breaking changes
170
+
171
+ Focus on the "why" - the code shows the "what". Keep it concise but complete.
172
+
173
+ #### What We Look For
174
+
175
+ **Framework Philosophy**: FastMCP is NOT trying to do all things or provide all shortcuts. Features are rejected when they don't align with the framework's vision, even if perfectly implemented. The burden of proof is on the PR to demonstrate value.
176
+
177
+ **Code Quality**: We verify code follows existing patterns. Consistency reduces cognitive load. When every module works similarly, developers understand new code quickly.
178
+
179
+ **Test Coverage**: Not every line needs testing, but every behavior does. Tests document intent and protect against regressions.
180
+
181
+ **Breaking Changes**: May be acceptable in minor versions but must be clearly documented. See the [versioning policy](/development/releases#versioning-policy).
182
+
183
+ ## Special Modules
184
+
185
+ **`contrib`**: Community-maintained patterns and utilities. Original authors maintain their contributions. Not representative of the core framework.
186
+
187
+ **`experimental`**: Maintainer-developed features that may preview future functionality. Can break or be deleted at any time without notice. Pin your FastMCP version when using these features.
@@ -0,0 +1,79 @@
1
+ ---
2
+ title: "Releases"
3
+ description: "FastMCP versioning and release process"
4
+ icon: "truck-fast"
5
+ ---
6
+
7
+ FastMCP releases frequently to deliver features quickly in the rapidly evolving MCP ecosystem. We use semantic versioning pragmatically - the Model Context Protocol is young, patterns are still emerging, and waiting for perfect stability would mean missing opportunities to empower developers with better tools.
8
+
9
+ ## Versioning Policy
10
+
11
+ ### Semantic Versioning
12
+
13
+ **Major (x.0.0)**: Complete API redesigns
14
+
15
+ Major versions represent fundamental shifts. FastMCP 2.x is entirely different from 1.x in both implementation and design philosophy.
16
+
17
+ **Minor (2.x.0)**: New features and evolution
18
+
19
+ <Warning>
20
+ Unlike traditional semantic versioning, minor versions **may** include [breaking changes](#breaking-changes) when necessary for the ecosystem's evolution. This flexibility is essential in a young ecosystem where perfect backwards compatibility would prevent important improvements.
21
+ </Warning>
22
+
23
+ FastMCP always targets the most current MCP Protocol version. Breaking changes in the MCP spec or MCP SDK automatically flow through to FastMCP - we prioritize staying current with the latest features and conventions over maintaining compatibility with older protocol versions.
24
+
25
+ **Patch (2.0.x)**: Bug fixes and refinements
26
+
27
+ Patch versions contain only bug fixes without breaking changes. These are safe updates you can apply with confidence.
28
+
29
+ ### Breaking Changes
30
+
31
+ We permit breaking changes in minor versions because the MCP ecosystem is rapidly evolving. Refusing to break problematic APIs would accumulate design debt that eventually makes the framework unusable. Each breaking change represents a deliberate decision to keep FastMCP aligned with the ecosystem's evolution.
32
+
33
+ When breaking changes occur:
34
+ - They only happen in minor versions (e.g., 2.3.x to 2.4.0)
35
+ - Release notes explain what changed and how to migrate
36
+ - We provide deprecation warnings at least 1 minor version in advance when possible
37
+ - Changes must substantially benefit users to justify disruption
38
+
39
+ The public API is what's covered by our compatibility guarantees - these are the parts of FastMCP you can rely on to remain stable within a minor version. The public API consists of:
40
+ - `FastMCP` server class, `Client` class, and FastMCP `Context`
41
+ - Core MCP components: `Tool`, `Prompt`, `Resource`, `ResourceTemplate`, and transports
42
+ - Their public methods and documented behaviors
43
+
44
+ Everything else (utilities, private methods, internal modules) may change without notice. This boundary lets us refactor internals and improve implementation details without breaking your code. For production stability, pin to specific versions.
45
+
46
+ <Warning>
47
+ The `fastmcp.server.auth` module was introduced in 2.12.0 and is exempted from this policy temporarily, meaning it is *expected* to have breaking changes even on patch versions. This is because auth is a rapidly evolving part of the MCP spec and it would be dangerous to be beholden to old decisions. Please pin your FastMCP version if using authentication in production.
48
+
49
+ We expect this exemption to last through at least the 2.12.x and 2.13.x release series.
50
+ </Warning>
51
+
52
+ ### Production Use
53
+
54
+ Pin to exact versions:
55
+ ```
56
+ fastmcp==2.11.0 # Good
57
+ fastmcp>=2.11.0 # Bad - will install breaking changes
58
+ ```
59
+
60
+ ## Creating Releases
61
+
62
+ Our release process is intentionally simple:
63
+
64
+ 1. Create GitHub release with tag `vMAJOR.MINOR.PATCH` (e.g., `v2.11.0`)
65
+ 2. Generate release notes automatically, and curate or add additional editorial information as needed
66
+ 3. GitHub releases automatically trigger PyPI deployments
67
+
68
+ This automation lets maintainers focus on code quality rather than release mechanics.
69
+
70
+ ### Release Cadence
71
+
72
+ We follow a feature-driven release cadence rather than a fixed schedule. Minor versions ship approximately every 3-4 weeks when significant functionality is ready.
73
+
74
+ Patch releases ship promptly for:
75
+ - Critical bug fixes
76
+ - Security updates (immediate release)
77
+ - Regression fixes
78
+
79
+ This approach means you get improvements as soon as they're ready rather than waiting for arbitrary release dates.