fastmcp 2.11.3__tar.gz → 2.12.0rc1__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 (603) hide show
  1. fastmcp-2.12.0rc1/.github/pull_request_template.md +28 -0
  2. fastmcp-2.12.0rc1/.github/workflows/auto-close-duplicates.yml +28 -0
  3. fastmcp-2.12.0rc1/.github/workflows/marvin-dedupe-issues.yml +80 -0
  4. fastmcp-2.12.0rc1/.github/workflows/marvin-label-triage.yml +157 -0
  5. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/.github/workflows/marvin.yml +23 -4
  6. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/.github/workflows/publish.yml +1 -1
  7. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/.github/workflows/run-static.yml +5 -21
  8. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/.github/workflows/run-tests.yml +7 -5
  9. fastmcp-2.12.0rc1/.github/workflows/update-config-schema.yml +91 -0
  10. fastmcp-2.12.0rc1/.github/workflows/update-sdk-docs.yml +74 -0
  11. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/.gitignore +6 -0
  12. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/.pre-commit-config.yaml +10 -4
  13. fastmcp-2.12.0rc1/AGENTS.md +251 -0
  14. fastmcp-2.12.0rc1/CODE_OF_CONDUCT.md +128 -0
  15. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/PKG-INFO +2 -1
  16. fastmcp-2.12.0rc1/docs/assets/brand/blue-logo.png +0 -0
  17. fastmcp-2.12.0rc1/docs/assets/brand/card-background.png +0 -0
  18. fastmcp-2.12.0rc1/docs/assets/brand/logo-wordmark-dark.svg +4 -0
  19. fastmcp-2.12.0rc1/docs/assets/brand/logo-wordmark.svg +4 -0
  20. fastmcp-2.12.0rc1/docs/assets/images/fastmcp_cloud/connect.png +0 -0
  21. fastmcp-2.12.0rc1/docs/assets/images/fastmcp_cloud/create_project.png +0 -0
  22. fastmcp-2.12.0rc1/docs/assets/images/fastmcp_cloud/deployment.png +0 -0
  23. fastmcp-2.12.0rc1/docs/assets/images/fastmcp_cloud/quickstart.png +0 -0
  24. fastmcp-2.12.0rc1/docs/assets/schemas/mcp_server_config/latest.json +348 -0
  25. fastmcp-2.12.0rc1/docs/assets/schemas/mcp_server_config/v1.json +348 -0
  26. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/changelog.mdx +95 -0
  27. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/clients/sampling.mdx +49 -0
  28. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/clients/tools.mdx +6 -6
  29. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/css/style.css +6 -0
  30. fastmcp-2.12.0rc1/docs/deployment/fastmcp-cloud.mdx +89 -0
  31. fastmcp-2.12.0rc1/docs/deployment/running-server.mdx +258 -0
  32. fastmcp-2.12.0rc1/docs/deployment/self-hosted.mdx +209 -0
  33. fastmcp-2.12.0rc1/docs/deployment/server-configuration.mdx +640 -0
  34. fastmcp-2.12.0rc1/docs/deployment/testing.mdx +159 -0
  35. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/docs.json +113 -32
  36. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/getting-started/installation.mdx +2 -2
  37. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/integrations/anthropic.mdx +1 -1
  38. fastmcp-2.11.3/docs/integrations/starlette.mdx → fastmcp-2.12.0rc1/docs/integrations/asgi.mdx +2 -2
  39. fastmcp-2.12.0rc1/docs/integrations/azure.mdx +250 -0
  40. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/integrations/claude-code.mdx +14 -9
  41. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/integrations/claude-desktop.mdx +14 -9
  42. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/integrations/cursor.mdx +28 -8
  43. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/integrations/gemini.mdx +1 -1
  44. fastmcp-2.12.0rc1/docs/integrations/github.mdx +205 -0
  45. fastmcp-2.12.0rc1/docs/integrations/google.mdx +215 -0
  46. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/integrations/mcp-json-configuration.mdx +17 -7
  47. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/integrations/openai.mdx +1 -1
  48. fastmcp-2.12.0rc1/docs/integrations/workos-oauth.mdx +240 -0
  49. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/patterns/cli.mdx +179 -35
  50. fastmcp-2.12.0rc1/docs/public/schemas/fastmcp.json/latest.json +361 -0
  51. fastmcp-2.12.0rc1/docs/public/schemas/fastmcp.json/v1.json +361 -0
  52. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-cli-claude.mdx +3 -3
  53. fastmcp-2.12.0rc1/docs/python-sdk/fastmcp-cli-cli.mdx +129 -0
  54. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-cli-install-claude_code.mdx +5 -5
  55. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-cli-install-claude_desktop.mdx +4 -4
  56. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-cli-install-cursor.mdx +31 -5
  57. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-cli-install-mcp_json.mdx +3 -3
  58. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-cli-install-shared.mdx +5 -3
  59. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-cli-run.mdx +21 -50
  60. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-client-auth-oauth.mdx +20 -14
  61. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-client-client.mdx +39 -33
  62. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-client-sampling.mdx +2 -2
  63. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-client-transports.mdx +30 -24
  64. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-mcp_config.mdx +19 -19
  65. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-prompts-prompt_manager.mdx +7 -7
  66. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-resources-resource_manager.mdx +10 -10
  67. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-server-auth-auth.mdx +5 -5
  68. fastmcp-2.12.0rc1/docs/python-sdk/fastmcp-server-auth-oauth_proxy.mdx +319 -0
  69. fastmcp-2.12.0rc1/docs/python-sdk/fastmcp-server-auth-providers-azure.mdx +63 -0
  70. fastmcp-2.12.0rc1/docs/python-sdk/fastmcp-server-auth-providers-github.mdx +72 -0
  71. fastmcp-2.12.0rc1/docs/python-sdk/fastmcp-server-auth-providers-google.mdx +72 -0
  72. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-server-auth-providers-jwt.mdx +22 -19
  73. fastmcp-2.12.0rc1/docs/python-sdk/fastmcp-server-auth-providers-workos.mdx +106 -0
  74. fastmcp-2.12.0rc1/docs/python-sdk/fastmcp-server-auth-redirect_validation.mdx +53 -0
  75. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-server-context.mdx +36 -27
  76. fastmcp-2.12.0rc1/docs/python-sdk/fastmcp-server-elicitation.mdx +87 -0
  77. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-server-middleware-logging.mdx +18 -6
  78. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-server-proxy.mdx +7 -7
  79. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-server-server.mdx +57 -51
  80. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-settings.mdx +1 -1
  81. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-tools-tool.mdx +17 -17
  82. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-tools-tool_manager.mdx +11 -11
  83. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-tools-tool_transform.mdx +13 -13
  84. fastmcp-2.12.0rc1/docs/python-sdk/fastmcp-utilities-auth.mdx +25 -0
  85. fastmcp-2.12.0rc1/docs/python-sdk/fastmcp-utilities-cli.mdx +55 -0
  86. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-utilities-components.mdx +7 -7
  87. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-utilities-inspect.mdx +57 -8
  88. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-utilities-logging.mdx +2 -1
  89. fastmcp-2.12.0rc1/docs/python-sdk/fastmcp-utilities-mcp_config.mdx +28 -0
  90. fastmcp-2.12.0rc1/docs/python-sdk/fastmcp-utilities-mcp_server_config-__init__.mdx +13 -0
  91. fastmcp-2.12.0rc1/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-__init__.mdx +8 -0
  92. fastmcp-2.12.0rc1/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-environments-__init__.mdx +9 -0
  93. fastmcp-2.12.0rc1/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-environments-base.mdx +43 -0
  94. fastmcp-2.12.0rc1/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-environments-uv.mdx +75 -0
  95. fastmcp-2.12.0rc1/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-mcp_server_config.mdx +235 -0
  96. fastmcp-2.12.0rc1/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-sources-__init__.mdx +8 -0
  97. fastmcp-2.12.0rc1/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-sources-base.mdx +42 -0
  98. fastmcp-2.12.0rc1/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-sources-filesystem.mdx +37 -0
  99. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-utilities-tests.mdx +6 -4
  100. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-utilities-types.mdx +15 -13
  101. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/servers/auth/authentication.mdx +74 -8
  102. fastmcp-2.12.0rc1/docs/servers/auth/oauth-proxy.mdx +381 -0
  103. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/servers/auth/remote-oauth.mdx +37 -5
  104. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/servers/auth/token-verification.mdx +48 -3
  105. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/servers/composition.mdx +5 -1
  106. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/servers/prompts.mdx +2 -2
  107. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/servers/server.mdx +27 -6
  108. fastmcp-2.12.0rc1/examples/atproto_mcp/fastmcp.json +11 -0
  109. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/examples/atproto_mcp/src/atproto_mcp/_atproto/_posts.py +42 -7
  110. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/examples/atproto_mcp/src/atproto_mcp/server.py +1 -6
  111. fastmcp-2.12.0rc1/examples/auth/azure_oauth/README.md +51 -0
  112. fastmcp-2.12.0rc1/examples/auth/azure_oauth/client.py +32 -0
  113. fastmcp-2.12.0rc1/examples/auth/azure_oauth/server.py +40 -0
  114. fastmcp-2.12.0rc1/examples/auth/github_oauth/README.md +31 -0
  115. fastmcp-2.12.0rc1/examples/auth/github_oauth/client.py +32 -0
  116. fastmcp-2.12.0rc1/examples/auth/github_oauth/server.py +36 -0
  117. fastmcp-2.12.0rc1/examples/auth/google_oauth/README.md +34 -0
  118. fastmcp-2.12.0rc1/examples/auth/google_oauth/client.py +32 -0
  119. fastmcp-2.12.0rc1/examples/auth/google_oauth/server.py +38 -0
  120. fastmcp-2.12.0rc1/examples/auth/workos_oauth/README.md +159 -0
  121. fastmcp-2.12.0rc1/examples/auth/workos_oauth/client.py +32 -0
  122. fastmcp-2.12.0rc1/examples/auth/workos_oauth/server.py +38 -0
  123. fastmcp-2.12.0rc1/examples/fastmcp_config/env_interpolation_example.json +20 -0
  124. fastmcp-2.12.0rc1/examples/fastmcp_config/fastmcp.json +13 -0
  125. fastmcp-2.12.0rc1/examples/fastmcp_config/full_example.fastmcp.json +27 -0
  126. fastmcp-2.12.0rc1/examples/fastmcp_config/server.py +39 -0
  127. fastmcp-2.12.0rc1/examples/fastmcp_config/simple.fastmcp.json +7 -0
  128. fastmcp-2.12.0rc1/examples/fastmcp_config_demo/README.md +55 -0
  129. fastmcp-2.12.0rc1/examples/fastmcp_config_demo/fastmcp.json +14 -0
  130. fastmcp-2.12.0rc1/examples/fastmcp_config_demo/server.py +70 -0
  131. fastmcp-2.12.0rc1/examples/memory.fastmcp.json +7 -0
  132. fastmcp-2.12.0rc1/examples/mount_example.fastmcp.json +4 -0
  133. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/examples/mount_example.py +1 -3
  134. fastmcp-2.12.0rc1/examples/sampling_fallback.py +34 -0
  135. fastmcp-2.12.0rc1/examples/screenshot.fastmcp.json +7 -0
  136. fastmcp-2.12.0rc1/examples/smart_home/hub.fastmcp.json +9 -0
  137. fastmcp-2.12.0rc1/examples/smart_home/lights.fastmcp.json +9 -0
  138. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/justfile +2 -2
  139. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/pyproject.toml +18 -11
  140. fastmcp-2.12.0rc1/scripts/auto_close_duplicates.py +331 -0
  141. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/__init__.py +5 -4
  142. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/cli/claude.py +22 -18
  143. fastmcp-2.12.0rc1/src/fastmcp/cli/cli.py +858 -0
  144. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/cli/install/claude_code.py +37 -40
  145. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/cli/install/claude_desktop.py +37 -42
  146. fastmcp-2.12.0rc1/src/fastmcp/cli/install/cursor.py +347 -0
  147. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/cli/install/mcp_json.py +38 -43
  148. fastmcp-2.12.0rc1/src/fastmcp/cli/install/shared.py +142 -0
  149. fastmcp-2.12.0rc1/src/fastmcp/cli/run.py +304 -0
  150. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/client/auth/oauth.py +69 -13
  151. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/client/client.py +46 -9
  152. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/client/oauth_callback.py +91 -91
  153. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/client/sampling.py +12 -4
  154. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/client/transports.py +139 -64
  155. fastmcp-2.12.0rc1/src/fastmcp/experimental/sampling/handlers/__init__.py +3 -0
  156. fastmcp-2.12.0rc1/src/fastmcp/experimental/sampling/handlers/base.py +21 -0
  157. fastmcp-2.12.0rc1/src/fastmcp/experimental/sampling/handlers/openai.py +163 -0
  158. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/experimental/server/openapi/routing.py +0 -2
  159. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/experimental/server/openapi/server.py +0 -2
  160. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/experimental/utilities/openapi/parser.py +5 -1
  161. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/mcp_config.py +40 -20
  162. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/prompts/prompt_manager.py +2 -0
  163. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/resources/resource_manager.py +4 -0
  164. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/server/auth/__init__.py +2 -0
  165. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/server/auth/auth.py +2 -1
  166. fastmcp-2.12.0rc1/src/fastmcp/server/auth/oauth_proxy.py +1047 -0
  167. fastmcp-2.12.0rc1/src/fastmcp/server/auth/providers/azure.py +270 -0
  168. fastmcp-2.12.0rc1/src/fastmcp/server/auth/providers/github.py +287 -0
  169. fastmcp-2.12.0rc1/src/fastmcp/server/auth/providers/google.py +305 -0
  170. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/server/auth/providers/jwt.py +24 -12
  171. fastmcp-2.12.0rc1/src/fastmcp/server/auth/providers/workos.py +405 -0
  172. fastmcp-2.12.0rc1/src/fastmcp/server/auth/redirect_validation.py +65 -0
  173. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/server/context.py +91 -41
  174. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/server/elicitation.py +60 -1
  175. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/server/http.py +3 -3
  176. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/server/middleware/logging.py +66 -28
  177. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/server/proxy.py +2 -0
  178. fastmcp-2.12.0rc1/src/fastmcp/server/sampling/handler.py +19 -0
  179. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/server/server.py +76 -15
  180. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/settings.py +16 -1
  181. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/tools/tool.py +22 -9
  182. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/tools/tool_manager.py +2 -0
  183. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/tools/tool_transform.py +39 -10
  184. fastmcp-2.12.0rc1/src/fastmcp/utilities/auth.py +34 -0
  185. fastmcp-2.12.0rc1/src/fastmcp/utilities/cli.py +235 -0
  186. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/utilities/components.py +2 -1
  187. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/utilities/inspect.py +166 -37
  188. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/utilities/json_schema_type.py +4 -2
  189. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/utilities/logging.py +4 -1
  190. fastmcp-2.12.0rc1/src/fastmcp/utilities/mcp_config.py +57 -0
  191. fastmcp-2.12.0rc1/src/fastmcp/utilities/mcp_server_config/__init__.py +25 -0
  192. fastmcp-2.12.0rc1/src/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +6 -0
  193. fastmcp-2.12.0rc1/src/fastmcp/utilities/mcp_server_config/v1/environments/base.py +30 -0
  194. fastmcp-2.12.0rc1/src/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +306 -0
  195. fastmcp-2.12.0rc1/src/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +446 -0
  196. fastmcp-2.12.0rc1/src/fastmcp/utilities/mcp_server_config/v1/schema.json +361 -0
  197. fastmcp-2.12.0rc1/src/fastmcp/utilities/mcp_server_config/v1/sources/base.py +30 -0
  198. fastmcp-2.12.0rc1/src/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +216 -0
  199. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/utilities/tests.py +7 -2
  200. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/utilities/types.py +15 -2
  201. fastmcp-2.12.0rc1/test_github_oauth.py +21 -0
  202. fastmcp-2.12.0rc1/test_google_oauth.py +22 -0
  203. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/cli/test_cli.py +101 -156
  204. fastmcp-2.12.0rc1/tests/cli/test_config.py +444 -0
  205. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/cli/test_cursor.py +12 -7
  206. fastmcp-2.12.0rc1/tests/cli/test_mcp_server_config_integration.py +290 -0
  207. fastmcp-2.12.0rc1/tests/cli/test_mcp_server_config_schema.py +149 -0
  208. fastmcp-2.12.0rc1/tests/cli/test_project_prepare.py +303 -0
  209. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/cli/test_run.py +165 -32
  210. fastmcp-2.12.0rc1/tests/cli/test_run_config.py +271 -0
  211. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/cli/test_run_with_uv.py +47 -38
  212. fastmcp-2.12.0rc1/tests/cli/test_server_args.py +139 -0
  213. fastmcp-2.12.0rc1/tests/cli/test_with_argv.py +91 -0
  214. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/client/auth/test_oauth_client.py +1 -1
  215. fastmcp-2.12.0rc1/tests/client/auth/test_oauth_token_expiry.py +152 -0
  216. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/client/test_elicitation.py +84 -0
  217. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/client/test_sampling.py +26 -0
  218. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/client/test_sse.py +1 -1
  219. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/client/test_stdio.py +128 -1
  220. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/conftest.py +8 -0
  221. fastmcp-2.12.0rc1/tests/deprecated/test_dependencies.py +30 -0
  222. fastmcp-2.12.0rc1/tests/deprecated/test_output_schema_false.py +139 -0
  223. fastmcp-2.12.0rc1/tests/experimental/sampling/test_openai_handler.py +100 -0
  224. fastmcp-2.12.0rc1/tests/integration_tests/auth/test_github_provider_integration.py +356 -0
  225. fastmcp-2.12.0rc1/tests/server/auth/providers/__init__.py +0 -0
  226. fastmcp-2.12.0rc1/tests/server/auth/providers/test_azure.py +164 -0
  227. fastmcp-2.12.0rc1/tests/server/auth/providers/test_github.py +240 -0
  228. fastmcp-2.12.0rc1/tests/server/auth/providers/test_google.py +116 -0
  229. fastmcp-2.12.0rc1/tests/server/auth/providers/test_workos.py +152 -0
  230. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/server/auth/test_jwt_provider.py +274 -1
  231. fastmcp-2.12.0rc1/tests/server/auth/test_oauth_proxy.py +594 -0
  232. fastmcp-2.12.0rc1/tests/server/auth/test_oauth_proxy_redirect_validation.py +197 -0
  233. fastmcp-2.12.0rc1/tests/server/auth/test_redirect_validation.py +141 -0
  234. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/server/auth/test_workos.py +1 -1
  235. fastmcp-2.12.0rc1/tests/server/http/__init__.py +0 -0
  236. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/server/http/test_http_dependencies.py +2 -2
  237. fastmcp-2.12.0rc1/tests/server/middleware/__init__.py +0 -0
  238. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/server/middleware/test_logging.py +295 -48
  239. fastmcp-2.12.0rc1/tests/server/openapi/__init__.py +0 -0
  240. fastmcp-2.12.0rc1/tests/server/proxy/__init__.py +0 -0
  241. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/server/proxy/test_proxy_server.py +1 -1
  242. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/server/test_context.py +7 -7
  243. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/server/test_mount.py +131 -6
  244. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/server/test_server.py +1 -1
  245. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/server/test_server_interactions.py +3 -3
  246. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/test_mcp_config.py +184 -0
  247. fastmcp-2.12.0rc1/tests/tools/__init__.py +0 -0
  248. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/tools/test_tool.py +241 -69
  249. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/tools/test_tool_manager.py +42 -1
  250. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/tools/test_tool_transform.py +237 -32
  251. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/utilities/openapi/test_openapi.py +262 -205
  252. fastmcp-2.12.0rc1/tests/utilities/test_cli.py +192 -0
  253. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/utilities/test_inspect.py +210 -10
  254. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/utilities/test_json_schema.py +1 -0
  255. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/uv.lock +613 -420
  256. fastmcp-2.11.3/.github/labeler.yml +0 -33
  257. fastmcp-2.11.3/.github/workflows/labeler.yml +0 -13
  258. fastmcp-2.11.3/AGENTS.md +0 -134
  259. fastmcp-2.11.3/docs/deployment/running-server.mdx +0 -323
  260. fastmcp-2.11.3/docs/patterns/testing.mdx +0 -48
  261. fastmcp-2.11.3/docs/python-sdk/fastmcp-cli-cli.mdx +0 -80
  262. fastmcp-2.11.3/docs/python-sdk/fastmcp-server-auth-providers-workos.mdx +0 -48
  263. fastmcp-2.11.3/docs/python-sdk/fastmcp-server-elicitation.mdx +0 -54
  264. fastmcp-2.11.3/docs/python-sdk/fastmcp-utilities-cli.mdx +0 -25
  265. fastmcp-2.11.3/docs/python-sdk/fastmcp-utilities-mcp_config.mdx +0 -28
  266. fastmcp-2.11.3/src/fastmcp/cli/cli.py +0 -522
  267. fastmcp-2.11.3/src/fastmcp/cli/install/cursor.py +0 -237
  268. fastmcp-2.11.3/src/fastmcp/cli/install/shared.py +0 -85
  269. fastmcp-2.11.3/src/fastmcp/cli/run.py +0 -397
  270. fastmcp-2.11.3/src/fastmcp/server/auth/providers/workos.py +0 -151
  271. fastmcp-2.11.3/src/fastmcp/utilities/cli.py +0 -102
  272. fastmcp-2.11.3/src/fastmcp/utilities/mcp_config.py +0 -28
  273. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/.ccignore +0 -0
  274. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/.cursor/rules/core-mcp-objects.mdc +0 -0
  275. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/.github/ISSUE_TEMPLATE/bug.yml +0 -0
  276. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  277. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/.github/ISSUE_TEMPLATE/enhancement.yml +0 -0
  278. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/.github/copilot-instructions.md +0 -0
  279. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/.github/dependabot.yml +0 -0
  280. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/.github/release.yml +0 -0
  281. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/CLAUDE.md +0 -0
  282. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/LICENSE +0 -0
  283. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/README.md +0 -0
  284. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/README_OPENAPI.md +0 -0
  285. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/Windows_Notes.md +0 -0
  286. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/.ccignore +0 -0
  287. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/.cursor/rules/mintlify.mdc +0 -0
  288. {fastmcp-2.11.3/docs/assets → fastmcp-2.12.0rc1/docs/assets/brand}/favicon.svg +0 -0
  289. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/assets/images/tutorial-rest-api-result.png +0 -0
  290. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/assets/updates/release-2-7.png +0 -0
  291. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/clients/auth/bearer.mdx +0 -0
  292. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/clients/auth/oauth.mdx +0 -0
  293. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/clients/client.mdx +0 -0
  294. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/clients/elicitation.mdx +0 -0
  295. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/clients/logging.mdx +0 -0
  296. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/clients/messages.mdx +0 -0
  297. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/clients/progress.mdx +0 -0
  298. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/clients/prompts.mdx +0 -0
  299. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/clients/resources.mdx +0 -0
  300. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/clients/roots.mdx +0 -0
  301. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/clients/transports.mdx +0 -0
  302. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/community/README.md +0 -0
  303. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/community/showcase.mdx +0 -0
  304. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/css/banner.css +0 -0
  305. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/css/python-sdk.css +0 -0
  306. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/css/version-badge.css +0 -0
  307. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/getting-started/quickstart.mdx +0 -0
  308. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/getting-started/welcome.mdx +0 -0
  309. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/integrations/authkit.mdx +0 -0
  310. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/integrations/chatgpt.mdx +0 -0
  311. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/integrations/cursor-install-mcp.png +0 -0
  312. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/integrations/eunomia-authorization.mdx +0 -0
  313. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/integrations/fastapi.mdx +0 -0
  314. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/integrations/images/authkit/enable_dcr.png +0 -0
  315. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/integrations/images/permit/abac_condition_example.png +0 -0
  316. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/integrations/images/permit/abac_policy_example.png +0 -0
  317. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/integrations/images/permit/policy_mapping.png +0 -0
  318. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/integrations/images/permit/role_assignement.png +0 -0
  319. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/integrations/openapi.mdx +0 -0
  320. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/integrations/permit.mdx +0 -0
  321. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/patterns/contrib.mdx +0 -0
  322. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/patterns/decorating-methods.mdx +0 -0
  323. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/patterns/tool-transformation.mdx +0 -0
  324. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-cli-__init__.mdx +0 -0
  325. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-cli-install-__init__.mdx +0 -0
  326. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-client-__init__.mdx +0 -0
  327. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-client-auth-__init__.mdx +0 -0
  328. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-client-auth-bearer.mdx +0 -0
  329. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-client-elicitation.mdx +0 -0
  330. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-client-logging.mdx +0 -0
  331. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-client-messages.mdx +0 -0
  332. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-client-oauth_callback.mdx +0 -0
  333. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-client-progress.mdx +0 -0
  334. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-client-roots.mdx +0 -0
  335. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-exceptions.mdx +0 -0
  336. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-prompts-__init__.mdx +0 -0
  337. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-prompts-prompt.mdx +0 -0
  338. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-resources-__init__.mdx +0 -0
  339. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-resources-resource.mdx +0 -0
  340. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-resources-template.mdx +0 -0
  341. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-resources-types.mdx +0 -0
  342. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-server-__init__.mdx +0 -0
  343. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-server-auth-__init__.mdx +0 -0
  344. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-server-auth-providers-__init__.mdx +0 -0
  345. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-server-auth-providers-bearer.mdx +0 -0
  346. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-server-auth-providers-in_memory.mdx +0 -0
  347. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-server-auth-registry.mdx +0 -0
  348. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-server-dependencies.mdx +0 -0
  349. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-server-http.mdx +0 -0
  350. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-server-low_level.mdx +0 -0
  351. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-server-middleware-__init__.mdx +0 -0
  352. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-server-middleware-error_handling.mdx +0 -0
  353. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-server-middleware-middleware.mdx +0 -0
  354. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-server-middleware-rate_limiting.mdx +0 -0
  355. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-server-middleware-timing.mdx +0 -0
  356. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-server-openapi.mdx +0 -0
  357. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-tools-__init__.mdx +0 -0
  358. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-utilities-__init__.mdx +0 -0
  359. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-utilities-exceptions.mdx +0 -0
  360. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-utilities-http.mdx +0 -0
  361. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-utilities-json_schema.mdx +0 -0
  362. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-utilities-json_schema_type.mdx +0 -0
  363. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-utilities-openapi.mdx +0 -0
  364. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/servers/auth/full-oauth-server.mdx +0 -0
  365. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/servers/context.mdx +0 -0
  366. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/servers/elicitation.mdx +0 -0
  367. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/servers/logging.mdx +0 -0
  368. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/servers/middleware.mdx +0 -0
  369. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/servers/progress.mdx +0 -0
  370. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/servers/proxy.mdx +0 -0
  371. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/servers/resources.mdx +0 -0
  372. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/servers/sampling.mdx +0 -0
  373. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/servers/tools.mdx +0 -0
  374. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/snippets/local-focus.mdx +0 -0
  375. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/snippets/version-badge.mdx +0 -0
  376. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/snippets/youtube-embed.mdx +0 -0
  377. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/tutorials/create-mcp-server.mdx +0 -0
  378. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/tutorials/mcp.mdx +0 -0
  379. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/tutorials/rest-api.mdx +0 -0
  380. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/docs/updates.mdx +0 -0
  381. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/examples/atproto_mcp/README.md +0 -0
  382. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/examples/atproto_mcp/demo.py +0 -0
  383. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/examples/atproto_mcp/pyproject.toml +0 -0
  384. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/examples/atproto_mcp/src/atproto_mcp/__init__.py +0 -0
  385. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/examples/atproto_mcp/src/atproto_mcp/__main__.py +0 -0
  386. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/examples/atproto_mcp/src/atproto_mcp/_atproto/__init__.py +0 -0
  387. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/examples/atproto_mcp/src/atproto_mcp/_atproto/_client.py +0 -0
  388. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/examples/atproto_mcp/src/atproto_mcp/_atproto/_profile.py +0 -0
  389. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/examples/atproto_mcp/src/atproto_mcp/_atproto/_read.py +0 -0
  390. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/examples/atproto_mcp/src/atproto_mcp/_atproto/_social.py +0 -0
  391. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/examples/atproto_mcp/src/atproto_mcp/py.typed +0 -0
  392. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/examples/atproto_mcp/src/atproto_mcp/settings.py +0 -0
  393. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/examples/atproto_mcp/src/atproto_mcp/types.py +0 -0
  394. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/examples/complex_inputs.py +0 -0
  395. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/examples/config_server.py +0 -0
  396. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/examples/desktop.py +0 -0
  397. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/examples/echo.py +0 -0
  398. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/examples/get_file.py +0 -0
  399. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/examples/in_memory_proxy_example.py +0 -0
  400. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/examples/memory.py +0 -0
  401. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/examples/sampling.py +0 -0
  402. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/examples/screenshot.py +0 -0
  403. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/examples/serializer.py +0 -0
  404. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/examples/simple_echo.py +0 -0
  405. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/examples/smart_home/README.md +0 -0
  406. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/examples/smart_home/pyproject.toml +0 -0
  407. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/examples/smart_home/src/smart_home/__init__.py +0 -0
  408. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/examples/smart_home/src/smart_home/__main__.py +0 -0
  409. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/examples/smart_home/src/smart_home/hub.py +0 -0
  410. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/examples/smart_home/src/smart_home/lights/__init__.py +0 -0
  411. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/examples/smart_home/src/smart_home/lights/hue_utils.py +0 -0
  412. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/examples/smart_home/src/smart_home/lights/server.py +0 -0
  413. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/examples/smart_home/src/smart_home/py.typed +0 -0
  414. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/examples/smart_home/src/smart_home/settings.py +0 -0
  415. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/examples/smart_home/uv.lock +0 -0
  416. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/examples/tags_example.py +0 -0
  417. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/examples/text_me.py +0 -0
  418. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/cli/__init__.py +0 -0
  419. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/cli/install/__init__.py +0 -0
  420. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/client/__init__.py +0 -0
  421. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/client/auth/__init__.py +0 -0
  422. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/client/auth/bearer.py +0 -0
  423. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/client/elicitation.py +0 -0
  424. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/client/logging.py +0 -0
  425. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/client/messages.py +0 -0
  426. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/client/progress.py +0 -0
  427. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/client/roots.py +0 -0
  428. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/contrib/README.md +0 -0
  429. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
  430. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
  431. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
  432. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
  433. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/contrib/component_manager/README.md +0 -0
  434. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/contrib/component_manager/__init__.py +0 -0
  435. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/contrib/component_manager/component_manager.py +0 -0
  436. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/contrib/component_manager/component_service.py +0 -0
  437. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/contrib/component_manager/example.py +0 -0
  438. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/contrib/mcp_mixin/README.md +0 -0
  439. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
  440. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/contrib/mcp_mixin/example.py +0 -0
  441. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
  442. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/exceptions.py +0 -0
  443. {fastmcp-2.11.3/src/fastmcp/server/auth/providers → fastmcp-2.12.0rc1/src/fastmcp/experimental/sampling}/__init__.py +0 -0
  444. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/experimental/server/openapi/README.md +0 -0
  445. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/experimental/server/openapi/__init__.py +0 -0
  446. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/experimental/server/openapi/components.py +0 -0
  447. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/experimental/utilities/openapi/README.md +0 -0
  448. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/experimental/utilities/openapi/__init__.py +0 -0
  449. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/experimental/utilities/openapi/director.py +0 -0
  450. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/experimental/utilities/openapi/formatters.py +0 -0
  451. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/experimental/utilities/openapi/json_schema_converter.py +0 -0
  452. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/experimental/utilities/openapi/models.py +0 -0
  453. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/experimental/utilities/openapi/schemas.py +0 -0
  454. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/prompts/__init__.py +0 -0
  455. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/prompts/prompt.py +0 -0
  456. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/py.typed +0 -0
  457. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/resources/__init__.py +0 -0
  458. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/resources/resource.py +0 -0
  459. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/resources/template.py +0 -0
  460. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/resources/types.py +0 -0
  461. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/server/__init__.py +0 -0
  462. {fastmcp-2.11.3/tests → fastmcp-2.12.0rc1/src/fastmcp/server/auth/providers}/__init__.py +0 -0
  463. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/server/auth/providers/bearer.py +0 -0
  464. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/server/auth/providers/in_memory.py +0 -0
  465. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/server/auth/registry.py +0 -0
  466. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/server/dependencies.py +0 -0
  467. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/server/low_level.py +0 -0
  468. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/server/middleware/__init__.py +0 -0
  469. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/server/middleware/error_handling.py +0 -0
  470. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/server/middleware/middleware.py +0 -0
  471. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/server/middleware/rate_limiting.py +0 -0
  472. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/server/middleware/timing.py +0 -0
  473. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/server/openapi.py +0 -0
  474. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/tools/__init__.py +0 -0
  475. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/utilities/__init__.py +0 -0
  476. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/utilities/exceptions.py +0 -0
  477. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/utilities/http.py +0 -0
  478. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/utilities/json_schema.py +0 -0
  479. {fastmcp-2.11.3/tests/client → fastmcp-2.12.0rc1/src/fastmcp/utilities/mcp_server_config/v1}/__init__.py +0 -0
  480. {fastmcp-2.11.3/tests/client/auth → fastmcp-2.12.0rc1/src/fastmcp/utilities/mcp_server_config/v1/sources}/__init__.py +0 -0
  481. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/src/fastmcp/utilities/openapi.py +0 -0
  482. {fastmcp-2.11.3/tests/client/transports → fastmcp-2.12.0rc1/tests}/__init__.py +0 -0
  483. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/cli/__init__.py +0 -0
  484. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/cli/test_install.py +0 -0
  485. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/cli/test_shared.py +0 -0
  486. {fastmcp-2.11.3/tests/experimental → fastmcp-2.12.0rc1/tests/client}/__init__.py +0 -0
  487. {fastmcp-2.11.3/tests/experimental/openapi_parser → fastmcp-2.12.0rc1/tests/client/auth}/__init__.py +0 -0
  488. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/client/test_client.py +0 -0
  489. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/client/test_logs.py +0 -0
  490. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/client/test_notifications.py +0 -0
  491. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/client/test_openapi_experimental.py +0 -0
  492. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/client/test_openapi_legacy.py +0 -0
  493. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/client/test_progress.py +0 -0
  494. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/client/test_roots.py +0 -0
  495. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/client/test_streamable_http.py +0 -0
  496. {fastmcp-2.11.3/tests/experimental/openapi_parser/server → fastmcp-2.12.0rc1/tests/client/transports}/__init__.py +0 -0
  497. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/client/transports/test_uv_transport.py +0 -0
  498. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/contrib/__init__.py +0 -0
  499. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/contrib/test_bulk_tool_caller.py +0 -0
  500. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/contrib/test_component_manager.py +0 -0
  501. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/contrib/test_mcp_mixin.py +0 -0
  502. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/deprecated/__init__.py +0 -0
  503. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/deprecated/test_bearer_auth_provider.py +0 -0
  504. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/deprecated/test_deprecated.py +0 -0
  505. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/deprecated/test_mount_import_arg_order.py +0 -0
  506. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/deprecated/test_mount_separators.py +0 -0
  507. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/deprecated/test_proxy_client.py +0 -0
  508. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/deprecated/test_resource_prefixes.py +0 -0
  509. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/deprecated/test_route_type_ignore.py +0 -0
  510. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/deprecated/test_settings.py +0 -0
  511. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/experimental/README.md +0 -0
  512. {fastmcp-2.11.3/tests/experimental/openapi_parser/utilities → fastmcp-2.12.0rc1/tests/experimental}/__init__.py +0 -0
  513. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/experimental/openapi_parser/README.md +0 -0
  514. {fastmcp-2.11.3/tests/integration_tests → fastmcp-2.12.0rc1/tests/experimental/openapi_parser}/__init__.py +0 -0
  515. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/experimental/openapi_parser/conftest.py +0 -0
  516. {fastmcp-2.11.3/tests/prompts → fastmcp-2.12.0rc1/tests/experimental/openapi_parser/server}/__init__.py +0 -0
  517. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/experimental/openapi_parser/server/openapi/__init__.py +0 -0
  518. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/experimental/openapi_parser/server/openapi/test_comprehensive.py +0 -0
  519. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/experimental/openapi_parser/server/openapi/test_deepobject_style.py +0 -0
  520. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/experimental/openapi_parser/server/openapi/test_end_to_end_compatibility.py +0 -0
  521. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/experimental/openapi_parser/server/openapi/test_openapi_features.py +0 -0
  522. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/experimental/openapi_parser/server/openapi/test_openapi_performance.py +0 -0
  523. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/experimental/openapi_parser/server/openapi/test_parameter_collisions.py +0 -0
  524. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/experimental/openapi_parser/server/openapi/test_performance_comparison.py +0 -0
  525. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/experimental/openapi_parser/server/openapi/test_server.py +0 -0
  526. {fastmcp-2.11.3/tests/resources → fastmcp-2.12.0rc1/tests/experimental/openapi_parser/utilities}/__init__.py +0 -0
  527. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/experimental/openapi_parser/utilities/openapi/__init__.py +0 -0
  528. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/experimental/openapi_parser/utilities/openapi/conftest.py +0 -0
  529. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/experimental/openapi_parser/utilities/openapi/test_allof_requestbody.py +0 -0
  530. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/experimental/openapi_parser/utilities/openapi/test_director.py +0 -0
  531. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/experimental/openapi_parser/utilities/openapi/test_legacy_compatibility.py +0 -0
  532. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/experimental/openapi_parser/utilities/openapi/test_models.py +0 -0
  533. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/experimental/openapi_parser/utilities/openapi/test_nullable_fields.py +0 -0
  534. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/experimental/openapi_parser/utilities/openapi/test_parser.py +0 -0
  535. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/experimental/openapi_parser/utilities/openapi/test_schemas.py +0 -0
  536. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/experimental/openapi_parser/utilities/openapi/test_transitive_references.py +0 -0
  537. {fastmcp-2.11.3/tests/server → fastmcp-2.12.0rc1/tests/integration_tests}/__init__.py +0 -0
  538. {fastmcp-2.11.3/tests/server/http → fastmcp-2.12.0rc1/tests/integration_tests/auth}/__init__.py +0 -0
  539. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/integration_tests/conftest.py +0 -0
  540. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/integration_tests/test_github_mcp_remote.py +0 -0
  541. {fastmcp-2.11.3/tests/server/middleware → fastmcp-2.12.0rc1/tests/prompts}/__init__.py +0 -0
  542. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/prompts/test_prompt.py +0 -0
  543. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/prompts/test_prompt_manager.py +0 -0
  544. {fastmcp-2.11.3/tests/server/openapi → fastmcp-2.12.0rc1/tests/resources}/__init__.py +0 -0
  545. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/resources/test_file_resources.py +0 -0
  546. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/resources/test_function_resources.py +0 -0
  547. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/resources/test_resource_manager.py +0 -0
  548. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/resources/test_resource_template.py +0 -0
  549. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/resources/test_resource_template_meta.py +0 -0
  550. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/resources/test_resources.py +0 -0
  551. {fastmcp-2.11.3/tests/server/proxy → fastmcp-2.12.0rc1/tests/server}/__init__.py +0 -0
  552. {fastmcp-2.11.3/tests/tools → fastmcp-2.12.0rc1/tests/server/auth}/__init__.py +0 -0
  553. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/server/auth/test_remote_auth_provider.py +0 -0
  554. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/server/auth/test_static_token_verifier.py +0 -0
  555. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/server/http/test_bearer_auth_backend.py +0 -0
  556. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/server/http/test_custom_routes.py +0 -0
  557. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/server/http/test_http_auth_middleware.py +0 -0
  558. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/server/http/test_http_middleware.py +0 -0
  559. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/server/middleware/test_error_handling.py +0 -0
  560. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/server/middleware/test_middleware.py +0 -0
  561. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/server/middleware/test_rate_limiting.py +0 -0
  562. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/server/middleware/test_timing.py +0 -0
  563. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/server/openapi/conftest.py +0 -0
  564. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/server/openapi/test_advanced_behavior.py +0 -0
  565. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/server/openapi/test_basic_functionality.py +0 -0
  566. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/server/openapi/test_configuration.py +0 -0
  567. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/server/openapi/test_deepobject_style.py +0 -0
  568. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/server/openapi/test_description_propagation.py +0 -0
  569. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/server/openapi/test_explode_integration.py +0 -0
  570. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/server/openapi/test_openapi_compatibility.py +0 -0
  571. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/server/openapi/test_openapi_path_parameters.py +0 -0
  572. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/server/openapi/test_optional_parameters.py +0 -0
  573. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/server/openapi/test_parameter_collisions.py +0 -0
  574. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/server/openapi/test_route_map_fn.py +0 -0
  575. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/server/proxy/test_proxy_client.py +0 -0
  576. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/server/proxy/test_stateful_proxy_client.py +0 -0
  577. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/server/test_app_state.py +0 -0
  578. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/server/test_auth_integration.py +0 -0
  579. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/server/test_experimental_openapi_feature_flag.py +0 -0
  580. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/server/test_file_server.py +0 -0
  581. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/server/test_import_server.py +0 -0
  582. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/server/test_logging.py +0 -0
  583. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/server/test_resource_prefix_formats.py +0 -0
  584. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/server/test_run_server.py +0 -0
  585. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/server/test_streamable_http_no_redirect.py +0 -0
  586. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/server/test_tool_annotations.py +0 -0
  587. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/server/test_tool_exclude_args.py +0 -0
  588. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/server/test_tool_transformation.py +0 -0
  589. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/test_examples.py +0 -0
  590. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/tools/test_tool_future_annotations.py +0 -0
  591. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/utilities/__init__.py +0 -0
  592. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/utilities/openapi/__init__.py +0 -0
  593. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/utilities/openapi/conftest.py +0 -0
  594. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/utilities/openapi/test_nullable_fields.py +0 -0
  595. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/utilities/openapi/test_openapi_advanced.py +0 -0
  596. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/utilities/openapi/test_openapi_fastapi.py +0 -0
  597. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/utilities/openapi/test_openapi_output_schemas.py +0 -0
  598. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/utilities/test_components.py +0 -0
  599. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/utilities/test_json_schema_type.py +0 -0
  600. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/utilities/test_logging.py +0 -0
  601. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/utilities/test_tests.py +0 -0
  602. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/utilities/test_typeadapter.py +0 -0
  603. {fastmcp-2.11.3 → fastmcp-2.12.0rc1}/tests/utilities/test_types.py +0 -0
@@ -0,0 +1,28 @@
1
+ ## Description
2
+ <!--
3
+ Please provide a clear and concise description of the changes made in this pull request.
4
+
5
+ Using AI to generate code? Please include a note in the description with which AI tool you used.
6
+ -->
7
+
8
+ **Contributors Checklist**
9
+ <!--
10
+ NOTE:
11
+ 1. You must create an issue in the repository before making a Pull Request.
12
+ 2. You must not create a Pull Request for an issue that is already assigned to someone else.
13
+
14
+ If you do not follow these steps, your Pull Request will be closed without review.
15
+ -->
16
+
17
+ - [ ] My change is related to issue #(issue number)
18
+ - [ ] I have followed the repository's development workflow
19
+ - [ ] I have tested my changes manually and by adding relevant tests
20
+ - [ ] I have performed all required documentation updates
21
+
22
+ **Review Checklist**
23
+ <!-- Your Pull Request will not be reviewed if tests are failing, you have not self-reviewed your changes, or you have not checked all of the following: -->
24
+
25
+ - [ ] I have self-reviewed my changes
26
+ - [ ] My Pull Request is ready for review
27
+
28
+ ---
@@ -0,0 +1,28 @@
1
+ name: Auto-close duplicate issues
2
+ description: Auto-closes issues that are duplicates of existing issues
3
+ on:
4
+ schedule:
5
+ - cron: "0 9 * * *" # Run daily at 9 AM UTC
6
+ workflow_dispatch:
7
+
8
+ jobs:
9
+ auto-close-duplicates:
10
+ runs-on: ubuntu-latest
11
+ timeout-minutes: 10
12
+ permissions:
13
+ contents: read
14
+ issues: write
15
+
16
+ steps:
17
+ - name: Checkout repository
18
+ uses: actions/checkout@v5
19
+
20
+ - name: Install uv
21
+ uses: astral-sh/setup-uv@v6
22
+
23
+ - name: Auto-close duplicate issues
24
+ run: uv run scripts/auto_close_duplicates.py
25
+ env:
26
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
27
+ GITHUB_REPOSITORY_OWNER: ${{ github.repository_owner }}
28
+ GITHUB_REPOSITORY_NAME: ${{ github.event.repository.name }}
@@ -0,0 +1,80 @@
1
+ name: Marvin Issue Dedupe
2
+ description: Automatically dedupe GitHub issues using Marvin
3
+ on:
4
+ issues:
5
+ types: [opened]
6
+ workflow_dispatch:
7
+ inputs:
8
+ issue_number:
9
+ description: "Issue number to process for duplicate detection"
10
+ required: true
11
+ type: string
12
+
13
+ jobs:
14
+ marvin-dedupe-issues:
15
+ runs-on: ubuntu-latest
16
+ timeout-minutes: 10
17
+ permissions:
18
+ contents: read
19
+ issues: write
20
+
21
+ steps:
22
+ - name: Checkout repository
23
+ uses: actions/checkout@v5
24
+
25
+ - name: Generate Marvin App token
26
+ id: marvin-token
27
+ uses: actions/create-github-app-token@v2
28
+ with:
29
+ app-id: ${{ secrets.MARVIN_APP_ID }}
30
+ private-key: ${{ secrets.MARVIN_APP_PRIVATE_KEY }}
31
+
32
+ - name: Create dedupe prompt
33
+ run: |
34
+ mkdir -p /tmp/claude-prompts
35
+ cat > /tmp/claude-prompts/dedupe-prompt.txt << 'EOF'
36
+ Find up to 3 likely duplicate issues for GitHub issue ${{ github.repository }}/issues/${{ github.event.issue.number || inputs.issue_number }}.
37
+
38
+ Follow these steps precisely:
39
+
40
+ 1. Use the Task tool to check if the GitHub issue (a) is closed, (b) does not need to be deduped (eg. because it is broad product feedback without a specific solution, or positive feedback), or (c) already has a duplicates comment that you made earlier. If so, do not proceed.
41
+
42
+ 2. Use the Task tool to view the GitHub issue, and ask the agent to return a summary of the issue
43
+
44
+ 3. Then, launch 3 parallel agents using the Task tool to search GitHub for duplicates of this issue, using diverse keywords and search approaches, using the summary from step 2
45
+
46
+ 4. Next, feed the results from steps 2 and 3 into another agent using the Task tool, so that it can filter out false positives that are likely not actually duplicates of the original issue. If there are no duplicates remaining, do not proceed.
47
+
48
+ 5. Finally, comment back on the issue with a list of up to three duplicate issues (or zero, if there are no likely duplicates). If there are no duplicates, DO NOT COMMENT. Just exit.
49
+
50
+ Notes for your agents:
51
+ - Use `gh` to interact with GitHub, rather than web fetch
52
+ - Do not use other tools, beyond `gh` and Task (eg. don't use other MCP servers, file edit, etc.)
53
+ - Make a todo list first
54
+
55
+ For your comment, follow this format precisely (example with 3 suspected duplicates):
56
+
57
+ ---
58
+ Found 3 possible duplicate issues:
59
+
60
+ 1. #123: Issue title here
61
+ 2. #456: Another issue title
62
+ 3. #789: Third issue title
63
+
64
+ This issue will be automatically closed as a duplicate in 3 days.
65
+
66
+ - If your issue is a duplicate, please close it and 👍 the existing issue instead
67
+ - To prevent auto-closure, add a comment or 👎 this comment
68
+
69
+ ---
70
+ EOF
71
+
72
+ - name: Run Marvin dedupe command
73
+ uses: anthropics/claude-code-base-action@beta
74
+ with:
75
+ model: claude-3-5-haiku-latest
76
+ prompt_file: /tmp/claude-prompts/dedupe-prompt.txt
77
+ allowed_tools: "Bash(gh issue view:*),Bash(gh search:*),Bash(gh issue list:*),Bash(gh api:*),Bash(gh issue comment:*),Task"
78
+ anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY_FOR_CI }}
79
+ claude_env: |
80
+ GH_TOKEN: ${{ steps.marvin-token.outputs.token }}
@@ -0,0 +1,157 @@
1
+ name: Marvin Label Triage
2
+ description: Automatically triage GitHub issues and PRs using Marvin
3
+ on:
4
+ issues:
5
+ types: [opened]
6
+ pull_request_target:
7
+ types: [opened]
8
+ workflow_dispatch:
9
+ inputs:
10
+ issue_number:
11
+ description: "Issue or PR number to triage"
12
+ required: true
13
+ type: string
14
+
15
+ concurrency:
16
+ group: triage-${{ github.event.issue.number || github.event.pull_request.number || inputs.issue_number }}
17
+ cancel-in-progress: false
18
+
19
+ jobs:
20
+ triage-issue:
21
+ runs-on: ubuntu-latest
22
+ timeout-minutes: 10
23
+ permissions:
24
+ contents: read
25
+ issues: write
26
+ pull-requests: write
27
+
28
+ steps:
29
+ - name: Checkout base repository
30
+ uses: actions/checkout@v5
31
+ with:
32
+ repository: ${{ github.repository }}
33
+ ref: ${{ github.event.repository.default_branch }}
34
+
35
+ - name: Generate Marvin App token
36
+ id: marvin-token
37
+ uses: actions/create-github-app-token@v2
38
+ with:
39
+ app-id: ${{ secrets.MARVIN_APP_ID }}
40
+ private-key: ${{ secrets.MARVIN_APP_PRIVATE_KEY }}
41
+
42
+ - name: Create triage prompt
43
+ run: |
44
+ mkdir -p /tmp/claude-prompts
45
+ cat > /tmp/claude-prompts/triage-prompt.txt << 'EOF'
46
+ You're an issue triage assistant for FastMCP, a Python framework for building Model Context Protocol servers and clients. Your task is to analyze issues/PRs and apply appropriate labels.
47
+
48
+ IMPORTANT: Your ONLY action should be to apply labels using mcp__github__update_issue. DO NOT post any comments.
49
+
50
+ Issue/PR Information:
51
+ - REPO: ${{ github.repository }}
52
+ - NUMBER: ${{ github.event.issue.number || github.event.pull_request.number || inputs.issue_number }}
53
+ - TYPE: ${{ github.event.issue && 'issue' || (github.event.pull_request && 'pull_request') || 'unknown' }}
54
+
55
+ TRIAGE PROCESS:
56
+
57
+ 1. Get available labels:
58
+ Run: `gh label list`
59
+
60
+ 2. Retrieve issue/PR details using GitHub tools:
61
+ - mcp__github__get_issue: Get the issue/PR details
62
+ - mcp__github__get_issue_comments: Read any discussion
63
+ - If the issue/PR mentions other issues (e.g., "fixes #123", "related to #456"), use mcp__github__get_issue to read those linked issues for additional context
64
+
65
+ 3. Analyze and apply labels based on these guidelines:
66
+
67
+ CORE CATEGORIES (apply EXACTLY ONE - these are mutually exclusive):
68
+ - bug: Reports of broken functionality OR PRs that fix bugs
69
+ - enhancement: New functions/endpoints, improvements to existing features, internal tooling, workflow improvements, minor new capabilities
70
+ - feature: ONLY for major headline functionality worthy of a blog post announcement (2-4 per release, never for issues)
71
+ - documentation: Primary change is to user-facing docs, examples, or guides
72
+
73
+ SPECIAL DOCUMENTATION RULES:
74
+ - DO NOT apply "documentation" label if PR only updates auto-generated SDK docs (docs/python-sdk/**)
75
+ - DO apply "documentation" label for significant user-facing documentation changes (guides, examples, API docs)
76
+ - Auto-generated docs updates should get appropriate category label (enhancement, bug, etc.) based on the underlying code changes
77
+
78
+ FEATURE vs ENHANCEMENT guidance:
79
+ - feature: Major systems like new auth systems, MCP composition, proxying MCP servers, major CLI commands that transform workflows
80
+ - enhancement: New functions/endpoints, internal workflows, CI improvements, developer tooling, refactoring, utilities, typical new CLI commands
81
+ - If unsure between feature/enhancement, choose enhancement
82
+
83
+ Note: If a PR fixes a bug, label it "bug" not "enhancement"
84
+
85
+ SPECIAL CATEGORY (can be combined with above):
86
+ - breaking change: Changes that break backward compatibility (in addition to core category)
87
+
88
+ PRIORITY (apply if clearly evident):
89
+ - high-priority: Critical bugs affecting many users, security issues, or blocking core functionality
90
+ - low-priority: Edge cases, nice-to-have improvements, or cosmetic issues
91
+ - Default to no priority label if unclear
92
+
93
+ STATUS (apply if applicable):
94
+ - needs more info: Issue lacks reproduction steps, error messages, or clear description
95
+ - good first issue: ONLY if it's clearly scoped, has obvious solution, and touches limited files
96
+ - invalid: Spam, completely off-topic, or nonsensical (often LLM-generated)
97
+
98
+ AREA LABELS (apply ONLY when thematically central to the issue):
99
+ - cli: Issues primarily about FastMCP CLI commands (run, dev, install)
100
+ - client: Issues primarily about the Client SDK or client-side functionality
101
+ - server: Issues primarily about FastMCP server implementation
102
+ - auth: Authentication is the main concern (Bearer, JWT, OAuth, WorkOS)
103
+ - openapi: OpenAPI integration/parsing is the primary topic
104
+ - http: HTTP transport or networking is the main issue
105
+ - contrib: Specifically about community contributions in src/contrib/
106
+ - tests: Issues primarily about testing infrastructure, CI/CD workflows, or test coverage
107
+
108
+ IMPORTANT LABELING RULES:
109
+ - Be selective - only apply labels that are clearly relevant
110
+ - Don't apply area labels just because a file in that area is mentioned
111
+ - The issue must be PRIMARILY about that area to get the label
112
+ - When in doubt, don't apply the label
113
+ - Apply 2-5 labels total typically (category + maybe priority + maybe 1-2 areas)
114
+
115
+ META LABELS (rarely needed for issues):
116
+ - dependencies: Only for dependabot PRs or issues specifically about package updates
117
+ - DON'T MERGE: Only if PR author explicitly states it's not ready
118
+
119
+ 4. Apply selected labels:
120
+ Use mcp__github__update_issue to apply your selected labels
121
+ DO NOT post any comments
122
+ EOF
123
+
124
+ - name: Setup GitHub MCP Server
125
+ run: |
126
+ mkdir -p /tmp/mcp-config
127
+ cat > /tmp/mcp-config/mcp-servers.json << 'EOF'
128
+ {
129
+ "mcpServers": {
130
+ "github": {
131
+ "command": "docker",
132
+ "args": [
133
+ "run",
134
+ "-i",
135
+ "--rm",
136
+ "-e",
137
+ "GITHUB_PERSONAL_ACCESS_TOKEN",
138
+ "ghcr.io/github/github-mcp-server:sha-7aced2b"
139
+ ],
140
+ "env": {
141
+ "GITHUB_PERSONAL_ACCESS_TOKEN": "${{ steps.marvin-token.outputs.token }}"
142
+ }
143
+ }
144
+ }
145
+ }
146
+ EOF
147
+
148
+ - name: Run Marvin for Issue Triage
149
+ uses: anthropics/claude-code-base-action@beta
150
+ with:
151
+ prompt_file: /tmp/claude-prompts/triage-prompt.txt
152
+ allowed_tools: "Bash(gh label list),mcp__github__get_issue,mcp__github__get_issue_comments,mcp__github__update_issue,mcp__github__get_pull_request_files"
153
+ timeout_minutes: "5"
154
+ anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY_FOR_CI }}
155
+ mcp_config: /tmp/mcp-config/mcp-servers.json
156
+ claude_env: |
157
+ GH_TOKEN: ${{ steps.marvin-token.outputs.token }}
@@ -4,6 +4,7 @@ on:
4
4
  issue_comment: { types: [created] }
5
5
  pull_request_review_comment: { types: [created] }
6
6
  pull_request_review: { types: [submitted] }
7
+ pull_request: { types: [opened, edited] }
7
8
  issues: { types: [opened, edited, assigned, labeled] }
8
9
  discussion: { types: [created, edited, labeled] }
9
10
  discussion_comment: { types: [created] }
@@ -22,6 +23,7 @@ jobs:
22
23
  (github.event_name == 'issue_comment' && contains(github.event.comment.body, '/marvin')) ||
23
24
  (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '/marvin')) ||
24
25
  (github.event_name == 'pull_request_review' && contains(github.event.review.body, '/marvin')) ||
26
+ (github.event_name == 'pull_request' && contains(github.event.pull_request.body, '/marvin')) ||
25
27
  (github.event_name == 'issues' && contains(github.event.issue.body, '/marvin')) ||
26
28
  (github.event_name == 'discussion' && contains(github.event.discussion.body, '/marvin')) ||
27
29
  (github.event_name == 'discussion_comment' && contains(github.event.comment.body, '/marvin')) ||
@@ -29,17 +31,34 @@ jobs:
29
31
  (github.event_name == 'issues' && github.event.action == 'labeled' && github.event.label.name == 'marvin')
30
32
  runs-on: ubuntu-latest
31
33
  steps:
32
- - uses: actions/checkout@v4
34
+ - uses: actions/checkout@v5
35
+
36
+ # Install UV package manager
37
+ - name: Install UV
38
+ uses: astral-sh/setup-uv@v6
39
+ with:
40
+ enable-cache: true
41
+ cache-dependency-glob: "uv.lock"
42
+
43
+ # Install project dependencies
44
+ - name: Install dependencies
45
+ run: uv sync --python 3.12
46
+
47
+ # Install pre-commit hooks automatically
48
+ - name: Install pre-commit hooks
49
+ run: |
50
+ uv run pre-commit install
51
+ echo "✅ Pre-commit hooks installed"
33
52
 
34
53
  - name: Generate Marvin App token
35
54
  id: marvin-token
36
- uses: actions/create-github-app-token@v1
55
+ uses: actions/create-github-app-token@v2
37
56
  with:
38
57
  app-id: ${{ secrets.MARVIN_APP_ID }}
39
58
  private-key: ${{ secrets.MARVIN_APP_PRIVATE_KEY }}
40
59
 
41
60
  # Marvin Assistant
42
- - name: Marvin
61
+ - name: Run Marvin
43
62
  uses: anthropics/claude-code-action@beta
44
63
  with:
45
64
  github_token: ${{ steps.marvin-token.outputs.token }}
@@ -47,6 +66,6 @@ jobs:
47
66
  mode: tag
48
67
  trigger_phrase: "/marvin"
49
68
  allowed_bots: "*"
50
- allowed_tools: "mcp__github__add_issue_comment,mcp__github__create_issue,mcp__github__get_issue,mcp__github__list_issues,mcp__github__search_issues,mcp__github__update_issue,mcp__github__update_issue_comment,mcp__github__create_pull_request,mcp__github__get_pull_request,mcp__github__get_pull_request_comments,mcp__github__get_pull_request_files,mcp__github__get_pull_request_reviews,mcp__github__get_pull_request_status,mcp__github__list_pull_requests,mcp__github__update_pull_request,mcp__github__update_pull_request_branch,mcp__github__update_pull_request_comment,mcp__github__merge_pull_request"
69
+ allowed_tools: "WebSearch,WebFetch,Bash(uv:*),Bash(pre-commit:*),Bash(pytest:*),Bash(ruff:*),Bash(ty:*),Bash(git:*),Bash(gh:*),mcp__github__add_issue_comment,mcp__github__create_issue,mcp__github__get_issue,mcp__github__list_issues,mcp__github__search_issues,mcp__github__update_issue,mcp__github__update_issue_comment,mcp__github__create_pull_request,mcp__github__get_pull_request,mcp__github__get_pull_request_comments,mcp__github__get_pull_request_files,mcp__github__get_pull_request_reviews,mcp__github__get_pull_request_status,mcp__github__list_pull_requests,mcp__github__update_pull_request,mcp__github__update_pull_request_branch,mcp__github__update_pull_request_comment,mcp__github__merge_pull_request"
51
70
  additional_permissions: |
52
71
  actions: read
@@ -12,7 +12,7 @@ jobs:
12
12
  id-token: write # For PyPI's trusted publishing
13
13
  steps:
14
14
  - name: Checkout
15
- uses: actions/checkout@v4
15
+ uses: actions/checkout@v5
16
16
  with:
17
17
  fetch-depth: 0
18
18
 
@@ -30,20 +30,16 @@ jobs:
30
30
  runs-on: ubuntu-latest
31
31
 
32
32
  steps:
33
- - uses: actions/checkout@v4
33
+ - uses: actions/checkout@v5
34
34
  - name: Install uv
35
35
  uses: astral-sh/setup-uv@v6
36
36
  with:
37
37
  enable-cache: true
38
38
  cache-dependency-glob: "uv.lock"
39
- - name: Set up Python
40
- uses: actions/setup-python@v5
41
- with:
42
- python-version: "3.12"
39
+
43
40
  - name: Install dependencies
44
- run: uv sync --dev
45
- - name: Install just
46
- uses: extractions/setup-just@v3
41
+ run: uv sync
42
+
47
43
  - name: Check lockfile is up to date
48
44
  run: |
49
45
  if ! uv lock --check; then
@@ -53,18 +49,6 @@ jobs:
53
49
  fi
54
50
  echo "✅ Lockfile is up to date"
55
51
  - name: Run pre-commit
56
- uses: pre-commit/action@v3.0.1
52
+ run: uv run pre-commit run --all-files
57
53
  env:
58
54
  SKIP: no-commit-to-branch
59
- - name: Check SDK documentation is up to date
60
- run: |
61
- just api-ref-all > /dev/null 2>&1
62
- if ! git diff --quiet docs/python-sdk/ docs/docs.json; then
63
- echo "❌ SDK documentation is out of date!"
64
- echo "Files that were updated:"
65
- git diff --name-only docs/python-sdk/ docs/docs.json
66
- echo ""
67
- echo "Run 'just api-ref-all' and commit the changes."
68
- exit 1
69
- fi
70
- echo "✅ SDK documentation is up to date"
@@ -34,7 +34,7 @@ jobs:
34
34
  timeout-minutes: 5
35
35
 
36
36
  steps:
37
- - uses: actions/checkout@v4
37
+ - uses: actions/checkout@v5
38
38
 
39
39
  - name: Install uv
40
40
  uses: astral-sh/setup-uv@v6
@@ -48,10 +48,10 @@ jobs:
48
48
  run: uv sync --frozen
49
49
 
50
50
  - name: Run tests (excluding integration and client_process)
51
- run: uv run pytest tests -m "not integration and not client_process"
51
+ run: uv run pytest -v tests -m "not integration and not client_process"
52
52
 
53
53
  - name: Run client process tests separately
54
- run: uv run pytest tests -m "client_process" -x
54
+ run: uv run pytest -v tests -m "client_process" -x
55
55
 
56
56
  run_integration_tests:
57
57
  name: "Run integration tests"
@@ -59,7 +59,7 @@ jobs:
59
59
  timeout-minutes: 10
60
60
 
61
61
  steps:
62
- - uses: actions/checkout@v4
62
+ - uses: actions/checkout@v5
63
63
 
64
64
  - name: Install uv
65
65
  uses: astral-sh/setup-uv@v6
@@ -73,6 +73,8 @@ jobs:
73
73
  run: uv sync --frozen
74
74
 
75
75
  - name: Run integration tests
76
- run: uv run pytest tests -m "integration"
76
+ run: uv run pytest -v tests -m "integration"
77
77
  env:
78
78
  FASTMCP_GITHUB_TOKEN: ${{ secrets.FASTMCP_GITHUB_TOKEN }}
79
+ FASTMCP_TEST_AUTH_GITHUB_CLIENT_ID: ${{ secrets.FASTMCP_TEST_AUTH_GITHUB_CLIENT_ID }}
80
+ FASTMCP_TEST_AUTH_GITHUB_CLIENT_SECRET: ${{ secrets.FASTMCP_TEST_AUTH_GITHUB_CLIENT_SECRET }}
@@ -0,0 +1,91 @@
1
+ name: Update MCPServerConfig Schema
2
+
3
+ # This workflow runs on merges to main to automatically update the config schema
4
+ # by creating a PR when changes are needed.
5
+
6
+ on:
7
+ push:
8
+ branches: ["main"]
9
+ paths:
10
+ - "src/fastmcp/utilities/mcp_server_config/**"
11
+ - "!src/fastmcp/utilities/mcp_server_config/v1/schema.json" # Exclude the local schema file
12
+ workflow_dispatch:
13
+
14
+ permissions:
15
+ contents: write
16
+ pull-requests: write
17
+
18
+ jobs:
19
+ update-config-schema:
20
+ timeout-minutes: 5
21
+ runs-on: ubuntu-latest
22
+
23
+ steps:
24
+ - uses: actions/checkout@v5
25
+
26
+ - name: Generate Marvin App token
27
+ id: marvin-token
28
+ uses: actions/create-github-app-token@v2
29
+ with:
30
+ app-id: ${{ secrets.MARVIN_APP_ID }}
31
+ private-key: ${{ secrets.MARVIN_APP_PRIVATE_KEY }}
32
+
33
+ - name: Install uv
34
+ uses: astral-sh/setup-uv@v6
35
+ with:
36
+ enable-cache: true
37
+ cache-dependency-glob: "uv.lock"
38
+
39
+ - name: Install dependencies
40
+ run: uv sync --python 3.12
41
+
42
+ - name: Generate config schema
43
+ run: |
44
+ echo "🔄 Generating fastmcp.json schema..."
45
+
46
+ # Generate schema in docs/public for web access
47
+ uv run python -c "
48
+ from fastmcp.utilities.mcp_server_config import generate_schema
49
+ generate_schema('docs/public/schemas/fastmcp.json/latest.json')
50
+ print('✅ Latest schema generated in docs/public')
51
+ "
52
+
53
+ # Also update the v1 schema in docs/public
54
+ uv run python -c "
55
+ from fastmcp.utilities.mcp_server_config import generate_schema
56
+ generate_schema('docs/public/schemas/fastmcp.json/v1.json')
57
+ print('✅ v1 schema generated in docs/public')
58
+ "
59
+
60
+ # Generate schema in the source directory for local development
61
+ uv run python -c "
62
+ from fastmcp.utilities.mcp_server_config import generate_schema
63
+ generate_schema('src/fastmcp/utilities/mcp_server_config/v1/schema.json')
64
+ print('✅ Schema generated in utilities/mcp_server_config/v1/')
65
+ "
66
+
67
+ - name: Create Pull Request
68
+ uses: peter-evans/create-pull-request@v7
69
+ with:
70
+ token: ${{ steps.marvin-token.outputs.token }}
71
+ commit-message: "chore: Update fastmcp.json schema"
72
+ title: "chore: Update fastmcp.json schema"
73
+ body: |
74
+ This PR updates the fastmcp.json schema files to match the current source code.
75
+
76
+ The schema is automatically generated from `src/fastmcp/utilities/mcp_server_config/` to ensure consistency.
77
+
78
+ **Note:** This PR is fully automated and will update itself with any subsequent changes to the schema, or close automatically if the schema becomes up-to-date through other means. Feel free to leave it open until you're ready to merge.
79
+
80
+ 🤖 Generated by Marvin
81
+ branch: marvin/update-config-schema
82
+ labels: |
83
+ ignore in release notes
84
+ delete-branch: true
85
+ author: "marvin-context-protocol[bot] <225465937+marvin-context-protocol[bot]@users.noreply.github.com>"
86
+ committer: "marvin-context-protocol[bot] <225465937+marvin-context-protocol[bot]@users.noreply.github.com>"
87
+
88
+ - name: Summary
89
+ run: |
90
+ echo "✅ Config schema generation workflow completed"
91
+ echo "PR will be created if there are changes, or closed if schema is already up to date"
@@ -0,0 +1,74 @@
1
+ name: Update SDK Documentation
2
+
3
+ # This workflow runs on merges to main to automatically update SDK docs
4
+ # by creating a PR when changes are needed.
5
+
6
+ on:
7
+ push:
8
+ branches: ["main"]
9
+ paths:
10
+ - "src/**"
11
+ - "pyproject.toml"
12
+ workflow_dispatch:
13
+
14
+ permissions:
15
+ contents: write
16
+ pull-requests: write
17
+
18
+ jobs:
19
+ update-sdk-docs:
20
+ timeout-minutes: 5
21
+ runs-on: ubuntu-latest
22
+
23
+ steps:
24
+ - uses: actions/checkout@v5
25
+
26
+ - name: Generate Marvin App token
27
+ id: marvin-token
28
+ uses: actions/create-github-app-token@v2
29
+ with:
30
+ app-id: ${{ secrets.MARVIN_APP_ID }}
31
+ private-key: ${{ secrets.MARVIN_APP_PRIVATE_KEY }}
32
+
33
+ - name: Install uv
34
+ uses: astral-sh/setup-uv@v6
35
+ with:
36
+ enable-cache: true
37
+ cache-dependency-glob: "uv.lock"
38
+
39
+ - name: Install dependencies
40
+ run: uv sync --python 3.12
41
+
42
+ - name: Install just
43
+ uses: extractions/setup-just@v3
44
+
45
+ - name: Generate SDK documentation
46
+ run: |
47
+ echo "🔄 Generating SDK documentation..."
48
+ just api-ref-all
49
+
50
+ - name: Create Pull Request
51
+ uses: peter-evans/create-pull-request@v7
52
+ with:
53
+ token: ${{ steps.marvin-token.outputs.token }}
54
+ commit-message: "chore: Update SDK documentation"
55
+ title: "chore: Update SDK documentation"
56
+ body: |
57
+ This PR updates the auto-generated SDK documentation to reflect the latest source code changes.
58
+
59
+ 📚 Documentation is automatically generated from the source code docstrings and type annotations.
60
+
61
+ **Note:** This PR is fully automated and will update itself with any subsequent changes to the SDK, or close automatically if the documentation becomes up-to-date through other means. Feel free to leave it open until you're ready to merge.
62
+
63
+ 🤖 Generated by Marvin
64
+ branch: marvin/update-sdk-docs
65
+ labels: |
66
+ ignore in release notes
67
+ delete-branch: true
68
+ author: "marvin-context-protocol[bot] <225465937+marvin-context-protocol[bot]@users.noreply.github.com>"
69
+ committer: "marvin-context-protocol[bot] <225465937+marvin-context-protocol[bot]@users.noreply.github.com>"
70
+
71
+ - name: Summary
72
+ run: |
73
+ echo "✅ SDK documentation generation workflow completed"
74
+ echo "PR will be created if there are changes, or closed if documentation is already up to date"
@@ -64,7 +64,13 @@ dmypy.json
64
64
  # Claude worktree management
65
65
  .claude-wt/worktrees
66
66
 
67
+ # Agents
68
+ /PLAN.md
69
+ /TODO.md
70
+ /STATUS.md
71
+
67
72
  # Common FastMCP test files
68
73
  /test.py
69
74
  /server.py
70
75
  /client.py
76
+ /test.json
@@ -22,14 +22,20 @@ repos:
22
22
  # Run the formatter.
23
23
  - id: ruff-format
24
24
 
25
- - repo: https://github.com/northisup/pyright-pretty
26
- rev: v0.1.0
25
+ - repo: local
27
26
  hooks:
28
- - id: pyright-pretty
27
+ - id: ty
28
+ name: ty check
29
+ entry: uv run ty check
30
+ language: system
31
+ types: [python]
29
32
  files: ^src/|^tests/
33
+ pass_filenames: false
34
+ require_serial: true
30
35
 
31
36
  - repo: https://github.com/pre-commit/pre-commit-hooks
32
- rev: v4.3.0
37
+ rev: v6.0.0
33
38
  hooks:
34
39
  - id: no-commit-to-branch
40
+ name: prevent commits to main
35
41
  args: [--branch, main]