fastmcp 2.14.2__tar.gz → 2.14.3__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 (739) hide show
  1. {fastmcp-2.14.2 → fastmcp-2.14.3}/PKG-INFO +2 -2
  2. {fastmcp-2.14.2 → fastmcp-2.14.3}/pyproject.toml +1 -1
  3. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/cli/cli.py +9 -0
  4. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/client/auth/oauth.py +4 -1
  5. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/client/transports.py +19 -13
  6. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/auth/oauth_proxy.py +45 -10
  7. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/context.py +28 -4
  8. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/server.py +7 -4
  9. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/tasks/handlers.py +19 -10
  10. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/tasks/protocol.py +12 -8
  11. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/tasks/subscriptions.py +3 -5
  12. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/settings.py +15 -0
  13. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/utilities/cli.py +31 -4
  14. fastmcp-2.14.3/src/fastmcp/utilities/version_check.py +153 -0
  15. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/client/auth/test_oauth_client.py +78 -0
  16. fastmcp-2.14.3/tests/integration_tests/test_timeout_fix.py +51 -0
  17. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/auth/test_oauth_proxy.py +185 -0
  18. fastmcp-2.14.3/tests/utilities/test_version_check.py +315 -0
  19. {fastmcp-2.14.2 → fastmcp-2.14.3}/uv.lock +4 -4
  20. {fastmcp-2.14.2 → fastmcp-2.14.3}/.ccignore +0 -0
  21. {fastmcp-2.14.2 → fastmcp-2.14.3}/.cursor/rules/core-mcp-objects.mdc +0 -0
  22. {fastmcp-2.14.2 → fastmcp-2.14.3}/.cursor/worktrees.json +0 -0
  23. {fastmcp-2.14.2 → fastmcp-2.14.3}/.github/ISSUE_TEMPLATE/bug.yml +0 -0
  24. {fastmcp-2.14.2 → fastmcp-2.14.3}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  25. {fastmcp-2.14.2 → fastmcp-2.14.3}/.github/ISSUE_TEMPLATE/enhancement.yml +0 -0
  26. {fastmcp-2.14.2 → fastmcp-2.14.3}/.github/copilot-instructions.md +0 -0
  27. {fastmcp-2.14.2 → fastmcp-2.14.3}/.github/dependabot.yml +0 -0
  28. {fastmcp-2.14.2 → fastmcp-2.14.3}/.github/pull_request_template.md +0 -0
  29. {fastmcp-2.14.2 → fastmcp-2.14.3}/.github/release.yml +0 -0
  30. {fastmcp-2.14.2 → fastmcp-2.14.3}/.github/workflows/auto-close-duplicates.yml +0 -0
  31. {fastmcp-2.14.2 → fastmcp-2.14.3}/.github/workflows/auto-close-needs-mre.yml +0 -0
  32. {fastmcp-2.14.2 → fastmcp-2.14.3}/.github/workflows/martian-issue-triage.yml +0 -0
  33. {fastmcp-2.14.2 → fastmcp-2.14.3}/.github/workflows/martian-test-failure.yml +0 -0
  34. {fastmcp-2.14.2 → fastmcp-2.14.3}/.github/workflows/marvin-dedupe-issues.yml +0 -0
  35. {fastmcp-2.14.2 → fastmcp-2.14.3}/.github/workflows/marvin-label-triage.yml +0 -0
  36. {fastmcp-2.14.2 → fastmcp-2.14.3}/.github/workflows/marvin.yml +0 -0
  37. {fastmcp-2.14.2 → fastmcp-2.14.3}/.github/workflows/publish.yml +0 -0
  38. {fastmcp-2.14.2 → fastmcp-2.14.3}/.github/workflows/run-static.yml +0 -0
  39. {fastmcp-2.14.2 → fastmcp-2.14.3}/.github/workflows/run-tests.yml +0 -0
  40. {fastmcp-2.14.2 → fastmcp-2.14.3}/.github/workflows/update-config-schema.yml +0 -0
  41. {fastmcp-2.14.2 → fastmcp-2.14.3}/.github/workflows/update-sdk-docs.yml +0 -0
  42. {fastmcp-2.14.2 → fastmcp-2.14.3}/.gitignore +0 -0
  43. {fastmcp-2.14.2 → fastmcp-2.14.3}/.pre-commit-config.yaml +0 -0
  44. {fastmcp-2.14.2 → fastmcp-2.14.3}/AGENTS.md +0 -0
  45. {fastmcp-2.14.2 → fastmcp-2.14.3}/CLAUDE.md +0 -0
  46. {fastmcp-2.14.2 → fastmcp-2.14.3}/CODE_OF_CONDUCT.md +0 -0
  47. {fastmcp-2.14.2 → fastmcp-2.14.3}/LICENSE +0 -0
  48. {fastmcp-2.14.2 → fastmcp-2.14.3}/README.md +0 -0
  49. {fastmcp-2.14.2 → fastmcp-2.14.3}/SECURITY.md +0 -0
  50. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/.ccignore +0 -0
  51. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/.cursor/rules/mintlify.mdc +0 -0
  52. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/assets/brand/blue-logo.png +0 -0
  53. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/assets/brand/f-watercolor-waves-dark.png +0 -0
  54. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/assets/brand/f-watercolor-waves.png +0 -0
  55. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/assets/brand/favicon.svg +0 -0
  56. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/assets/brand/thumbnail-background.png +0 -0
  57. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/assets/brand/wordmark-padded.png +0 -0
  58. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/assets/brand/wordmark-watercolor-rainbow-dark.png +0 -0
  59. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/assets/brand/wordmark-watercolor-rainbow.png +0 -0
  60. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/assets/brand/wordmark-watercolor-waves-dark.png +0 -0
  61. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/assets/brand/wordmark-watercolor-waves.png +0 -0
  62. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/assets/brand/wordmark-white-padded.png +0 -0
  63. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/assets/brand/wordmark-white.png +0 -0
  64. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/assets/brand/wordmark.png +0 -0
  65. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/assets/images/fastmcp_cloud/connect.png +0 -0
  66. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/assets/images/fastmcp_cloud/create_project.png +0 -0
  67. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/assets/images/fastmcp_cloud/deployment.png +0 -0
  68. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/assets/images/fastmcp_cloud/quickstart.png +0 -0
  69. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/assets/images/oauth-proxy-consent-screen.png +0 -0
  70. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/assets/images/tutorial-rest-api-result.png +0 -0
  71. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/assets/schemas/mcp_server_config/latest.json +0 -0
  72. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/assets/schemas/mcp_server_config/v1.json +0 -0
  73. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/assets/updates/release-2-7.png +0 -0
  74. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/changelog.mdx +0 -0
  75. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/clients/auth/bearer.mdx +0 -0
  76. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/clients/auth/oauth.mdx +0 -0
  77. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/clients/client.mdx +0 -0
  78. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/clients/elicitation.mdx +0 -0
  79. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/clients/logging.mdx +0 -0
  80. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/clients/messages.mdx +0 -0
  81. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/clients/progress.mdx +0 -0
  82. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/clients/prompts.mdx +0 -0
  83. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/clients/resources.mdx +0 -0
  84. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/clients/roots.mdx +0 -0
  85. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/clients/sampling.mdx +0 -0
  86. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/clients/tasks.mdx +0 -0
  87. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/clients/tools.mdx +0 -0
  88. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/clients/transports.mdx +0 -0
  89. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/community/README.md +0 -0
  90. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/community/showcase.mdx +0 -0
  91. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/css/banner.css +0 -0
  92. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/css/python-sdk.css +0 -0
  93. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/css/style.css +0 -0
  94. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/css/version-badge.css +0 -0
  95. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/deployment/fastmcp-cloud.mdx +0 -0
  96. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/deployment/http.mdx +0 -0
  97. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/deployment/running-server.mdx +0 -0
  98. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/deployment/server-configuration.mdx +0 -0
  99. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/development/contributing.mdx +0 -0
  100. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/development/releases.mdx +0 -0
  101. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/development/tests.mdx +0 -0
  102. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/development/upgrade-guide.mdx +0 -0
  103. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/docs.json +0 -0
  104. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/getting-started/installation.mdx +0 -0
  105. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/getting-started/quickstart.mdx +0 -0
  106. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/getting-started/welcome.mdx +0 -0
  107. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/integrations/anthropic.mdx +0 -0
  108. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/integrations/auth0.mdx +0 -0
  109. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/integrations/authkit.mdx +0 -0
  110. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/integrations/aws-cognito.mdx +0 -0
  111. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/integrations/azure.mdx +0 -0
  112. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/integrations/chatgpt.mdx +0 -0
  113. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/integrations/claude-code.mdx +0 -0
  114. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/integrations/claude-desktop.mdx +0 -0
  115. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/integrations/cursor-install-mcp.png +0 -0
  116. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/integrations/cursor.mdx +0 -0
  117. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/integrations/descope.mdx +0 -0
  118. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/integrations/discord.mdx +0 -0
  119. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/integrations/eunomia-authorization.mdx +0 -0
  120. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/integrations/fastapi.mdx +0 -0
  121. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/integrations/gemini-cli.mdx +0 -0
  122. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/integrations/gemini.mdx +0 -0
  123. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/integrations/github.mdx +0 -0
  124. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/integrations/google.mdx +0 -0
  125. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/integrations/images/authkit/enable_dcr.png +0 -0
  126. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/integrations/images/oci/ociaddapplication.png +0 -0
  127. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/integrations/images/oci/ocieditdomainsettings.png +0 -0
  128. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/integrations/images/oci/ocieditdomainsettingsbutton.png +0 -0
  129. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/integrations/images/oci/ocioauthconfiguration.png +0 -0
  130. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/integrations/images/permit/abac_condition_example.png +0 -0
  131. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/integrations/images/permit/abac_policy_example.png +0 -0
  132. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/integrations/images/permit/policy_mapping.png +0 -0
  133. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/integrations/images/permit/role_assignement.png +0 -0
  134. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/integrations/mcp-json-configuration.mdx +0 -0
  135. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/integrations/oci.mdx +0 -0
  136. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/integrations/openai.mdx +0 -0
  137. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/integrations/openapi.mdx +0 -0
  138. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/integrations/permit.mdx +0 -0
  139. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/integrations/scalekit.mdx +0 -0
  140. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/integrations/supabase.mdx +0 -0
  141. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/integrations/workos.mdx +0 -0
  142. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/patterns/cli.mdx +0 -0
  143. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/patterns/contrib.mdx +0 -0
  144. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/patterns/decorating-methods.mdx +0 -0
  145. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/patterns/testing.mdx +0 -0
  146. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/patterns/tool-transformation.mdx +0 -0
  147. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/public/schemas/fastmcp.json/latest.json +0 -0
  148. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/public/schemas/fastmcp.json/v1.json +0 -0
  149. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-cli-__init__.mdx +0 -0
  150. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-cli-cli.mdx +0 -0
  151. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-cli-install-__init__.mdx +0 -0
  152. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-cli-install-claude_code.mdx +0 -0
  153. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-cli-install-claude_desktop.mdx +0 -0
  154. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-cli-install-cursor.mdx +0 -0
  155. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-cli-install-gemini_cli.mdx +0 -0
  156. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-cli-install-mcp_json.mdx +0 -0
  157. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-cli-install-shared.mdx +0 -0
  158. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-cli-run.mdx +0 -0
  159. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-cli-tasks.mdx +0 -0
  160. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-client-__init__.mdx +0 -0
  161. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-client-auth-__init__.mdx +0 -0
  162. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-client-auth-bearer.mdx +0 -0
  163. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-client-auth-oauth.mdx +0 -0
  164. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-client-client.mdx +0 -0
  165. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-client-elicitation.mdx +0 -0
  166. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-client-logging.mdx +0 -0
  167. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-client-messages.mdx +0 -0
  168. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-client-oauth_callback.mdx +0 -0
  169. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-client-progress.mdx +0 -0
  170. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-client-roots.mdx +0 -0
  171. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-client-sampling.mdx +0 -0
  172. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-client-tasks.mdx +0 -0
  173. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-client-transports.mdx +0 -0
  174. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-dependencies.mdx +0 -0
  175. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-exceptions.mdx +0 -0
  176. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-mcp_config.mdx +0 -0
  177. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-prompts-__init__.mdx +0 -0
  178. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-prompts-prompt.mdx +0 -0
  179. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-prompts-prompt_manager.mdx +0 -0
  180. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-resources-__init__.mdx +0 -0
  181. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-resources-resource.mdx +0 -0
  182. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-resources-resource_manager.mdx +0 -0
  183. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-resources-template.mdx +0 -0
  184. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-resources-types.mdx +0 -0
  185. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-__init__.mdx +0 -0
  186. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-auth-__init__.mdx +0 -0
  187. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-auth-auth.mdx +0 -0
  188. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-auth-jwt_issuer.mdx +0 -0
  189. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-auth-middleware.mdx +0 -0
  190. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-auth-oauth_proxy.mdx +0 -0
  191. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-auth-oidc_proxy.mdx +0 -0
  192. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-auth-providers-__init__.mdx +0 -0
  193. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-auth-providers-auth0.mdx +0 -0
  194. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-auth-providers-aws.mdx +0 -0
  195. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-auth-providers-azure.mdx +0 -0
  196. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-auth-providers-debug.mdx +0 -0
  197. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-auth-providers-descope.mdx +0 -0
  198. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-auth-providers-discord.mdx +0 -0
  199. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-auth-providers-github.mdx +0 -0
  200. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-auth-providers-google.mdx +0 -0
  201. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-auth-providers-in_memory.mdx +0 -0
  202. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-auth-providers-introspection.mdx +0 -0
  203. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-auth-providers-jwt.mdx +0 -0
  204. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-auth-providers-oci.mdx +0 -0
  205. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-auth-providers-scalekit.mdx +0 -0
  206. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-auth-providers-supabase.mdx +0 -0
  207. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-auth-providers-workos.mdx +0 -0
  208. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-auth-redirect_validation.mdx +0 -0
  209. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-context.mdx +0 -0
  210. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-dependencies.mdx +0 -0
  211. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-elicitation.mdx +0 -0
  212. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-event_store.mdx +0 -0
  213. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-http.mdx +0 -0
  214. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-low_level.mdx +0 -0
  215. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-middleware-__init__.mdx +0 -0
  216. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-middleware-caching.mdx +0 -0
  217. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-middleware-error_handling.mdx +0 -0
  218. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-middleware-logging.mdx +0 -0
  219. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-middleware-middleware.mdx +0 -0
  220. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-middleware-rate_limiting.mdx +0 -0
  221. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-middleware-timing.mdx +0 -0
  222. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-middleware-tool_injection.mdx +0 -0
  223. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-openapi-__init__.mdx +0 -0
  224. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-openapi-components.mdx +0 -0
  225. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-openapi-routing.mdx +0 -0
  226. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-openapi-server.mdx +0 -0
  227. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-proxy.mdx +0 -0
  228. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-server.mdx +0 -0
  229. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-tasks-__init__.mdx +0 -0
  230. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-tasks-capabilities.mdx +0 -0
  231. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-tasks-config.mdx +0 -0
  232. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-tasks-converters.mdx +0 -0
  233. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-tasks-handlers.mdx +0 -0
  234. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-tasks-keys.mdx +0 -0
  235. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-tasks-protocol.mdx +0 -0
  236. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-server-tasks-subscriptions.mdx +0 -0
  237. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-settings.mdx +0 -0
  238. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-tools-__init__.mdx +0 -0
  239. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-tools-tool.mdx +0 -0
  240. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-tools-tool_manager.mdx +0 -0
  241. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-tools-tool_transform.mdx +0 -0
  242. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-utilities-__init__.mdx +0 -0
  243. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-utilities-auth.mdx +0 -0
  244. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-utilities-cli.mdx +0 -0
  245. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-utilities-components.mdx +0 -0
  246. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-utilities-exceptions.mdx +0 -0
  247. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-utilities-http.mdx +0 -0
  248. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-utilities-inspect.mdx +0 -0
  249. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-utilities-json_schema.mdx +0 -0
  250. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-utilities-json_schema_type.mdx +0 -0
  251. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-utilities-logging.mdx +0 -0
  252. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-utilities-mcp_config.mdx +0 -0
  253. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-utilities-mcp_server_config-__init__.mdx +0 -0
  254. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-__init__.mdx +0 -0
  255. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-environments-__init__.mdx +0 -0
  256. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-environments-base.mdx +0 -0
  257. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-environments-uv.mdx +0 -0
  258. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-mcp_server_config.mdx +0 -0
  259. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-sources-__init__.mdx +0 -0
  260. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-sources-base.mdx +0 -0
  261. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-sources-filesystem.mdx +0 -0
  262. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-utilities-openapi-__init__.mdx +0 -0
  263. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-utilities-openapi-director.mdx +0 -0
  264. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-utilities-openapi-formatters.mdx +0 -0
  265. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-utilities-openapi-json_schema_converter.mdx +0 -0
  266. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-utilities-openapi-models.mdx +0 -0
  267. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-utilities-openapi-parser.mdx +0 -0
  268. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-utilities-openapi-schemas.mdx +0 -0
  269. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-utilities-tests.mdx +0 -0
  270. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-utilities-types.mdx +0 -0
  271. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/python-sdk/fastmcp-utilities-ui.mdx +0 -0
  272. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/servers/auth/authentication.mdx +0 -0
  273. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/servers/auth/full-oauth-server.mdx +0 -0
  274. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/servers/auth/oauth-proxy.mdx +0 -0
  275. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/servers/auth/oidc-proxy.mdx +0 -0
  276. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/servers/auth/remote-oauth.mdx +0 -0
  277. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/servers/auth/token-verification.mdx +0 -0
  278. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/servers/composition.mdx +0 -0
  279. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/servers/context.mdx +0 -0
  280. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/servers/elicitation.mdx +0 -0
  281. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/servers/icons.mdx +0 -0
  282. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/servers/logging.mdx +0 -0
  283. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/servers/middleware.mdx +0 -0
  284. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/servers/progress.mdx +0 -0
  285. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/servers/prompts.mdx +0 -0
  286. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/servers/proxy.mdx +0 -0
  287. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/servers/resources.mdx +0 -0
  288. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/servers/sampling.mdx +0 -0
  289. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/servers/server.mdx +0 -0
  290. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/servers/storage-backends.mdx +0 -0
  291. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/servers/tasks.mdx +0 -0
  292. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/servers/tools.mdx +0 -0
  293. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/snippets/local-focus.mdx +0 -0
  294. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/snippets/version-badge.mdx +0 -0
  295. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/snippets/youtube-embed.mdx +0 -0
  296. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/tutorials/create-mcp-server.mdx +0 -0
  297. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/tutorials/mcp.mdx +0 -0
  298. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/tutorials/rest-api.mdx +0 -0
  299. {fastmcp-2.14.2 → fastmcp-2.14.3}/docs/updates.mdx +0 -0
  300. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/atproto_mcp/README.md +0 -0
  301. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/atproto_mcp/demo.py +0 -0
  302. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/atproto_mcp/fastmcp.json +0 -0
  303. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/atproto_mcp/pyproject.toml +0 -0
  304. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/atproto_mcp/src/atproto_mcp/__init__.py +0 -0
  305. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/atproto_mcp/src/atproto_mcp/__main__.py +0 -0
  306. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/atproto_mcp/src/atproto_mcp/_atproto/__init__.py +0 -0
  307. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/atproto_mcp/src/atproto_mcp/_atproto/_client.py +0 -0
  308. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/atproto_mcp/src/atproto_mcp/_atproto/_posts.py +0 -0
  309. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/atproto_mcp/src/atproto_mcp/_atproto/_profile.py +0 -0
  310. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/atproto_mcp/src/atproto_mcp/_atproto/_read.py +0 -0
  311. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/atproto_mcp/src/atproto_mcp/_atproto/_social.py +0 -0
  312. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/atproto_mcp/src/atproto_mcp/py.typed +0 -0
  313. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/atproto_mcp/src/atproto_mcp/server.py +0 -0
  314. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/atproto_mcp/src/atproto_mcp/settings.py +0 -0
  315. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/atproto_mcp/src/atproto_mcp/types.py +0 -0
  316. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/auth/authkit_dcr/README.md +0 -0
  317. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/auth/authkit_dcr/client.py +0 -0
  318. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/auth/authkit_dcr/server.py +0 -0
  319. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/auth/aws_oauth/README.md +0 -0
  320. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/auth/aws_oauth/client.py +0 -0
  321. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/auth/aws_oauth/requirements.txt +0 -0
  322. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/auth/aws_oauth/server.py +0 -0
  323. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/auth/azure_oauth/README.md +0 -0
  324. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/auth/azure_oauth/client.py +0 -0
  325. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/auth/azure_oauth/server.py +0 -0
  326. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/auth/discord_oauth/README.md +0 -0
  327. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/auth/discord_oauth/client.py +0 -0
  328. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/auth/discord_oauth/server.py +0 -0
  329. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/auth/github_oauth/README.md +0 -0
  330. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/auth/github_oauth/client.py +0 -0
  331. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/auth/github_oauth/server.py +0 -0
  332. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/auth/google_oauth/README.md +0 -0
  333. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/auth/google_oauth/client.py +0 -0
  334. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/auth/google_oauth/server.py +0 -0
  335. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/auth/mounted/README.md +0 -0
  336. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/auth/mounted/client.py +0 -0
  337. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/auth/mounted/server.py +0 -0
  338. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/auth/scalekit_oauth/README.md +0 -0
  339. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/auth/scalekit_oauth/client.py +0 -0
  340. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/auth/scalekit_oauth/server.py +0 -0
  341. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/auth/workos_oauth/README.md +0 -0
  342. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/auth/workos_oauth/client.py +0 -0
  343. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/auth/workos_oauth/server.py +0 -0
  344. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/complex_inputs.py +0 -0
  345. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/config_server.py +0 -0
  346. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/desktop.py +0 -0
  347. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/echo.py +0 -0
  348. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/fastmcp_config/env_interpolation_example.json +0 -0
  349. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/fastmcp_config/fastmcp.json +0 -0
  350. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/fastmcp_config/full_example.fastmcp.json +0 -0
  351. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/fastmcp_config/server.py +0 -0
  352. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/fastmcp_config/simple.fastmcp.json +0 -0
  353. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/fastmcp_config_demo/README.md +0 -0
  354. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/fastmcp_config_demo/fastmcp.json +0 -0
  355. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/fastmcp_config_demo/server.py +0 -0
  356. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/get_file.py +0 -0
  357. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/in_memory_proxy_example.py +0 -0
  358. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/memory.fastmcp.json +0 -0
  359. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/memory.py +0 -0
  360. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/mount_example.fastmcp.json +0 -0
  361. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/mount_example.py +0 -0
  362. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/sampling/README.md +0 -0
  363. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/sampling/server_fallback.py +0 -0
  364. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/sampling/structured_output.py +0 -0
  365. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/sampling/text.py +0 -0
  366. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/sampling/tool_use.py +0 -0
  367. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/screenshot.fastmcp.json +0 -0
  368. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/screenshot.py +0 -0
  369. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/serializer.py +0 -0
  370. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/simple_echo.py +0 -0
  371. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/smart_home/README.md +0 -0
  372. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/smart_home/hub.fastmcp.json +0 -0
  373. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/smart_home/lights.fastmcp.json +0 -0
  374. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/smart_home/pyproject.toml +0 -0
  375. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/smart_home/src/smart_home/__init__.py +0 -0
  376. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/smart_home/src/smart_home/__main__.py +0 -0
  377. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/smart_home/src/smart_home/hub.py +0 -0
  378. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/smart_home/src/smart_home/lights/__init__.py +0 -0
  379. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/smart_home/src/smart_home/lights/hue_utils.py +0 -0
  380. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/smart_home/src/smart_home/lights/server.py +0 -0
  381. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/smart_home/src/smart_home/py.typed +0 -0
  382. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/smart_home/src/smart_home/settings.py +0 -0
  383. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/tags_example.py +0 -0
  384. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/tasks/README.md +0 -0
  385. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/tasks/client.py +0 -0
  386. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/tasks/docker-compose.yml +0 -0
  387. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/tasks/server.py +0 -0
  388. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/testing_demo/README.md +0 -0
  389. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/testing_demo/pyproject.toml +0 -0
  390. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/testing_demo/server.py +0 -0
  391. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/testing_demo/tests/test_server.py +0 -0
  392. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/testing_demo/uv.lock +0 -0
  393. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/text_me.py +0 -0
  394. {fastmcp-2.14.2 → fastmcp-2.14.3}/examples/tool_result_echo.py +0 -0
  395. {fastmcp-2.14.2 → fastmcp-2.14.3}/justfile +0 -0
  396. {fastmcp-2.14.2 → fastmcp-2.14.3}/logo.py +0 -0
  397. {fastmcp-2.14.2 → fastmcp-2.14.3}/scripts/auto_close_duplicates.py +0 -0
  398. {fastmcp-2.14.2 → fastmcp-2.14.3}/scripts/auto_close_needs_mre.py +0 -0
  399. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/__init__.py +0 -0
  400. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/cli/__init__.py +0 -0
  401. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/cli/__main__.py +0 -0
  402. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/cli/install/__init__.py +0 -0
  403. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/cli/install/claude_code.py +0 -0
  404. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/cli/install/claude_desktop.py +0 -0
  405. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/cli/install/cursor.py +0 -0
  406. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/cli/install/gemini_cli.py +0 -0
  407. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/cli/install/mcp_json.py +0 -0
  408. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/cli/install/shared.py +0 -0
  409. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/cli/run.py +0 -0
  410. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/cli/tasks.py +0 -0
  411. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/client/__init__.py +0 -0
  412. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/client/auth/__init__.py +0 -0
  413. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/client/auth/bearer.py +0 -0
  414. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/client/client.py +0 -0
  415. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/client/elicitation.py +0 -0
  416. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/client/logging.py +0 -0
  417. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/client/messages.py +0 -0
  418. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/client/oauth_callback.py +0 -0
  419. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/client/progress.py +0 -0
  420. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/client/roots.py +0 -0
  421. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/client/sampling/__init__.py +0 -0
  422. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/client/sampling/handlers/__init__.py +0 -0
  423. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/client/sampling/handlers/anthropic.py +0 -0
  424. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/client/sampling/handlers/openai.py +0 -0
  425. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/client/tasks.py +0 -0
  426. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/contrib/README.md +0 -0
  427. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
  428. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
  429. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
  430. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
  431. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/contrib/component_manager/README.md +0 -0
  432. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/contrib/component_manager/__init__.py +0 -0
  433. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/contrib/component_manager/component_manager.py +0 -0
  434. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/contrib/component_manager/component_service.py +0 -0
  435. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/contrib/component_manager/example.py +0 -0
  436. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/contrib/mcp_mixin/README.md +0 -0
  437. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
  438. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/contrib/mcp_mixin/example.py +0 -0
  439. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
  440. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/dependencies.py +0 -0
  441. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/exceptions.py +0 -0
  442. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/experimental/sampling/__init__.py +0 -0
  443. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/experimental/sampling/handlers/__init__.py +0 -0
  444. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/experimental/sampling/handlers/openai.py +0 -0
  445. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/experimental/server/openapi/__init__.py +0 -0
  446. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/experimental/utilities/openapi/__init__.py +0 -0
  447. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/mcp_config.py +0 -0
  448. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/prompts/__init__.py +0 -0
  449. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/prompts/prompt.py +0 -0
  450. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/prompts/prompt_manager.py +0 -0
  451. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/py.typed +0 -0
  452. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/resources/__init__.py +0 -0
  453. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/resources/resource.py +0 -0
  454. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/resources/resource_manager.py +0 -0
  455. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/resources/template.py +0 -0
  456. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/resources/types.py +0 -0
  457. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/__init__.py +0 -0
  458. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/auth/__init__.py +0 -0
  459. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/auth/auth.py +0 -0
  460. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/auth/handlers/authorize.py +0 -0
  461. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/auth/jwt_issuer.py +0 -0
  462. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/auth/middleware.py +0 -0
  463. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/auth/oidc_proxy.py +0 -0
  464. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/auth/providers/__init__.py +0 -0
  465. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/auth/providers/auth0.py +0 -0
  466. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/auth/providers/aws.py +0 -0
  467. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/auth/providers/azure.py +0 -0
  468. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/auth/providers/debug.py +0 -0
  469. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/auth/providers/descope.py +0 -0
  470. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/auth/providers/discord.py +0 -0
  471. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/auth/providers/github.py +0 -0
  472. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/auth/providers/google.py +0 -0
  473. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/auth/providers/in_memory.py +0 -0
  474. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/auth/providers/introspection.py +0 -0
  475. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/auth/providers/jwt.py +0 -0
  476. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/auth/providers/oci.py +0 -0
  477. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/auth/providers/scalekit.py +0 -0
  478. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/auth/providers/supabase.py +0 -0
  479. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/auth/providers/workos.py +0 -0
  480. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/auth/redirect_validation.py +0 -0
  481. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/dependencies.py +0 -0
  482. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/elicitation.py +0 -0
  483. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/event_store.py +0 -0
  484. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/http.py +0 -0
  485. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/low_level.py +0 -0
  486. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/middleware/__init__.py +0 -0
  487. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/middleware/caching.py +0 -0
  488. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/middleware/error_handling.py +0 -0
  489. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/middleware/logging.py +0 -0
  490. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/middleware/middleware.py +0 -0
  491. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/middleware/rate_limiting.py +0 -0
  492. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/middleware/timing.py +0 -0
  493. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/middleware/tool_injection.py +0 -0
  494. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/openapi/README.md +0 -0
  495. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/openapi/__init__.py +0 -0
  496. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/openapi/components.py +0 -0
  497. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/openapi/routing.py +0 -0
  498. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/openapi/server.py +0 -0
  499. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/proxy.py +0 -0
  500. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/sampling/__init__.py +0 -0
  501. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/sampling/run.py +0 -0
  502. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/sampling/sampling_tool.py +0 -0
  503. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/tasks/__init__.py +0 -0
  504. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/tasks/capabilities.py +0 -0
  505. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/tasks/config.py +0 -0
  506. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/tasks/converters.py +0 -0
  507. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/server/tasks/keys.py +0 -0
  508. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/tools/__init__.py +0 -0
  509. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/tools/tool.py +0 -0
  510. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/tools/tool_manager.py +0 -0
  511. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/tools/tool_transform.py +0 -0
  512. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/utilities/__init__.py +0 -0
  513. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/utilities/auth.py +0 -0
  514. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/utilities/components.py +0 -0
  515. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/utilities/exceptions.py +0 -0
  516. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/utilities/http.py +0 -0
  517. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/utilities/inspect.py +0 -0
  518. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/utilities/json_schema.py +0 -0
  519. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/utilities/json_schema_type.py +0 -0
  520. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/utilities/logging.py +0 -0
  521. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/utilities/mcp_config.py +0 -0
  522. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
  523. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
  524. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
  525. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
  526. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
  527. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
  528. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
  529. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
  530. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
  531. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
  532. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/utilities/openapi/README.md +0 -0
  533. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/utilities/openapi/__init__.py +0 -0
  534. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/utilities/openapi/director.py +0 -0
  535. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/utilities/openapi/formatters.py +0 -0
  536. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
  537. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/utilities/openapi/models.py +0 -0
  538. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/utilities/openapi/parser.py +0 -0
  539. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/utilities/openapi/schemas.py +0 -0
  540. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/utilities/tests.py +0 -0
  541. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/utilities/types.py +0 -0
  542. {fastmcp-2.14.2 → fastmcp-2.14.3}/src/fastmcp/utilities/ui.py +0 -0
  543. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/__init__.py +0 -0
  544. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/cli/__init__.py +0 -0
  545. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/cli/test_cli.py +0 -0
  546. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/cli/test_config.py +0 -0
  547. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/cli/test_cursor.py +0 -0
  548. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/cli/test_install.py +0 -0
  549. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/cli/test_mcp_server_config_integration.py +0 -0
  550. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/cli/test_mcp_server_config_schema.py +0 -0
  551. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/cli/test_project_prepare.py +0 -0
  552. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/cli/test_run.py +0 -0
  553. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/cli/test_run_config.py +0 -0
  554. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/cli/test_server_args.py +0 -0
  555. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/cli/test_shared.py +0 -0
  556. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/cli/test_tasks.py +0 -0
  557. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/cli/test_with_argv.py +0 -0
  558. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/client/__init__.py +0 -0
  559. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/client/auth/__init__.py +0 -0
  560. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/client/sampling/__init__.py +0 -0
  561. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/client/sampling/handlers/__init__.py +0 -0
  562. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/client/sampling/handlers/test_anthropic_handler.py +0 -0
  563. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/client/sampling/handlers/test_openai_handler.py +0 -0
  564. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/client/tasks/conftest.py +0 -0
  565. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/client/tasks/test_client_prompt_tasks.py +0 -0
  566. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/client/tasks/test_client_resource_tasks.py +0 -0
  567. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/client/tasks/test_client_task_notifications.py +0 -0
  568. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/client/tasks/test_client_task_protocol.py +0 -0
  569. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/client/tasks/test_client_tool_tasks.py +0 -0
  570. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/client/tasks/test_prompt_task_mcp_message.py +0 -0
  571. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/client/tasks/test_task_context_validation.py +0 -0
  572. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/client/tasks/test_task_result_caching.py +0 -0
  573. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/client/test_client.py +0 -0
  574. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/client/test_elicitation.py +0 -0
  575. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/client/test_logs.py +0 -0
  576. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/client/test_notifications.py +0 -0
  577. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/client/test_oauth_callback_xss.py +0 -0
  578. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/client/test_openapi.py +0 -0
  579. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/client/test_progress.py +0 -0
  580. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/client/test_roots.py +0 -0
  581. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/client/test_sampling.py +0 -0
  582. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/client/test_sse.py +0 -0
  583. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/client/test_stdio.py +0 -0
  584. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/client/test_streamable_http.py +0 -0
  585. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/client/transports/__init__.py +0 -0
  586. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/client/transports/test_transports.py +0 -0
  587. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/client/transports/test_uv_transport.py +0 -0
  588. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/conftest.py +0 -0
  589. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/contrib/__init__.py +0 -0
  590. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/contrib/test_bulk_tool_caller.py +0 -0
  591. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/contrib/test_component_manager.py +0 -0
  592. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/contrib/test_mcp_mixin.py +0 -0
  593. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/deprecated/__init__.py +0 -0
  594. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/deprecated/test_deprecated.py +0 -0
  595. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/deprecated/test_exclude_args.py +0 -0
  596. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/deprecated/test_openapi_deprecations.py +0 -0
  597. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/deprecated/test_settings.py +0 -0
  598. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/experimental/README.md +0 -0
  599. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/experimental/__init__.py +0 -0
  600. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/integration_tests/__init__.py +0 -0
  601. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/integration_tests/auth/__init__.py +0 -0
  602. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/integration_tests/auth/test_github_provider_integration.py +0 -0
  603. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/integration_tests/conftest.py +0 -0
  604. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/integration_tests/test_github_mcp_remote.py +0 -0
  605. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/prompts/__init__.py +0 -0
  606. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/prompts/test_prompt.py +0 -0
  607. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/prompts/test_prompt_manager.py +0 -0
  608. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/resources/__init__.py +0 -0
  609. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/resources/test_file_resources.py +0 -0
  610. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/resources/test_function_resources.py +0 -0
  611. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/resources/test_resource_manager.py +0 -0
  612. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/resources/test_resource_template.py +0 -0
  613. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/resources/test_resource_template_meta.py +0 -0
  614. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/resources/test_resources.py +0 -0
  615. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/__init__.py +0 -0
  616. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/auth/__init__.py +0 -0
  617. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/auth/providers/__init__.py +0 -0
  618. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/auth/providers/test_auth0.py +0 -0
  619. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/auth/providers/test_aws.py +0 -0
  620. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/auth/providers/test_azure.py +0 -0
  621. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/auth/providers/test_descope.py +0 -0
  622. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/auth/providers/test_discord.py +0 -0
  623. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/auth/providers/test_github.py +0 -0
  624. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/auth/providers/test_google.py +0 -0
  625. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/auth/providers/test_introspection.py +0 -0
  626. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/auth/providers/test_scalekit.py +0 -0
  627. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/auth/providers/test_supabase.py +0 -0
  628. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/auth/providers/test_workos.py +0 -0
  629. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/auth/test_auth_provider.py +0 -0
  630. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/auth/test_debug_verifier.py +0 -0
  631. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/auth/test_enhanced_error_responses.py +0 -0
  632. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/auth/test_jwt_issuer.py +0 -0
  633. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/auth/test_jwt_provider.py +0 -0
  634. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/auth/test_oauth_consent_flow.py +0 -0
  635. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/auth/test_oauth_mounting.py +0 -0
  636. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/auth/test_oauth_proxy_redirect_validation.py +0 -0
  637. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/auth/test_oauth_proxy_storage.py +0 -0
  638. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/auth/test_oidc_proxy.py +0 -0
  639. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/auth/test_redirect_validation.py +0 -0
  640. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/auth/test_remote_auth_provider.py +0 -0
  641. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/auth/test_static_token_verifier.py +0 -0
  642. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/http/__init__.py +0 -0
  643. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/http/test_bearer_auth_backend.py +0 -0
  644. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/http/test_custom_routes.py +0 -0
  645. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/http/test_http_auth_middleware.py +0 -0
  646. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/http/test_http_dependencies.py +0 -0
  647. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/http/test_http_middleware.py +0 -0
  648. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/http/test_stale_access_token.py +0 -0
  649. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/middleware/__init__.py +0 -0
  650. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/middleware/test_caching.py +0 -0
  651. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/middleware/test_error_handling.py +0 -0
  652. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/middleware/test_initialization_middleware.py +0 -0
  653. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/middleware/test_logging.py +0 -0
  654. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/middleware/test_middleware.py +0 -0
  655. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/middleware/test_rate_limiting.py +0 -0
  656. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/middleware/test_timing.py +0 -0
  657. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/middleware/test_tool_injection.py +0 -0
  658. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/openapi/__init__.py +0 -0
  659. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/openapi/test_comprehensive.py +0 -0
  660. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/openapi/test_deepobject_style.py +0 -0
  661. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/openapi/test_end_to_end_compatibility.py +0 -0
  662. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/openapi/test_openapi_features.py +0 -0
  663. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/openapi/test_openapi_performance.py +0 -0
  664. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/openapi/test_parameter_collisions.py +0 -0
  665. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/openapi/test_performance_comparison.py +0 -0
  666. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/openapi/test_server.py +0 -0
  667. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/proxy/__init__.py +0 -0
  668. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/proxy/test_proxy_client.py +0 -0
  669. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/proxy/test_proxy_server.py +0 -0
  670. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/proxy/test_stateful_proxy_client.py +0 -0
  671. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/sampling/__init__.py +0 -0
  672. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/sampling/test_sampling_tool.py +0 -0
  673. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/tasks/__init__.py +0 -0
  674. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/tasks/conftest.py +0 -0
  675. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/tasks/test_progress_dependency.py +0 -0
  676. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/tasks/test_server_tasks_parameter.py +0 -0
  677. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/tasks/test_sync_function_task_disabled.py +0 -0
  678. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/tasks/test_task_capabilities.py +0 -0
  679. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/tasks/test_task_config_modes.py +0 -0
  680. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/tasks/test_task_dependencies.py +0 -0
  681. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/tasks/test_task_metadata.py +0 -0
  682. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/tasks/test_task_methods.py +0 -0
  683. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/tasks/test_task_mount.py +0 -0
  684. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/tasks/test_task_prompts.py +0 -0
  685. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/tasks/test_task_protocol.py +0 -0
  686. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/tasks/test_task_proxy.py +0 -0
  687. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/tasks/test_task_resources.py +0 -0
  688. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/tasks/test_task_return_types.py +0 -0
  689. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/tasks/test_task_security.py +0 -0
  690. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/tasks/test_task_status_notifications.py +0 -0
  691. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/tasks/test_task_tools.py +0 -0
  692. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/tasks/test_task_ttl.py +0 -0
  693. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/test_app_state.py +0 -0
  694. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/test_auth_integration.py +0 -0
  695. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/test_context.py +0 -0
  696. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/test_dependencies.py +0 -0
  697. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/test_event_store.py +0 -0
  698. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/test_file_server.py +0 -0
  699. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/test_icons.py +0 -0
  700. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/test_import_server.py +0 -0
  701. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/test_input_validation.py +0 -0
  702. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/test_log_level.py +0 -0
  703. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/test_logging.py +0 -0
  704. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/test_mount.py +0 -0
  705. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/test_run_server.py +0 -0
  706. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/test_server.py +0 -0
  707. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/test_server_docket.py +0 -0
  708. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/test_server_interactions.py +0 -0
  709. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/test_server_lifespan.py +0 -0
  710. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/test_streamable_http_no_redirect.py +0 -0
  711. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/test_tool_annotations.py +0 -0
  712. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/server/test_tool_transformation.py +0 -0
  713. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/test_mcp_config.py +0 -0
  714. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/tools/__init__.py +0 -0
  715. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/tools/test_tool.py +0 -0
  716. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/tools/test_tool_future_annotations.py +0 -0
  717. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/tools/test_tool_manager.py +0 -0
  718. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/tools/test_tool_transform.py +0 -0
  719. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/utilities/__init__.py +0 -0
  720. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/utilities/openapi/__init__.py +0 -0
  721. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/utilities/openapi/conftest.py +0 -0
  722. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/utilities/openapi/test_allof_requestbody.py +0 -0
  723. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/utilities/openapi/test_direct_array_schemas.py +0 -0
  724. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/utilities/openapi/test_director.py +0 -0
  725. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/utilities/openapi/test_legacy_compatibility.py +0 -0
  726. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/utilities/openapi/test_models.py +0 -0
  727. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/utilities/openapi/test_nullable_fields.py +0 -0
  728. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/utilities/openapi/test_parser.py +0 -0
  729. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/utilities/openapi/test_schemas.py +0 -0
  730. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/utilities/openapi/test_transitive_references.py +0 -0
  731. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/utilities/test_cli.py +0 -0
  732. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/utilities/test_components.py +0 -0
  733. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/utilities/test_inspect.py +0 -0
  734. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/utilities/test_json_schema.py +0 -0
  735. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/utilities/test_json_schema_type.py +0 -0
  736. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/utilities/test_logging.py +0 -0
  737. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/utilities/test_tests.py +0 -0
  738. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/utilities/test_typeadapter.py +0 -0
  739. {fastmcp-2.14.2 → fastmcp-2.14.3}/tests/utilities/test_types.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fastmcp
3
- Version: 2.14.2
3
+ Version: 2.14.3
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
@@ -28,7 +28,7 @@ Requires-Dist: openapi-pydantic>=0.5.1
28
28
  Requires-Dist: platformdirs>=4.0.0
29
29
  Requires-Dist: py-key-value-aio[disk,keyring,memory]<0.4.0,>=0.3.0
30
30
  Requires-Dist: pydantic[email]>=2.11.7
31
- Requires-Dist: pydocket>=0.16.3
31
+ Requires-Dist: pydocket>=0.16.6
32
32
  Requires-Dist: pyperclip>=1.9.0
33
33
  Requires-Dist: python-dotenv>=1.1.0
34
34
  Requires-Dist: rich>=13.9.4
@@ -10,7 +10,7 @@ dependencies = [
10
10
  "mcp>=1.24.0,<2.0",
11
11
  "openapi-pydantic>=0.5.1",
12
12
  "platformdirs>=4.0.0",
13
- "pydocket>=0.16.3",
13
+ "pydocket>=0.16.6",
14
14
  "rich>=13.9.4",
15
15
  "cyclopts>=4.0.0",
16
16
  "authlib>=1.6.5",
@@ -28,6 +28,7 @@ from fastmcp.utilities.inspect import (
28
28
  )
29
29
  from fastmcp.utilities.logging import get_logger
30
30
  from fastmcp.utilities.mcp_server_config import MCPServerConfig
31
+ from fastmcp.utilities.version_check import check_for_newer_version
31
32
 
32
33
  logger = get_logger("cli")
33
34
  console = Console()
@@ -122,6 +123,14 @@ def version(
122
123
  else:
123
124
  console.print(g)
124
125
 
126
+ # Check for updates (not included in --copy output)
127
+ if newer_version := check_for_newer_version():
128
+ console.print()
129
+ console.print(
130
+ f"[bold]🎉 FastMCP update available:[/bold] [green]{newer_version}[/green]"
131
+ )
132
+ console.print("[dim]Run: pip install --upgrade fastmcp[/dim]")
133
+
125
134
 
126
135
  @app.command
127
136
  async def dev(
@@ -105,10 +105,13 @@ class TokenStorageAdapter(TokenStorage):
105
105
 
106
106
  @override
107
107
  async def set_tokens(self, tokens: OAuthToken) -> None:
108
+ # Don't set TTL based on access token expiry - the refresh token may be
109
+ # valid much longer. Use 1 year as a reasonable upper bound; the OAuth
110
+ # provider handles actual token expiry/refresh logic.
108
111
  await self._storage_oauth_token.put(
109
112
  key=self._get_token_cache_key(),
110
113
  value=tokens,
111
- ttl=tokens.expires_in,
114
+ ttl=60 * 60 * 24 * 365, # 1 year
112
115
  )
113
116
 
114
117
  @override
@@ -25,7 +25,7 @@ from mcp.client.sse import sse_client
25
25
  from mcp.client.stdio import stdio_client
26
26
  from mcp.client.streamable_http import streamable_http_client
27
27
  from mcp.server.fastmcp import FastMCP as FastMCP1Server
28
- from mcp.shared._httpx_utils import McpHttpClientFactory
28
+ from mcp.shared._httpx_utils import McpHttpClientFactory, create_mcp_http_client
29
29
  from mcp.shared.memory import create_client_server_memory_streams
30
30
  from pydantic import AnyUrl
31
31
  from typing_extensions import TypedDict, Unpack
@@ -284,25 +284,31 @@ class StreamableHttpTransport(ClientTransport):
284
284
  # need to be forwarded to the remote server.
285
285
  headers = get_http_headers() | self.headers
286
286
 
287
- # Build httpx client configuration
288
- httpx_client_kwargs: dict[str, Any] = {
289
- "headers": headers,
290
- "auth": self.auth,
291
- "follow_redirects": True,
292
- }
293
-
294
- # Configure timeout if provided (convert timedelta to seconds for httpx)
287
+ # Configure timeout if provided, preserving MCP's 30s connect default
288
+ timeout: httpx.Timeout | None = None
295
289
  if session_kwargs.get("read_timeout_seconds") is not None:
296
290
  read_timeout_seconds = cast(
297
291
  datetime.timedelta, session_kwargs.get("read_timeout_seconds")
298
292
  )
299
- httpx_client_kwargs["timeout"] = read_timeout_seconds.total_seconds()
293
+ timeout = httpx.Timeout(30.0, read=read_timeout_seconds.total_seconds())
300
294
 
301
- # Create httpx client from factory or use default
295
+ # Create httpx client from factory or use default with MCP-appropriate timeouts
296
+ # create_mcp_http_client uses 30s connect/5min read timeout by default,
297
+ # and always enables follow_redirects
302
298
  if self.httpx_client_factory is not None:
303
- http_client = self.httpx_client_factory(**httpx_client_kwargs)
299
+ # Factory clients get the full kwargs for backwards compatibility
300
+ http_client = self.httpx_client_factory(
301
+ headers=headers,
302
+ auth=self.auth,
303
+ follow_redirects=True,
304
+ **({"timeout": timeout} if timeout else {}),
305
+ )
304
306
  else:
305
- http_client = httpx.AsyncClient(**httpx_client_kwargs)
307
+ http_client = create_mcp_http_client(
308
+ headers=headers,
309
+ timeout=timeout,
310
+ auth=self.auth,
311
+ )
306
312
 
307
313
  # Ensure httpx client is closed after use
308
314
  async with (
@@ -1221,12 +1221,24 @@ class OAuthProxy(OAuthProvider):
1221
1221
  # - 1 year if no refresh token (likely API-key-style token like GitHub OAuth Apps)
1222
1222
  if "expires_in" in idp_tokens:
1223
1223
  expires_in = int(idp_tokens["expires_in"])
1224
+ logger.debug(
1225
+ "Access token TTL: %d seconds (from IdP expires_in)", expires_in
1226
+ )
1224
1227
  elif self._fallback_access_token_expiry_seconds is not None:
1225
1228
  expires_in = self._fallback_access_token_expiry_seconds
1229
+ logger.debug(
1230
+ "Access token TTL: %d seconds (using configured fallback)", expires_in
1231
+ )
1226
1232
  elif idp_tokens.get("refresh_token"):
1227
1233
  expires_in = DEFAULT_ACCESS_TOKEN_EXPIRY_SECONDS
1234
+ logger.debug(
1235
+ "Access token TTL: %d seconds (default, has refresh token)", expires_in
1236
+ )
1228
1237
  else:
1229
1238
  expires_in = DEFAULT_ACCESS_TOKEN_EXPIRY_NO_REFRESH_SECONDS
1239
+ logger.debug(
1240
+ "Access token TTL: %d seconds (default, no refresh token)", expires_in
1241
+ )
1230
1242
 
1231
1243
  # Calculate refresh token expiry if provided by upstream
1232
1244
  # Some providers include refresh_expires_in, some don't
@@ -1266,8 +1278,9 @@ class OAuthProxy(OAuthProvider):
1266
1278
  await self._upstream_token_store.put(
1267
1279
  key=upstream_token_id,
1268
1280
  value=upstream_token_set,
1269
- ttl=refresh_expires_in
1270
- or expires_in, # Auto-expire when refresh token, or access token expires
1281
+ ttl=max(
1282
+ refresh_expires_in or 0, expires_in, 1
1283
+ ), # Keep until longest-lived token expires (min 1s for safety)
1271
1284
  )
1272
1285
  logger.debug("Stored encrypted upstream tokens (jti=%s)", access_jti[:8])
1273
1286
 
@@ -1467,10 +1480,21 @@ class OAuthProxy(OAuthProvider):
1467
1480
  # (user override still applies if set)
1468
1481
  if "expires_in" in token_response:
1469
1482
  new_expires_in = int(token_response["expires_in"])
1483
+ logger.debug(
1484
+ "Refreshed access token TTL: %d seconds (from IdP expires_in)",
1485
+ new_expires_in,
1486
+ )
1470
1487
  elif self._fallback_access_token_expiry_seconds is not None:
1471
1488
  new_expires_in = self._fallback_access_token_expiry_seconds
1489
+ logger.debug(
1490
+ "Refreshed access token TTL: %d seconds (using configured fallback)",
1491
+ new_expires_in,
1492
+ )
1472
1493
  else:
1473
1494
  new_expires_in = DEFAULT_ACCESS_TOKEN_EXPIRY_SECONDS
1495
+ logger.debug(
1496
+ "Refreshed access token TTL: %d seconds (default)", new_expires_in
1497
+ )
1474
1498
  upstream_token_set.access_token = token_response["access_token"]
1475
1499
  upstream_token_set.expires_at = time.time() + new_expires_in
1476
1500
 
@@ -1504,15 +1528,18 @@ class OAuthProxy(OAuthProvider):
1504
1528
  )
1505
1529
 
1506
1530
  upstream_token_set.raw_token_data = token_response
1531
+ # Calculate refresh TTL for storage
1532
+ refresh_ttl = new_refresh_expires_in or (
1533
+ int(upstream_token_set.refresh_token_expires_at - time.time())
1534
+ if upstream_token_set.refresh_token_expires_at
1535
+ else 60 * 60 * 24 * 30 # Default to 30 days if unknown
1536
+ )
1507
1537
  await self._upstream_token_store.put(
1508
1538
  key=upstream_token_set.upstream_token_id,
1509
1539
  value=upstream_token_set,
1510
- ttl=new_refresh_expires_in
1511
- or (
1512
- int(upstream_token_set.refresh_token_expires_at - time.time())
1513
- if upstream_token_set.refresh_token_expires_at
1514
- else 60 * 60 * 24 * 30 # Default to 30 days if unknown
1515
- ), # Auto-expire when refresh token expires
1540
+ ttl=max(
1541
+ refresh_ttl, new_expires_in, 1
1542
+ ), # Keep until longest-lived token expires (min 1s for safety)
1516
1543
  )
1517
1544
 
1518
1545
  # Issue new minimal FastMCP access token (just a reference via JTI)
@@ -1549,7 +1576,7 @@ class OAuthProxy(OAuthProvider):
1549
1576
  )
1550
1577
 
1551
1578
  # Store new refresh token JTI mapping with aligned expiry
1552
- refresh_ttl = new_refresh_expires_in or 60 * 60 * 24 * 30
1579
+ # (reuse refresh_ttl calculated above for upstream token store)
1553
1580
  await self._jti_mapping_store.put(
1554
1581
  key=new_refresh_jti,
1555
1582
  value=JTIMapping(
@@ -1622,7 +1649,10 @@ class OAuthProxy(OAuthProvider):
1622
1649
  # 2. Look up upstream token via JTI mapping
1623
1650
  jti_mapping = await self._jti_mapping_store.get(key=jti)
1624
1651
  if not jti_mapping:
1625
- logger.debug("JTI mapping not found: %s", jti)
1652
+ logger.info(
1653
+ "JTI mapping not found (token may have expired): jti=%s...",
1654
+ jti[:16],
1655
+ )
1626
1656
  return None
1627
1657
 
1628
1658
  upstream_token_set = await self._upstream_token_store.get(
@@ -1865,6 +1895,11 @@ class OAuthProxy(OAuthProvider):
1865
1895
  logger.debug(
1866
1896
  f"Successfully exchanged IdP code for tokens (transaction: {txn_id}, PKCE: {bool(proxy_code_verifier)})"
1867
1897
  )
1898
+ logger.debug(
1899
+ "IdP token response: expires_in=%s, has_refresh_token=%s",
1900
+ idp_tokens.get("expires_in"),
1901
+ "refresh_token" in idp_tokens,
1902
+ )
1868
1903
 
1869
1904
  except Exception as e:
1870
1905
  logger.error("IdP token exchange failed: %s", e)
@@ -185,10 +185,24 @@ class Context:
185
185
  self._tokens.append(token)
186
186
 
187
187
  # Set current server for dependency injection (use weakref to avoid reference cycles)
188
- from fastmcp.server.dependencies import _current_server
188
+ from fastmcp.server.dependencies import (
189
+ _current_docket,
190
+ _current_server,
191
+ _current_worker,
192
+ )
189
193
 
190
194
  self._server_token = _current_server.set(weakref.ref(self.fastmcp))
191
195
 
196
+ # Set docket/worker from server instance for this request's context.
197
+ # This ensures ContextVars work even in environments (like Lambda) where
198
+ # lifespan ContextVars don't propagate to request handlers.
199
+ server = self.fastmcp
200
+ if server._docket is not None:
201
+ self._docket_token = _current_docket.set(server._docket)
202
+
203
+ if server._worker is not None:
204
+ self._worker_token = _current_worker.set(server._worker)
205
+
192
206
  return self
193
207
 
194
208
  async def __aexit__(self, exc_type, exc_val, exc_tb) -> None:
@@ -196,10 +210,20 @@ class Context:
196
210
  # Flush any remaining notifications before exiting
197
211
  await self._flush_notifications()
198
212
 
199
- # Reset server token
200
- if hasattr(self, "_server_token"):
201
- from fastmcp.server.dependencies import _current_server
213
+ # Reset server/docket/worker tokens
214
+ from fastmcp.server.dependencies import (
215
+ _current_docket,
216
+ _current_server,
217
+ _current_worker,
218
+ )
202
219
 
220
+ if hasattr(self, "_worker_token"):
221
+ _current_worker.reset(self._worker_token)
222
+ delattr(self, "_worker_token")
223
+ if hasattr(self, "_docket_token"):
224
+ _current_docket.reset(self._docket_token)
225
+ delattr(self, "_docket_token")
226
+ if hasattr(self, "_server_token"):
203
227
  _current_server.reset(self._server_token)
204
228
  delattr(self, "_server_token")
205
229
 
@@ -197,8 +197,9 @@ class FastMCP(Generic[LifespanResultT]):
197
197
  # Resolve server default for background task support
198
198
  self._support_tasks_by_default: bool = tasks if tasks is not None else False
199
199
 
200
- # Docket instance (set during lifespan for cross-task access)
200
+ # Docket and Worker instances (set during lifespan for cross-task access)
201
201
  self._docket = None
202
+ self._worker = None
202
203
 
203
204
  self._additional_http_routes: list[BaseRoute] = []
204
205
  self._mounted_servers: list[MountedServer] = []
@@ -468,6 +469,8 @@ class FastMCP(Generic[LifespanResultT]):
468
469
 
469
470
  # Create and start Worker
470
471
  async with Worker(docket, **worker_kwargs) as worker: # type: ignore[arg-type]
472
+ # Store on server instance for cross-context access
473
+ self._worker = worker
471
474
  # Set Worker in ContextVar so CurrentWorker can access it
472
475
  worker_token = _current_worker.set(worker)
473
476
  try:
@@ -480,13 +483,11 @@ class FastMCP(Generic[LifespanResultT]):
480
483
  await worker_task
481
484
  finally:
482
485
  _current_worker.reset(worker_token)
486
+ self._worker = None
483
487
  finally:
484
- # Reset ContextVar
485
488
  _current_docket.reset(docket_token)
486
- # Clear instance attribute
487
489
  self._docket = None
488
490
  finally:
489
- # Reset server ContextVar
490
491
  _current_server.reset(server_token)
491
492
 
492
493
  async def _register_mounted_server_functions(
@@ -564,6 +565,8 @@ class FastMCP(Generic[LifespanResultT]):
564
565
  @asynccontextmanager
565
566
  async def _lifespan_manager(self) -> AsyncIterator[None]:
566
567
  if self._lifespan_result_set:
568
+ # Lifespan already ran - ContextVars will be set by Context.__aenter__
569
+ # at request time, so we just yield here.
567
570
  yield
568
571
  return
569
572
 
@@ -56,6 +56,7 @@ async def handle_tool_as_task(
56
56
  ctx = get_context()
57
57
  session_id = ctx.session_id
58
58
 
59
+ # Get Docket from ContextVar (set by Context.__aenter__ at request time)
59
60
  docket = _current_docket.get()
60
61
  if docket is None:
61
62
  raise McpError(
@@ -72,13 +73,15 @@ async def handle_tool_as_task(
72
73
  tool = await server.get_tool(tool_name)
73
74
 
74
75
  # Store task key mapping and creation timestamp in Redis for protocol handlers
75
- redis_key = f"fastmcp:task:{session_id}:{server_task_id}"
76
- created_at_key = f"fastmcp:task:{session_id}:{server_task_id}:created_at"
76
+ task_meta_key = docket.key(f"fastmcp:task:{session_id}:{server_task_id}")
77
+ created_at_key = docket.key(
78
+ f"fastmcp:task:{session_id}:{server_task_id}:created_at"
79
+ )
77
80
  ttl_seconds = int(
78
81
  docket.execution_ttl.total_seconds() + TASK_MAPPING_TTL_BUFFER_SECONDS
79
82
  )
80
83
  async with docket.redis() as redis:
81
- await redis.set(redis_key, task_key, ex=ttl_seconds)
84
+ await redis.set(task_meta_key, task_key, ex=ttl_seconds)
82
85
  await redis.set(created_at_key, created_at, ex=ttl_seconds)
83
86
 
84
87
  # Send notifications/tasks/created per SEP-1686 (mandatory)
@@ -165,6 +168,7 @@ async def handle_prompt_as_task(
165
168
  ctx = get_context()
166
169
  session_id = ctx.session_id
167
170
 
171
+ # Get Docket from ContextVar (set by Context.__aenter__ at request time)
168
172
  docket = _current_docket.get()
169
173
  if docket is None:
170
174
  raise McpError(
@@ -181,13 +185,15 @@ async def handle_prompt_as_task(
181
185
  prompt = await server.get_prompt(prompt_name)
182
186
 
183
187
  # Store task key mapping and creation timestamp in Redis for protocol handlers
184
- redis_key = f"fastmcp:task:{session_id}:{server_task_id}"
185
- created_at_key = f"fastmcp:task:{session_id}:{server_task_id}:created_at"
188
+ task_meta_key = docket.key(f"fastmcp:task:{session_id}:{server_task_id}")
189
+ created_at_key = docket.key(
190
+ f"fastmcp:task:{session_id}:{server_task_id}:created_at"
191
+ )
186
192
  ttl_seconds = int(
187
193
  docket.execution_ttl.total_seconds() + TASK_MAPPING_TTL_BUFFER_SECONDS
188
194
  )
189
195
  async with docket.redis() as redis:
190
- await redis.set(redis_key, task_key, ex=ttl_seconds)
196
+ await redis.set(task_meta_key, task_key, ex=ttl_seconds)
191
197
  await redis.set(created_at_key, created_at, ex=ttl_seconds)
192
198
 
193
199
  # Send notifications/tasks/created per SEP-1686 (mandatory)
@@ -272,12 +278,13 @@ async def handle_resource_as_task(
272
278
  ctx = get_context()
273
279
  session_id = ctx.session_id
274
280
 
281
+ # Get Docket from ContextVar (set by Context.__aenter__ at request time)
275
282
  docket = _current_docket.get()
276
283
  if docket is None:
277
284
  raise McpError(
278
285
  ErrorData(
279
286
  code=INTERNAL_ERROR,
280
- message="Background tasks require Docket",
287
+ message="Background tasks require a running FastMCP server context",
281
288
  )
282
289
  )
283
290
 
@@ -285,13 +292,15 @@ async def handle_resource_as_task(
285
292
  task_key = build_task_key(session_id, server_task_id, "resource", str(uri))
286
293
 
287
294
  # Store task key mapping and creation timestamp in Redis for protocol handlers
288
- redis_key = f"fastmcp:task:{session_id}:{server_task_id}"
289
- created_at_key = f"fastmcp:task:{session_id}:{server_task_id}:created_at"
295
+ task_meta_key = docket.key(f"fastmcp:task:{session_id}:{server_task_id}")
296
+ created_at_key = docket.key(
297
+ f"fastmcp:task:{session_id}:{server_task_id}:created_at"
298
+ )
290
299
  ttl_seconds = int(
291
300
  docket.execution_ttl.total_seconds() + TASK_MAPPING_TTL_BUFFER_SECONDS
292
301
  )
293
302
  async with docket.redis() as redis:
294
- await redis.set(redis_key, task_key, ex=ttl_seconds)
303
+ await redis.set(task_meta_key, task_key, ex=ttl_seconds)
295
304
  await redis.set(created_at_key, created_at, ex=ttl_seconds)
296
305
 
297
306
  # Send notifications/tasks/created per SEP-1686 (mandatory)
@@ -77,10 +77,12 @@ async def tasks_get_handler(server: FastMCP, params: dict[str, Any]) -> GetTaskR
77
77
  )
78
78
 
79
79
  # Look up full task key and creation timestamp from Redis
80
- redis_key = f"fastmcp:task:{session_id}:{client_task_id}"
81
- created_at_key = f"fastmcp:task:{session_id}:{client_task_id}:created_at"
80
+ task_meta_key = docket.key(f"fastmcp:task:{session_id}:{client_task_id}")
81
+ created_at_key = docket.key(
82
+ f"fastmcp:task:{session_id}:{client_task_id}:created_at"
83
+ )
82
84
  async with docket.redis() as redis:
83
- task_key_bytes = await redis.get(redis_key)
85
+ task_key_bytes = await redis.get(task_meta_key)
84
86
  created_at_bytes = await redis.get(created_at_key)
85
87
 
86
88
  task_key = None if task_key_bytes is None else task_key_bytes.decode("utf-8")
@@ -176,9 +178,9 @@ async def tasks_result_handler(server: FastMCP, params: dict[str, Any]) -> Any:
176
178
  )
177
179
 
178
180
  # Look up full task key from Redis
179
- redis_key = f"fastmcp:task:{session_id}:{client_task_id}"
181
+ task_meta_key = docket.key(f"fastmcp:task:{session_id}:{client_task_id}")
180
182
  async with docket.redis() as redis:
181
- task_key_bytes = await redis.get(redis_key)
183
+ task_key_bytes = await redis.get(task_meta_key)
182
184
 
183
185
  task_key = None if task_key_bytes is None else task_key_bytes.decode("utf-8")
184
186
 
@@ -309,10 +311,12 @@ async def tasks_cancel_handler(
309
311
  )
310
312
 
311
313
  # Look up full task key and creation timestamp from Redis
312
- redis_key = f"fastmcp:task:{session_id}:{client_task_id}"
313
- created_at_key = f"fastmcp:task:{session_id}:{client_task_id}:created_at"
314
+ task_meta_key = docket.key(f"fastmcp:task:{session_id}:{client_task_id}")
315
+ created_at_key = docket.key(
316
+ f"fastmcp:task:{session_id}:{client_task_id}:created_at"
317
+ )
314
318
  async with docket.redis() as redis:
315
- task_key_bytes = await redis.get(redis_key)
319
+ task_key_bytes = await redis.get(task_meta_key)
316
320
  created_at_bytes = await redis.get(created_at_key)
317
321
 
318
322
  task_key = None if task_key_bytes is None else task_key_bytes.decode("utf-8")
@@ -70,7 +70,7 @@ async def subscribe_to_task_updates(
70
70
  )
71
71
 
72
72
  except Exception as e:
73
- logger.warning(f"Subscription task failed for {task_id}: {e}", exc_info=True)
73
+ logger.error(f"subscribe_to_task_updates failed for {task_id}: {e}")
74
74
 
75
75
 
76
76
  async def _send_status_notification(
@@ -101,8 +101,7 @@ async def _send_status_notification(
101
101
  key_parts = parse_task_key(task_key)
102
102
  session_id = key_parts["session_id"]
103
103
 
104
- # Retrieve createdAt timestamp from Redis
105
- created_at_key = f"fastmcp:task:{session_id}:{task_id}:created_at"
104
+ created_at_key = docket.key(f"fastmcp:task:{session_id}:{task_id}:created_at")
106
105
  async with docket.redis() as redis:
107
106
  created_at_bytes = await redis.get(created_at_key)
108
107
 
@@ -175,8 +174,7 @@ async def _send_progress_notification(
175
174
  key_parts = parse_task_key(task_key)
176
175
  session_id = key_parts["session_id"]
177
176
 
178
- # Retrieve createdAt timestamp from Redis
179
- created_at_key = f"fastmcp:task:{session_id}:{task_id}:created_at"
177
+ created_at_key = docket.key(f"fastmcp:task:{session_id}:{task_id}:created_at")
180
178
  async with docket.redis() as redis:
181
179
  created_at_bytes = await redis.get(created_at_key)
182
180
 
@@ -392,6 +392,21 @@ class Settings(BaseSettings):
392
392
  ),
393
393
  ] = True
394
394
 
395
+ check_for_updates: Annotated[
396
+ Literal["stable", "prerelease", "off"],
397
+ Field(
398
+ description=inspect.cleandoc(
399
+ """
400
+ Controls update checking when displaying the CLI banner.
401
+ - "stable": Check for stable releases only (default)
402
+ - "prerelease": Also check for pre-release versions (alpha, beta, rc)
403
+ - "off": Disable update checking entirely
404
+ Set via FASTMCP_CHECK_FOR_UPDATES environment variable.
405
+ """
406
+ ),
407
+ ),
408
+ ] = "stable"
409
+
395
410
  @property
396
411
  def server_auth_class(self) -> AuthProvider | None:
397
412
  from fastmcp.utilities.types import get_cached_typeadapter
@@ -17,6 +17,7 @@ from fastmcp.utilities.logging import get_logger
17
17
  from fastmcp.utilities.mcp_server_config import MCPServerConfig
18
18
  from fastmcp.utilities.mcp_server_config.v1.sources.filesystem import FileSystemSource
19
19
  from fastmcp.utilities.types import get_cached_typeadapter
20
+ from fastmcp.utilities.version_check import check_for_newer_version
20
21
 
21
22
  if TYPE_CHECKING:
22
23
  from fastmcp import FastMCP
@@ -200,6 +201,9 @@ LOGO_ASCII_4 = (
200
201
  def log_server_banner(server: FastMCP[Any]) -> None:
201
202
  """Creates and logs a formatted banner with server information and logo."""
202
203
 
204
+ # Check for updates (non-blocking, fails silently)
205
+ newer_version = check_for_newer_version()
206
+
203
207
  # Create the logo text
204
208
  # Use Text with no_wrap and markup disabled to preserve ANSI escape codes
205
209
  logo_text = Text.from_ansi(LOGO_ASCII_4, no_wrap=True)
@@ -231,8 +235,10 @@ def log_server_banner(server: FastMCP[Any]) -> None:
231
235
 
232
236
  # v3 notice banner (shown below main panel)
233
237
  v3_line1 = Text("✨ FastMCP 3.0 is coming!", style="bold")
234
- v3_line2 = Text(
235
- "Pin fastmcp<3 in production, then upgrade when you're ready.", style="dim"
238
+ v3_line2 = Text.assemble(
239
+ ("Pin ", "dim"),
240
+ ("`fastmcp < 3`", "dim bold"),
241
+ (" in production, then upgrade when you're ready.", "dim"),
236
242
  )
237
243
  v3_notice = Panel(
238
244
  Group(Align.center(v3_line1), Align.center(v3_line2)),
@@ -250,5 +256,26 @@ def log_server_banner(server: FastMCP[Any]) -> None:
250
256
  )
251
257
 
252
258
  console = Console(stderr=True)
253
- # Center both panels
254
- console.print(Group("\n", Align.center(panel), Align.center(v3_notice), "\n"))
259
+
260
+ # Build output elements
261
+ output_elements: list[Align | Panel | str] = ["\n", Align.center(panel)]
262
+ output_elements.append(Align.center(v3_notice))
263
+
264
+ # Add update notice if a newer version is available (shown last for visibility)
265
+ if newer_version:
266
+ update_line1 = Text.assemble(
267
+ ("🎉 Update available: ", "bold"),
268
+ (newer_version, "bold green"),
269
+ )
270
+ update_line2 = Text("Run: pip install --upgrade fastmcp", style="dim")
271
+ update_notice = Panel(
272
+ Group(Align.center(update_line1), Align.center(update_line2)),
273
+ border_style="blue",
274
+ padding=(0, 2),
275
+ width=80,
276
+ )
277
+ output_elements.append(Align.center(update_notice))
278
+
279
+ output_elements.append("\n")
280
+
281
+ console.print(Group(*output_elements))