fastmcp 2.11.2__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 (611) hide show
  1. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/.github/ISSUE_TEMPLATE/bug.yml +13 -25
  2. fastmcp-2.12.0rc1/.github/ISSUE_TEMPLATE/enhancement.yml +34 -0
  3. fastmcp-2.12.0rc1/.github/copilot-instructions.md +1 -0
  4. fastmcp-2.12.0rc1/.github/pull_request_template.md +28 -0
  5. fastmcp-2.12.0rc1/.github/workflows/auto-close-duplicates.yml +28 -0
  6. fastmcp-2.12.0rc1/.github/workflows/marvin-dedupe-issues.yml +80 -0
  7. fastmcp-2.12.0rc1/.github/workflows/marvin-label-triage.yml +157 -0
  8. fastmcp-2.12.0rc1/.github/workflows/marvin.yml +71 -0
  9. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/.github/workflows/publish.yml +1 -1
  10. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/.github/workflows/run-static.yml +13 -7
  11. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/.github/workflows/run-tests.yml +11 -7
  12. fastmcp-2.12.0rc1/.github/workflows/update-config-schema.yml +91 -0
  13. fastmcp-2.12.0rc1/.github/workflows/update-sdk-docs.yml +74 -0
  14. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/.gitignore +11 -0
  15. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/.pre-commit-config.yaml +10 -4
  16. fastmcp-2.12.0rc1/AGENTS.md +251 -0
  17. fastmcp-2.12.0rc1/CLAUDE.md +1 -0
  18. fastmcp-2.12.0rc1/CODE_OF_CONDUCT.md +128 -0
  19. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/PKG-INFO +3 -2
  20. fastmcp-2.12.0rc1/docs/assets/brand/blue-logo.png +0 -0
  21. fastmcp-2.12.0rc1/docs/assets/brand/card-background.png +0 -0
  22. fastmcp-2.12.0rc1/docs/assets/brand/logo-wordmark-dark.svg +4 -0
  23. fastmcp-2.12.0rc1/docs/assets/brand/logo-wordmark.svg +4 -0
  24. fastmcp-2.12.0rc1/docs/assets/images/fastmcp_cloud/connect.png +0 -0
  25. fastmcp-2.12.0rc1/docs/assets/images/fastmcp_cloud/create_project.png +0 -0
  26. fastmcp-2.12.0rc1/docs/assets/images/fastmcp_cloud/deployment.png +0 -0
  27. fastmcp-2.12.0rc1/docs/assets/images/fastmcp_cloud/quickstart.png +0 -0
  28. fastmcp-2.12.0rc1/docs/assets/schemas/mcp_server_config/latest.json +348 -0
  29. fastmcp-2.12.0rc1/docs/assets/schemas/mcp_server_config/v1.json +348 -0
  30. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/changelog.mdx +95 -0
  31. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/clients/logging.mdx +2 -2
  32. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/clients/sampling.mdx +49 -0
  33. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/clients/tools.mdx +6 -6
  34. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/css/style.css +6 -0
  35. fastmcp-2.12.0rc1/docs/deployment/fastmcp-cloud.mdx +89 -0
  36. fastmcp-2.12.0rc1/docs/deployment/running-server.mdx +258 -0
  37. fastmcp-2.12.0rc1/docs/deployment/self-hosted.mdx +209 -0
  38. fastmcp-2.12.0rc1/docs/deployment/server-configuration.mdx +640 -0
  39. fastmcp-2.12.0rc1/docs/deployment/testing.mdx +159 -0
  40. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/docs.json +128 -34
  41. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/getting-started/installation.mdx +2 -2
  42. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/integrations/anthropic.mdx +1 -1
  43. fastmcp-2.11.2/docs/integrations/starlette.mdx → fastmcp-2.12.0rc1/docs/integrations/asgi.mdx +2 -2
  44. fastmcp-2.12.0rc1/docs/integrations/azure.mdx +250 -0
  45. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/integrations/claude-code.mdx +14 -9
  46. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/integrations/claude-desktop.mdx +14 -9
  47. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/integrations/cursor.mdx +28 -8
  48. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/integrations/gemini.mdx +1 -1
  49. fastmcp-2.12.0rc1/docs/integrations/github.mdx +205 -0
  50. fastmcp-2.12.0rc1/docs/integrations/google.mdx +215 -0
  51. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/integrations/mcp-json-configuration.mdx +17 -7
  52. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/integrations/openai.mdx +1 -1
  53. fastmcp-2.12.0rc1/docs/integrations/workos-oauth.mdx +240 -0
  54. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/patterns/cli.mdx +179 -35
  55. fastmcp-2.12.0rc1/docs/public/schemas/fastmcp.json/latest.json +361 -0
  56. fastmcp-2.12.0rc1/docs/public/schemas/fastmcp.json/v1.json +361 -0
  57. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-cli-claude.mdx +3 -3
  58. fastmcp-2.12.0rc1/docs/python-sdk/fastmcp-cli-cli.mdx +129 -0
  59. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-cli-install-claude_code.mdx +5 -5
  60. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-cli-install-claude_desktop.mdx +4 -4
  61. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-cli-install-cursor.mdx +31 -5
  62. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-cli-install-mcp_json.mdx +3 -3
  63. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-cli-install-shared.mdx +5 -3
  64. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-cli-run.mdx +21 -50
  65. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-client-auth-oauth.mdx +20 -14
  66. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-client-client.mdx +39 -33
  67. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-client-logging.mdx +5 -1
  68. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-client-sampling.mdx +2 -2
  69. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-client-transports.mdx +31 -25
  70. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-mcp_config.mdx +19 -19
  71. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-prompts-prompt_manager.mdx +7 -7
  72. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-resources-resource_manager.mdx +12 -12
  73. fastmcp-2.12.0rc1/docs/python-sdk/fastmcp-server-auth-auth.mdx +175 -0
  74. fastmcp-2.12.0rc1/docs/python-sdk/fastmcp-server-auth-oauth_proxy.mdx +319 -0
  75. fastmcp-2.12.0rc1/docs/python-sdk/fastmcp-server-auth-providers-azure.mdx +63 -0
  76. fastmcp-2.12.0rc1/docs/python-sdk/fastmcp-server-auth-providers-github.mdx +72 -0
  77. fastmcp-2.12.0rc1/docs/python-sdk/fastmcp-server-auth-providers-google.mdx +72 -0
  78. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-server-auth-providers-jwt.mdx +17 -14
  79. fastmcp-2.12.0rc1/docs/python-sdk/fastmcp-server-auth-providers-workos.mdx +106 -0
  80. fastmcp-2.12.0rc1/docs/python-sdk/fastmcp-server-auth-redirect_validation.mdx +53 -0
  81. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-server-context.mdx +36 -27
  82. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-server-dependencies.mdx +16 -3
  83. fastmcp-2.12.0rc1/docs/python-sdk/fastmcp-server-elicitation.mdx +87 -0
  84. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-server-http.mdx +14 -24
  85. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-server-middleware-logging.mdx +18 -6
  86. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-server-proxy.mdx +42 -36
  87. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-server-server.mdx +62 -50
  88. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-settings.mdx +1 -1
  89. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-tools-tool.mdx +16 -16
  90. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-tools-tool_manager.mdx +11 -11
  91. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-tools-tool_transform.mdx +13 -13
  92. fastmcp-2.12.0rc1/docs/python-sdk/fastmcp-utilities-auth.mdx +25 -0
  93. fastmcp-2.12.0rc1/docs/python-sdk/fastmcp-utilities-cli.mdx +55 -0
  94. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-utilities-components.mdx +17 -9
  95. fastmcp-2.12.0rc1/docs/python-sdk/fastmcp-utilities-inspect.mdx +143 -0
  96. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-utilities-logging.mdx +2 -1
  97. fastmcp-2.12.0rc1/docs/python-sdk/fastmcp-utilities-mcp_config.mdx +28 -0
  98. fastmcp-2.12.0rc1/docs/python-sdk/fastmcp-utilities-mcp_server_config-__init__.mdx +13 -0
  99. fastmcp-2.12.0rc1/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-__init__.mdx +8 -0
  100. fastmcp-2.12.0rc1/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-environments-__init__.mdx +9 -0
  101. fastmcp-2.12.0rc1/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-environments-base.mdx +43 -0
  102. fastmcp-2.12.0rc1/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-environments-uv.mdx +75 -0
  103. fastmcp-2.12.0rc1/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-mcp_server_config.mdx +235 -0
  104. fastmcp-2.12.0rc1/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-sources-__init__.mdx +8 -0
  105. fastmcp-2.12.0rc1/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-sources-base.mdx +42 -0
  106. fastmcp-2.12.0rc1/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-sources-filesystem.mdx +37 -0
  107. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-utilities-openapi.mdx +13 -13
  108. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-utilities-tests.mdx +6 -4
  109. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-utilities-types.mdx +15 -13
  110. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/servers/auth/authentication.mdx +74 -8
  111. fastmcp-2.12.0rc1/docs/servers/auth/oauth-proxy.mdx +381 -0
  112. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/servers/auth/remote-oauth.mdx +37 -5
  113. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/servers/auth/token-verification.mdx +48 -3
  114. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/servers/composition.mdx +11 -5
  115. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/servers/context.mdx +142 -2
  116. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/servers/prompts.mdx +2 -2
  117. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/servers/server.mdx +27 -6
  118. fastmcp-2.12.0rc1/examples/atproto_mcp/fastmcp.json +11 -0
  119. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/examples/atproto_mcp/src/atproto_mcp/_atproto/_posts.py +42 -7
  120. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/examples/atproto_mcp/src/atproto_mcp/server.py +1 -6
  121. fastmcp-2.12.0rc1/examples/auth/azure_oauth/README.md +51 -0
  122. fastmcp-2.12.0rc1/examples/auth/azure_oauth/client.py +32 -0
  123. fastmcp-2.12.0rc1/examples/auth/azure_oauth/server.py +40 -0
  124. fastmcp-2.12.0rc1/examples/auth/github_oauth/README.md +31 -0
  125. fastmcp-2.12.0rc1/examples/auth/github_oauth/client.py +32 -0
  126. fastmcp-2.12.0rc1/examples/auth/github_oauth/server.py +36 -0
  127. fastmcp-2.12.0rc1/examples/auth/google_oauth/README.md +34 -0
  128. fastmcp-2.12.0rc1/examples/auth/google_oauth/client.py +32 -0
  129. fastmcp-2.12.0rc1/examples/auth/google_oauth/server.py +38 -0
  130. fastmcp-2.12.0rc1/examples/auth/workos_oauth/README.md +159 -0
  131. fastmcp-2.12.0rc1/examples/auth/workos_oauth/client.py +32 -0
  132. fastmcp-2.12.0rc1/examples/auth/workos_oauth/server.py +38 -0
  133. fastmcp-2.12.0rc1/examples/fastmcp_config/env_interpolation_example.json +20 -0
  134. fastmcp-2.12.0rc1/examples/fastmcp_config/fastmcp.json +13 -0
  135. fastmcp-2.12.0rc1/examples/fastmcp_config/full_example.fastmcp.json +27 -0
  136. fastmcp-2.12.0rc1/examples/fastmcp_config/server.py +39 -0
  137. fastmcp-2.12.0rc1/examples/fastmcp_config/simple.fastmcp.json +7 -0
  138. fastmcp-2.12.0rc1/examples/fastmcp_config_demo/README.md +55 -0
  139. fastmcp-2.12.0rc1/examples/fastmcp_config_demo/fastmcp.json +14 -0
  140. fastmcp-2.12.0rc1/examples/fastmcp_config_demo/server.py +70 -0
  141. fastmcp-2.12.0rc1/examples/memory.fastmcp.json +7 -0
  142. fastmcp-2.12.0rc1/examples/mount_example.fastmcp.json +4 -0
  143. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/examples/mount_example.py +1 -3
  144. fastmcp-2.12.0rc1/examples/sampling_fallback.py +34 -0
  145. fastmcp-2.12.0rc1/examples/screenshot.fastmcp.json +7 -0
  146. fastmcp-2.12.0rc1/examples/smart_home/hub.fastmcp.json +9 -0
  147. fastmcp-2.12.0rc1/examples/smart_home/lights.fastmcp.json +9 -0
  148. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/justfile +2 -3
  149. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/pyproject.toml +19 -12
  150. fastmcp-2.12.0rc1/scripts/auto_close_duplicates.py +331 -0
  151. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/__init__.py +5 -4
  152. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/cli/claude.py +22 -18
  153. fastmcp-2.12.0rc1/src/fastmcp/cli/cli.py +858 -0
  154. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/cli/install/claude_code.py +37 -40
  155. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/cli/install/claude_desktop.py +37 -42
  156. fastmcp-2.12.0rc1/src/fastmcp/cli/install/cursor.py +347 -0
  157. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/cli/install/mcp_json.py +38 -43
  158. fastmcp-2.12.0rc1/src/fastmcp/cli/install/shared.py +142 -0
  159. fastmcp-2.12.0rc1/src/fastmcp/cli/run.py +304 -0
  160. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/client/auth/oauth.py +69 -13
  161. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/client/client.py +46 -9
  162. fastmcp-2.12.0rc1/src/fastmcp/client/logging.py +50 -0
  163. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/client/oauth_callback.py +91 -91
  164. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/client/sampling.py +12 -4
  165. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/client/transports.py +143 -67
  166. fastmcp-2.12.0rc1/src/fastmcp/experimental/sampling/handlers/__init__.py +3 -0
  167. fastmcp-2.12.0rc1/src/fastmcp/experimental/sampling/handlers/base.py +21 -0
  168. fastmcp-2.12.0rc1/src/fastmcp/experimental/sampling/handlers/openai.py +163 -0
  169. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/experimental/server/openapi/routing.py +1 -3
  170. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/experimental/server/openapi/server.py +10 -25
  171. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/experimental/utilities/openapi/__init__.py +2 -2
  172. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/experimental/utilities/openapi/formatters.py +34 -0
  173. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/experimental/utilities/openapi/models.py +5 -2
  174. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/experimental/utilities/openapi/parser.py +252 -70
  175. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/experimental/utilities/openapi/schemas.py +135 -106
  176. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/mcp_config.py +40 -20
  177. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/prompts/prompt_manager.py +4 -2
  178. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/resources/resource_manager.py +16 -6
  179. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/server/auth/__init__.py +11 -1
  180. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/server/auth/auth.py +19 -2
  181. fastmcp-2.12.0rc1/src/fastmcp/server/auth/oauth_proxy.py +1047 -0
  182. fastmcp-2.12.0rc1/src/fastmcp/server/auth/providers/azure.py +270 -0
  183. fastmcp-2.12.0rc1/src/fastmcp/server/auth/providers/github.py +287 -0
  184. fastmcp-2.12.0rc1/src/fastmcp/server/auth/providers/google.py +305 -0
  185. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/server/auth/providers/jwt.py +27 -16
  186. fastmcp-2.12.0rc1/src/fastmcp/server/auth/providers/workos.py +405 -0
  187. fastmcp-2.12.0rc1/src/fastmcp/server/auth/redirect_validation.py +65 -0
  188. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/server/auth/registry.py +1 -1
  189. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/server/context.py +91 -41
  190. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/server/dependencies.py +32 -2
  191. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/server/elicitation.py +60 -1
  192. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/server/http.py +44 -37
  193. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/server/middleware/logging.py +66 -28
  194. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/server/proxy.py +2 -0
  195. fastmcp-2.12.0rc1/src/fastmcp/server/sampling/handler.py +19 -0
  196. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/server/server.py +85 -20
  197. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/settings.py +18 -3
  198. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/tools/tool.py +23 -10
  199. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/tools/tool_manager.py +5 -1
  200. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/tools/tool_transform.py +75 -32
  201. fastmcp-2.12.0rc1/src/fastmcp/utilities/auth.py +34 -0
  202. fastmcp-2.12.0rc1/src/fastmcp/utilities/cli.py +235 -0
  203. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/utilities/components.py +21 -5
  204. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/utilities/inspect.py +166 -37
  205. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/utilities/json_schema_type.py +4 -2
  206. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/utilities/logging.py +4 -1
  207. fastmcp-2.12.0rc1/src/fastmcp/utilities/mcp_config.py +57 -0
  208. fastmcp-2.12.0rc1/src/fastmcp/utilities/mcp_server_config/__init__.py +25 -0
  209. fastmcp-2.12.0rc1/src/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +6 -0
  210. fastmcp-2.12.0rc1/src/fastmcp/utilities/mcp_server_config/v1/environments/base.py +30 -0
  211. fastmcp-2.12.0rc1/src/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +306 -0
  212. fastmcp-2.12.0rc1/src/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +446 -0
  213. fastmcp-2.12.0rc1/src/fastmcp/utilities/mcp_server_config/v1/schema.json +361 -0
  214. fastmcp-2.12.0rc1/src/fastmcp/utilities/mcp_server_config/v1/sources/base.py +30 -0
  215. fastmcp-2.12.0rc1/src/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +216 -0
  216. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/utilities/openapi.py +4 -4
  217. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/utilities/tests.py +7 -2
  218. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/utilities/types.py +15 -2
  219. fastmcp-2.12.0rc1/test_github_oauth.py +21 -0
  220. fastmcp-2.12.0rc1/test_google_oauth.py +22 -0
  221. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/cli/test_cli.py +101 -156
  222. fastmcp-2.12.0rc1/tests/cli/test_config.py +444 -0
  223. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/cli/test_cursor.py +12 -7
  224. fastmcp-2.12.0rc1/tests/cli/test_mcp_server_config_integration.py +290 -0
  225. fastmcp-2.12.0rc1/tests/cli/test_mcp_server_config_schema.py +149 -0
  226. fastmcp-2.12.0rc1/tests/cli/test_project_prepare.py +303 -0
  227. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/cli/test_run.py +165 -32
  228. fastmcp-2.12.0rc1/tests/cli/test_run_config.py +271 -0
  229. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/cli/test_run_with_uv.py +47 -38
  230. fastmcp-2.12.0rc1/tests/cli/test_server_args.py +139 -0
  231. fastmcp-2.12.0rc1/tests/cli/test_with_argv.py +91 -0
  232. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/client/auth/test_oauth_client.py +1 -1
  233. fastmcp-2.12.0rc1/tests/client/auth/test_oauth_token_expiry.py +152 -0
  234. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/client/test_elicitation.py +84 -0
  235. fastmcp-2.12.0rc1/tests/client/test_logs.py +193 -0
  236. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/client/test_openapi_experimental.py +3 -3
  237. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/client/test_openapi_legacy.py +3 -3
  238. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/client/test_sampling.py +26 -0
  239. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/client/test_sse.py +1 -1
  240. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/client/test_stdio.py +128 -1
  241. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/client/test_streamable_http.py +4 -8
  242. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/conftest.py +8 -0
  243. fastmcp-2.12.0rc1/tests/deprecated/test_dependencies.py +30 -0
  244. fastmcp-2.12.0rc1/tests/deprecated/test_output_schema_false.py +139 -0
  245. fastmcp-2.12.0rc1/tests/experimental/README.md +3 -0
  246. fastmcp-2.12.0rc1/tests/experimental/openapi_parser/README.md +5 -0
  247. fastmcp-2.12.0rc1/tests/experimental/openapi_parser/conftest.py +11 -0
  248. {fastmcp-2.11.2/tests/experimental → fastmcp-2.12.0rc1/tests/experimental/openapi_parser}/server/openapi/test_end_to_end_compatibility.py +4 -2
  249. {fastmcp-2.11.2/tests/experimental/server → fastmcp-2.12.0rc1/tests/experimental/openapi_parser/server/openapi}/test_openapi_performance.py +2 -2
  250. {fastmcp-2.11.2/tests/experimental → fastmcp-2.12.0rc1/tests/experimental/openapi_parser}/server/openapi/test_performance_comparison.py +5 -5
  251. fastmcp-2.12.0rc1/tests/experimental/openapi_parser/utilities/openapi/test_allof_requestbody.py +227 -0
  252. {fastmcp-2.11.2/tests/experimental → fastmcp-2.12.0rc1/tests/experimental/openapi_parser}/utilities/openapi/test_models.py +7 -5
  253. {fastmcp-2.11.2/tests/experimental → fastmcp-2.12.0rc1/tests/experimental/openapi_parser}/utilities/openapi/test_parser.py +129 -0
  254. {fastmcp-2.11.2/tests/experimental → fastmcp-2.12.0rc1/tests/experimental/openapi_parser}/utilities/openapi/test_schemas.py +5 -3
  255. fastmcp-2.12.0rc1/tests/experimental/openapi_parser/utilities/openapi/test_transitive_references.py +788 -0
  256. fastmcp-2.12.0rc1/tests/experimental/sampling/test_openai_handler.py +100 -0
  257. fastmcp-2.12.0rc1/tests/integration_tests/auth/test_github_provider_integration.py +356 -0
  258. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/resources/test_resource_manager.py +8 -8
  259. fastmcp-2.12.0rc1/tests/server/auth/__init__.py +0 -0
  260. fastmcp-2.12.0rc1/tests/server/auth/providers/__init__.py +0 -0
  261. fastmcp-2.12.0rc1/tests/server/auth/providers/test_azure.py +164 -0
  262. fastmcp-2.12.0rc1/tests/server/auth/providers/test_github.py +240 -0
  263. fastmcp-2.12.0rc1/tests/server/auth/providers/test_google.py +116 -0
  264. fastmcp-2.12.0rc1/tests/server/auth/providers/test_workos.py +152 -0
  265. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/server/auth/test_jwt_provider.py +288 -5
  266. fastmcp-2.12.0rc1/tests/server/auth/test_oauth_proxy.py +594 -0
  267. fastmcp-2.12.0rc1/tests/server/auth/test_oauth_proxy_redirect_validation.py +197 -0
  268. fastmcp-2.12.0rc1/tests/server/auth/test_redirect_validation.py +141 -0
  269. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/server/auth/test_remote_auth_provider.py +64 -2
  270. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/server/auth/test_static_token_verifier.py +26 -3
  271. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/server/auth/test_workos.py +1 -1
  272. fastmcp-2.12.0rc1/tests/server/http/__init__.py +0 -0
  273. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/server/http/test_bearer_auth_backend.py +1 -1
  274. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/server/http/test_http_auth_middleware.py +9 -9
  275. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/server/http/test_http_dependencies.py +2 -2
  276. fastmcp-2.12.0rc1/tests/server/middleware/__init__.py +0 -0
  277. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/server/middleware/test_logging.py +295 -48
  278. fastmcp-2.12.0rc1/tests/server/openapi/__init__.py +0 -0
  279. fastmcp-2.12.0rc1/tests/server/proxy/__init__.py +0 -0
  280. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/server/proxy/test_proxy_server.py +1 -1
  281. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/server/test_context.py +7 -7
  282. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/server/test_import_server.py +38 -0
  283. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/server/test_mount.py +183 -6
  284. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/server/test_server.py +1 -1
  285. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/server/test_server_interactions.py +3 -3
  286. fastmcp-2.12.0rc1/tests/server/test_streamable_http_no_redirect.py +85 -0
  287. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/server/test_tool_transformation.py +28 -0
  288. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/test_mcp_config.py +184 -0
  289. fastmcp-2.12.0rc1/tests/tools/__init__.py +0 -0
  290. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/tools/test_tool.py +259 -81
  291. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/tools/test_tool_manager.py +44 -3
  292. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/tools/test_tool_transform.py +267 -54
  293. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/utilities/openapi/test_openapi.py +262 -205
  294. fastmcp-2.12.0rc1/tests/utilities/test_cli.py +192 -0
  295. fastmcp-2.12.0rc1/tests/utilities/test_components.py +438 -0
  296. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/utilities/test_inspect.py +210 -10
  297. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/utilities/test_json_schema.py +1 -0
  298. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/uv.lock +617 -424
  299. fastmcp-2.11.2/.github/ISSUE_TEMPLATE/enhancement.yml +0 -38
  300. fastmcp-2.11.2/.github/labeler.yml +0 -33
  301. fastmcp-2.11.2/.github/workflows/labeler.yml +0 -13
  302. fastmcp-2.11.2/AGENTS.md +0 -67
  303. fastmcp-2.11.2/CLAUDE.md +0 -46
  304. fastmcp-2.11.2/docs/deployment/running-server.mdx +0 -323
  305. fastmcp-2.11.2/docs/patterns/http-requests.mdx +0 -87
  306. fastmcp-2.11.2/docs/patterns/testing.mdx +0 -48
  307. fastmcp-2.11.2/docs/python-sdk/fastmcp-cli-cli.mdx +0 -80
  308. fastmcp-2.11.2/docs/python-sdk/fastmcp-server-auth-auth.mdx +0 -124
  309. fastmcp-2.11.2/docs/python-sdk/fastmcp-server-auth-providers-bearer_env.mdx +0 -22
  310. fastmcp-2.11.2/docs/python-sdk/fastmcp-server-auth-providers-workos.mdx +0 -58
  311. fastmcp-2.11.2/docs/python-sdk/fastmcp-server-elicitation.mdx +0 -54
  312. fastmcp-2.11.2/docs/python-sdk/fastmcp-utilities-cli.mdx +0 -25
  313. fastmcp-2.11.2/docs/python-sdk/fastmcp-utilities-inspect.mdx +0 -94
  314. fastmcp-2.11.2/docs/python-sdk/fastmcp-utilities-mcp_config.mdx +0 -28
  315. fastmcp-2.11.2/src/fastmcp/cli/cli.py +0 -522
  316. fastmcp-2.11.2/src/fastmcp/cli/install/cursor.py +0 -237
  317. fastmcp-2.11.2/src/fastmcp/cli/install/shared.py +0 -85
  318. fastmcp-2.11.2/src/fastmcp/cli/run.py +0 -397
  319. fastmcp-2.11.2/src/fastmcp/client/logging.py +0 -26
  320. fastmcp-2.11.2/src/fastmcp/server/auth/providers/workos.py +0 -151
  321. fastmcp-2.11.2/src/fastmcp/utilities/cli.py +0 -102
  322. fastmcp-2.11.2/src/fastmcp/utilities/mcp_config.py +0 -28
  323. fastmcp-2.11.2/tests/client/test_logs.py +0 -90
  324. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/.ccignore +0 -0
  325. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/.cursor/rules/core-mcp-objects.mdc +0 -0
  326. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  327. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/.github/dependabot.yml +0 -0
  328. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/.github/release.yml +0 -0
  329. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/LICENSE +0 -0
  330. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/README.md +0 -0
  331. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/README_OPENAPI.md +0 -0
  332. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/Windows_Notes.md +0 -0
  333. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/.ccignore +0 -0
  334. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/.cursor/rules/mintlify.mdc +0 -0
  335. {fastmcp-2.11.2/docs/assets → fastmcp-2.12.0rc1/docs/assets/brand}/favicon.svg +0 -0
  336. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/assets/images/tutorial-rest-api-result.png +0 -0
  337. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/assets/updates/release-2-7.png +0 -0
  338. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/clients/auth/bearer.mdx +0 -0
  339. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/clients/auth/oauth.mdx +0 -0
  340. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/clients/client.mdx +0 -0
  341. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/clients/elicitation.mdx +0 -0
  342. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/clients/messages.mdx +0 -0
  343. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/clients/progress.mdx +0 -0
  344. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/clients/prompts.mdx +0 -0
  345. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/clients/resources.mdx +0 -0
  346. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/clients/roots.mdx +0 -0
  347. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/clients/transports.mdx +0 -0
  348. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/community/README.md +0 -0
  349. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/community/showcase.mdx +0 -0
  350. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/css/banner.css +0 -0
  351. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/css/python-sdk.css +0 -0
  352. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/css/version-badge.css +0 -0
  353. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/getting-started/quickstart.mdx +0 -0
  354. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/getting-started/welcome.mdx +0 -0
  355. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/integrations/authkit.mdx +0 -0
  356. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/integrations/chatgpt.mdx +0 -0
  357. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/integrations/cursor-install-mcp.png +0 -0
  358. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/integrations/eunomia-authorization.mdx +0 -0
  359. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/integrations/fastapi.mdx +0 -0
  360. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/integrations/images/authkit/enable_dcr.png +0 -0
  361. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/integrations/images/permit/abac_condition_example.png +0 -0
  362. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/integrations/images/permit/abac_policy_example.png +0 -0
  363. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/integrations/images/permit/policy_mapping.png +0 -0
  364. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/integrations/images/permit/role_assignement.png +0 -0
  365. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/integrations/openapi.mdx +0 -0
  366. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/integrations/permit.mdx +0 -0
  367. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/patterns/contrib.mdx +0 -0
  368. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/patterns/decorating-methods.mdx +0 -0
  369. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/patterns/tool-transformation.mdx +0 -0
  370. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-cli-__init__.mdx +0 -0
  371. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-cli-install-__init__.mdx +0 -0
  372. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-client-__init__.mdx +0 -0
  373. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-client-auth-__init__.mdx +0 -0
  374. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-client-auth-bearer.mdx +0 -0
  375. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-client-elicitation.mdx +0 -0
  376. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-client-messages.mdx +0 -0
  377. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-client-oauth_callback.mdx +0 -0
  378. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-client-progress.mdx +0 -0
  379. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-client-roots.mdx +0 -0
  380. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-exceptions.mdx +0 -0
  381. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-prompts-__init__.mdx +0 -0
  382. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-prompts-prompt.mdx +0 -0
  383. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-resources-__init__.mdx +0 -0
  384. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-resources-resource.mdx +0 -0
  385. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-resources-template.mdx +0 -0
  386. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-resources-types.mdx +0 -0
  387. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-server-__init__.mdx +0 -0
  388. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-server-auth-__init__.mdx +0 -0
  389. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-server-auth-providers-__init__.mdx +0 -0
  390. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-server-auth-providers-bearer.mdx +0 -0
  391. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-server-auth-providers-in_memory.mdx +0 -0
  392. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-server-auth-registry.mdx +0 -0
  393. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-server-low_level.mdx +0 -0
  394. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-server-middleware-__init__.mdx +0 -0
  395. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-server-middleware-error_handling.mdx +0 -0
  396. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-server-middleware-middleware.mdx +0 -0
  397. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-server-middleware-rate_limiting.mdx +0 -0
  398. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-server-middleware-timing.mdx +0 -0
  399. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-server-openapi.mdx +0 -0
  400. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-tools-__init__.mdx +0 -0
  401. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-utilities-__init__.mdx +0 -0
  402. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-utilities-exceptions.mdx +0 -0
  403. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-utilities-http.mdx +0 -0
  404. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-utilities-json_schema.mdx +0 -0
  405. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/python-sdk/fastmcp-utilities-json_schema_type.mdx +0 -0
  406. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/servers/auth/full-oauth-server.mdx +0 -0
  407. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/servers/elicitation.mdx +0 -0
  408. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/servers/logging.mdx +0 -0
  409. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/servers/middleware.mdx +0 -0
  410. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/servers/progress.mdx +0 -0
  411. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/servers/proxy.mdx +0 -0
  412. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/servers/resources.mdx +0 -0
  413. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/servers/sampling.mdx +0 -0
  414. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/servers/tools.mdx +0 -0
  415. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/snippets/local-focus.mdx +0 -0
  416. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/snippets/version-badge.mdx +0 -0
  417. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/snippets/youtube-embed.mdx +0 -0
  418. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/tutorials/create-mcp-server.mdx +0 -0
  419. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/tutorials/mcp.mdx +0 -0
  420. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/tutorials/rest-api.mdx +0 -0
  421. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/docs/updates.mdx +0 -0
  422. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/examples/atproto_mcp/README.md +0 -0
  423. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/examples/atproto_mcp/demo.py +0 -0
  424. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/examples/atproto_mcp/pyproject.toml +0 -0
  425. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/examples/atproto_mcp/src/atproto_mcp/__init__.py +0 -0
  426. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/examples/atproto_mcp/src/atproto_mcp/__main__.py +0 -0
  427. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/examples/atproto_mcp/src/atproto_mcp/_atproto/__init__.py +0 -0
  428. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/examples/atproto_mcp/src/atproto_mcp/_atproto/_client.py +0 -0
  429. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/examples/atproto_mcp/src/atproto_mcp/_atproto/_profile.py +0 -0
  430. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/examples/atproto_mcp/src/atproto_mcp/_atproto/_read.py +0 -0
  431. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/examples/atproto_mcp/src/atproto_mcp/_atproto/_social.py +0 -0
  432. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/examples/atproto_mcp/src/atproto_mcp/py.typed +0 -0
  433. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/examples/atproto_mcp/src/atproto_mcp/settings.py +0 -0
  434. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/examples/atproto_mcp/src/atproto_mcp/types.py +0 -0
  435. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/examples/complex_inputs.py +0 -0
  436. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/examples/config_server.py +0 -0
  437. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/examples/desktop.py +0 -0
  438. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/examples/echo.py +0 -0
  439. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/examples/get_file.py +0 -0
  440. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/examples/in_memory_proxy_example.py +0 -0
  441. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/examples/memory.py +0 -0
  442. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/examples/sampling.py +0 -0
  443. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/examples/screenshot.py +0 -0
  444. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/examples/serializer.py +0 -0
  445. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/examples/simple_echo.py +0 -0
  446. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/examples/smart_home/README.md +0 -0
  447. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/examples/smart_home/pyproject.toml +0 -0
  448. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/examples/smart_home/src/smart_home/__init__.py +0 -0
  449. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/examples/smart_home/src/smart_home/__main__.py +0 -0
  450. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/examples/smart_home/src/smart_home/hub.py +0 -0
  451. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/examples/smart_home/src/smart_home/lights/__init__.py +0 -0
  452. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/examples/smart_home/src/smart_home/lights/hue_utils.py +0 -0
  453. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/examples/smart_home/src/smart_home/lights/server.py +0 -0
  454. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/examples/smart_home/src/smart_home/py.typed +0 -0
  455. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/examples/smart_home/src/smart_home/settings.py +0 -0
  456. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/examples/smart_home/uv.lock +0 -0
  457. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/examples/tags_example.py +0 -0
  458. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/examples/text_me.py +0 -0
  459. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/cli/__init__.py +0 -0
  460. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/cli/install/__init__.py +0 -0
  461. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/client/__init__.py +0 -0
  462. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/client/auth/__init__.py +0 -0
  463. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/client/auth/bearer.py +0 -0
  464. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/client/elicitation.py +0 -0
  465. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/client/messages.py +0 -0
  466. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/client/progress.py +0 -0
  467. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/client/roots.py +0 -0
  468. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/contrib/README.md +0 -0
  469. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
  470. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
  471. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
  472. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
  473. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/contrib/component_manager/README.md +0 -0
  474. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/contrib/component_manager/__init__.py +0 -0
  475. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/contrib/component_manager/component_manager.py +0 -0
  476. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/contrib/component_manager/component_service.py +0 -0
  477. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/contrib/component_manager/example.py +0 -0
  478. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/contrib/mcp_mixin/README.md +0 -0
  479. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
  480. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/contrib/mcp_mixin/example.py +0 -0
  481. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
  482. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/exceptions.py +0 -0
  483. {fastmcp-2.11.2/src/fastmcp/server/auth/providers → fastmcp-2.12.0rc1/src/fastmcp/experimental/sampling}/__init__.py +0 -0
  484. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/experimental/server/openapi/README.md +0 -0
  485. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/experimental/server/openapi/__init__.py +0 -0
  486. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/experimental/server/openapi/components.py +0 -0
  487. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/experimental/utilities/openapi/README.md +0 -0
  488. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/experimental/utilities/openapi/director.py +0 -0
  489. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/experimental/utilities/openapi/json_schema_converter.py +0 -0
  490. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/prompts/__init__.py +0 -0
  491. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/prompts/prompt.py +0 -0
  492. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/py.typed +0 -0
  493. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/resources/__init__.py +0 -0
  494. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/resources/resource.py +0 -0
  495. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/resources/template.py +0 -0
  496. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/resources/types.py +0 -0
  497. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/server/__init__.py +0 -0
  498. {fastmcp-2.11.2/tests → fastmcp-2.12.0rc1/src/fastmcp/server/auth/providers}/__init__.py +0 -0
  499. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/server/auth/providers/bearer.py +0 -0
  500. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/server/auth/providers/in_memory.py +0 -0
  501. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/server/low_level.py +0 -0
  502. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/server/middleware/__init__.py +0 -0
  503. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/server/middleware/error_handling.py +0 -0
  504. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/server/middleware/middleware.py +0 -0
  505. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/server/middleware/rate_limiting.py +0 -0
  506. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/server/middleware/timing.py +0 -0
  507. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/server/openapi.py +0 -0
  508. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/tools/__init__.py +0 -0
  509. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/utilities/__init__.py +0 -0
  510. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/utilities/exceptions.py +0 -0
  511. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/utilities/http.py +0 -0
  512. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/src/fastmcp/utilities/json_schema.py +0 -0
  513. {fastmcp-2.11.2/tests/client → fastmcp-2.12.0rc1/src/fastmcp/utilities/mcp_server_config/v1}/__init__.py +0 -0
  514. {fastmcp-2.11.2/tests/client/auth → fastmcp-2.12.0rc1/src/fastmcp/utilities/mcp_server_config/v1/sources}/__init__.py +0 -0
  515. {fastmcp-2.11.2/tests/client/transports → fastmcp-2.12.0rc1/tests}/__init__.py +0 -0
  516. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/cli/__init__.py +0 -0
  517. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/cli/test_install.py +0 -0
  518. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/cli/test_shared.py +0 -0
  519. {fastmcp-2.11.2/tests/experimental → fastmcp-2.12.0rc1/tests/client}/__init__.py +0 -0
  520. {fastmcp-2.11.2/tests/experimental/server → fastmcp-2.12.0rc1/tests/client/auth}/__init__.py +0 -0
  521. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/client/test_client.py +0 -0
  522. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/client/test_notifications.py +0 -0
  523. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/client/test_progress.py +0 -0
  524. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/client/test_roots.py +0 -0
  525. {fastmcp-2.11.2/tests/experimental/utilities → fastmcp-2.12.0rc1/tests/client/transports}/__init__.py +0 -0
  526. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/client/transports/test_uv_transport.py +0 -0
  527. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/contrib/__init__.py +0 -0
  528. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/contrib/test_bulk_tool_caller.py +0 -0
  529. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/contrib/test_component_manager.py +0 -0
  530. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/contrib/test_mcp_mixin.py +0 -0
  531. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/deprecated/__init__.py +0 -0
  532. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/deprecated/test_bearer_auth_provider.py +0 -0
  533. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/deprecated/test_deprecated.py +0 -0
  534. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/deprecated/test_mount_import_arg_order.py +0 -0
  535. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/deprecated/test_mount_separators.py +0 -0
  536. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/deprecated/test_proxy_client.py +0 -0
  537. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/deprecated/test_resource_prefixes.py +0 -0
  538. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/deprecated/test_route_type_ignore.py +0 -0
  539. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/deprecated/test_settings.py +0 -0
  540. {fastmcp-2.11.2/tests/integration_tests → fastmcp-2.12.0rc1/tests/experimental}/__init__.py +0 -0
  541. {fastmcp-2.11.2/tests/prompts → fastmcp-2.12.0rc1/tests/experimental/openapi_parser}/__init__.py +0 -0
  542. {fastmcp-2.11.2/tests/resources → fastmcp-2.12.0rc1/tests/experimental/openapi_parser/server}/__init__.py +0 -0
  543. {fastmcp-2.11.2/tests/experimental → fastmcp-2.12.0rc1/tests/experimental/openapi_parser}/server/openapi/__init__.py +0 -0
  544. {fastmcp-2.11.2/tests/experimental → fastmcp-2.12.0rc1/tests/experimental/openapi_parser}/server/openapi/test_comprehensive.py +0 -0
  545. {fastmcp-2.11.2/tests/experimental → fastmcp-2.12.0rc1/tests/experimental/openapi_parser}/server/openapi/test_deepobject_style.py +0 -0
  546. {fastmcp-2.11.2/tests/experimental → fastmcp-2.12.0rc1/tests/experimental/openapi_parser}/server/openapi/test_openapi_features.py +0 -0
  547. {fastmcp-2.11.2/tests/experimental → fastmcp-2.12.0rc1/tests/experimental/openapi_parser}/server/openapi/test_parameter_collisions.py +0 -0
  548. {fastmcp-2.11.2/tests/experimental → fastmcp-2.12.0rc1/tests/experimental/openapi_parser}/server/openapi/test_server.py +0 -0
  549. {fastmcp-2.11.2/tests/server → fastmcp-2.12.0rc1/tests/experimental/openapi_parser/utilities}/__init__.py +0 -0
  550. {fastmcp-2.11.2/tests/experimental → fastmcp-2.12.0rc1/tests/experimental/openapi_parser}/utilities/openapi/__init__.py +0 -0
  551. {fastmcp-2.11.2/tests/experimental → fastmcp-2.12.0rc1/tests/experimental/openapi_parser}/utilities/openapi/conftest.py +0 -0
  552. {fastmcp-2.11.2/tests/experimental → fastmcp-2.12.0rc1/tests/experimental/openapi_parser}/utilities/openapi/test_director.py +0 -0
  553. {fastmcp-2.11.2/tests/experimental → fastmcp-2.12.0rc1/tests/experimental/openapi_parser}/utilities/openapi/test_legacy_compatibility.py +0 -0
  554. {fastmcp-2.11.2/tests/experimental → fastmcp-2.12.0rc1/tests/experimental/openapi_parser}/utilities/openapi/test_nullable_fields.py +0 -0
  555. {fastmcp-2.11.2/tests/server/http → fastmcp-2.12.0rc1/tests/integration_tests}/__init__.py +0 -0
  556. {fastmcp-2.11.2/tests/server/middleware → fastmcp-2.12.0rc1/tests/integration_tests/auth}/__init__.py +0 -0
  557. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/integration_tests/conftest.py +0 -0
  558. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/integration_tests/test_github_mcp_remote.py +0 -0
  559. {fastmcp-2.11.2/tests/server/openapi → fastmcp-2.12.0rc1/tests/prompts}/__init__.py +0 -0
  560. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/prompts/test_prompt.py +0 -0
  561. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/prompts/test_prompt_manager.py +0 -0
  562. {fastmcp-2.11.2/tests/server/proxy → fastmcp-2.12.0rc1/tests/resources}/__init__.py +0 -0
  563. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/resources/test_file_resources.py +0 -0
  564. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/resources/test_function_resources.py +0 -0
  565. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/resources/test_resource_template.py +0 -0
  566. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/resources/test_resource_template_meta.py +0 -0
  567. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/resources/test_resources.py +0 -0
  568. {fastmcp-2.11.2/tests/tools → fastmcp-2.12.0rc1/tests/server}/__init__.py +0 -0
  569. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/server/http/test_custom_routes.py +0 -0
  570. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/server/http/test_http_middleware.py +0 -0
  571. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/server/middleware/test_error_handling.py +0 -0
  572. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/server/middleware/test_middleware.py +0 -0
  573. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/server/middleware/test_rate_limiting.py +0 -0
  574. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/server/middleware/test_timing.py +0 -0
  575. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/server/openapi/conftest.py +0 -0
  576. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/server/openapi/test_advanced_behavior.py +0 -0
  577. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/server/openapi/test_basic_functionality.py +0 -0
  578. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/server/openapi/test_configuration.py +0 -0
  579. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/server/openapi/test_deepobject_style.py +0 -0
  580. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/server/openapi/test_description_propagation.py +0 -0
  581. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/server/openapi/test_explode_integration.py +0 -0
  582. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/server/openapi/test_openapi_compatibility.py +0 -0
  583. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/server/openapi/test_openapi_path_parameters.py +0 -0
  584. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/server/openapi/test_optional_parameters.py +0 -0
  585. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/server/openapi/test_parameter_collisions.py +0 -0
  586. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/server/openapi/test_route_map_fn.py +0 -0
  587. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/server/proxy/test_proxy_client.py +0 -0
  588. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/server/proxy/test_stateful_proxy_client.py +0 -0
  589. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/server/test_app_state.py +0 -0
  590. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/server/test_auth_integration.py +0 -0
  591. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/server/test_experimental_openapi_feature_flag.py +0 -0
  592. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/server/test_file_server.py +0 -0
  593. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/server/test_logging.py +0 -0
  594. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/server/test_resource_prefix_formats.py +0 -0
  595. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/server/test_run_server.py +0 -0
  596. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/server/test_tool_annotations.py +0 -0
  597. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/server/test_tool_exclude_args.py +0 -0
  598. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/test_examples.py +0 -0
  599. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/tools/test_tool_future_annotations.py +0 -0
  600. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/utilities/__init__.py +0 -0
  601. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/utilities/openapi/__init__.py +0 -0
  602. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/utilities/openapi/conftest.py +0 -0
  603. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/utilities/openapi/test_nullable_fields.py +0 -0
  604. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/utilities/openapi/test_openapi_advanced.py +0 -0
  605. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/utilities/openapi/test_openapi_fastapi.py +0 -0
  606. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/utilities/openapi/test_openapi_output_schemas.py +0 -0
  607. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/utilities/test_json_schema_type.py +0 -0
  608. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/utilities/test_logging.py +0 -0
  609. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/utilities/test_tests.py +0 -0
  610. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/utilities/test_typeadapter.py +0 -0
  611. {fastmcp-2.11.2 → fastmcp-2.12.0rc1}/tests/utilities/test_types.py +0 -0
@@ -5,12 +5,12 @@ labels: [bug, pending]
5
5
  body:
6
6
  - type: markdown
7
7
  attributes:
8
- value: Thank you for contributing to FastMCP! 🙏
8
+ value: Thanks for contributing to FastMCP! 🙏
9
9
 
10
10
  - type: markdown
11
11
  attributes:
12
12
  value: |
13
- ## Before you submit 📝
13
+ ### Before you submit
14
14
 
15
15
  To help us help you, please:
16
16
 
@@ -18,7 +18,7 @@ body:
18
18
  - 🔍 **Check if someone else has already reported this issue** or if it's been fixed on the main branch
19
19
  - 📋 **You MUST include a copy/pasteable and properly formatted MRE** (minimal reproducible example) below or your issue may be closed without response
20
20
 
21
- Thanks for helping make FastMCP better! 🚀
21
+ Thanks for helping to make FastMCP better! 🚀
22
22
 
23
23
  - type: textarea
24
24
  id: description
@@ -38,17 +38,20 @@ body:
38
38
  description: >
39
39
  If applicable, please provide a self-contained,
40
40
  [minimal, reproducible example](https://stackoverflow.com/help/minimal-reproducible-example)
41
- demonstrating the bug.
42
-
43
- If possible, your example should be a single-file script. Instead of `.run()`-ing an MCP server, use a `Client` to directly interact with it (`async with Client(mcp) as client: ...`) and demonstrate the issue.
41
+ demonstrating the bug. If possible, your example should be a single-file script.
44
42
 
45
43
  placeholder: |
44
+ import asyncio
46
45
  from fastmcp import FastMCP, Client
47
46
 
48
47
  mcp = FastMCP()
49
48
 
50
- async with Client(mcp) as client:
51
- ...
49
+ async def demo():
50
+ async with Client(mcp) as client:
51
+ ... # show the bug here
52
+
53
+ if __name__ == "__main__":
54
+ asyncio.run(demo())
52
55
  render: Python
53
56
 
54
57
  - type: textarea
@@ -56,28 +59,13 @@ body:
56
59
  attributes:
57
60
  label: Version Information
58
61
  description: |
59
- Please provide information about your FastMCP version, MCP version, Python version, and OS.
62
+ Please tell us about your FastMCP version, MCP version, Python version, and OS, as well as any other relevant details about your environment.
60
63
 
61
- To get this information, run the following command in your terminal and paste the output below:
64
+ To get the basic information, run the following command in your terminal and paste the output below:
62
65
 
63
66
  ```bash
64
67
  fastmcp version --copy
65
68
  ```
66
-
67
- *Note: if you're using FastMCP < 2.10.3, run `fastmcp version` instead.*
68
-
69
- If there is other information that would be helpful, please include it as well.
70
69
  render: Text
71
70
  validations:
72
71
  required: true
73
-
74
- - type: textarea
75
- id: additional_context
76
- attributes:
77
- label: Additional Context
78
- description: |
79
- Add any other context about the problem here. This could include:
80
- - The full error message and traceback (if applicable)
81
- - Information about your environment (e.g., virtual environment, installed packages)
82
- - Steps to reproduce the issue
83
- - Any recent changes in your code or setup that might be relevant
@@ -0,0 +1,34 @@
1
+ name: 💡 Enhancement Request
2
+ description: Suggest an idea or improvement for FastMCP
3
+ labels: [enhancement, pending]
4
+
5
+ body:
6
+ - type: markdown
7
+ attributes:
8
+ value: Thanks for contributing to FastMCP! 🙏
9
+
10
+ - type: markdown
11
+ attributes:
12
+ value: |
13
+ ### Before you submit
14
+
15
+ To help us evaluate your enhancement request:
16
+
17
+ - 🔍 **Check if this has already been requested** - search existing issues first
18
+ - 💭 **Think about the broader impact** - how would this affect other users?
19
+ - 📋 **Consider implementation complexity** - is this a small change or a major feature?
20
+
21
+ Thanks for helping to make FastMCP better! 🚀
22
+
23
+ - type: textarea
24
+ id: description
25
+ attributes:
26
+ label: Enhancement
27
+ description: |
28
+ Please describe the enhancement:
29
+
30
+ - What problem or use case would it solve?
31
+ - How would it improve your workflow or experience with FastMCP?
32
+ - Are there any alternative solutions you've considered?
33
+ validations:
34
+ required: true
@@ -0,0 +1 @@
1
+ ../AGENTS.md
@@ -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 }}
@@ -0,0 +1,71 @@
1
+ name: Marvin Context Protocol
2
+
3
+ on:
4
+ issue_comment: { types: [created] }
5
+ pull_request_review_comment: { types: [created] }
6
+ pull_request_review: { types: [submitted] }
7
+ pull_request: { types: [opened, edited] }
8
+ issues: { types: [opened, edited, assigned, labeled] }
9
+ discussion: { types: [created, edited, labeled] }
10
+ discussion_comment: { types: [created] }
11
+
12
+ permissions:
13
+ contents: write
14
+ issues: write
15
+ pull-requests: write
16
+ discussions: write
17
+ actions: read
18
+ id-token: write
19
+
20
+ jobs:
21
+ marvin:
22
+ if: |
23
+ (github.event_name == 'issue_comment' && contains(github.event.comment.body, '/marvin')) ||
24
+ (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '/marvin')) ||
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')) ||
27
+ (github.event_name == 'issues' && contains(github.event.issue.body, '/marvin')) ||
28
+ (github.event_name == 'discussion' && contains(github.event.discussion.body, '/marvin')) ||
29
+ (github.event_name == 'discussion_comment' && contains(github.event.comment.body, '/marvin')) ||
30
+ (github.event_name == 'issues' && github.event.action == 'assigned' && github.event.assignee.login == 'Marvin Context Protocol') ||
31
+ (github.event_name == 'issues' && github.event.action == 'labeled' && github.event.label.name == 'marvin')
32
+ runs-on: ubuntu-latest
33
+ steps:
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"
52
+
53
+ - name: Generate Marvin App token
54
+ id: marvin-token
55
+ uses: actions/create-github-app-token@v2
56
+ with:
57
+ app-id: ${{ secrets.MARVIN_APP_ID }}
58
+ private-key: ${{ secrets.MARVIN_APP_PRIVATE_KEY }}
59
+
60
+ # Marvin Assistant
61
+ - name: Run Marvin
62
+ uses: anthropics/claude-code-action@beta
63
+ with:
64
+ github_token: ${{ steps.marvin-token.outputs.token }}
65
+ anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
66
+ mode: tag
67
+ trigger_phrase: "/marvin"
68
+ allowed_bots: "*"
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"
70
+ additional_permissions: |
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,19 +30,25 @@ 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
41
+ run: uv sync
42
+
43
+ - name: Check lockfile is up to date
44
+ run: |
45
+ if ! uv lock --check; then
46
+ echo "❌ Lockfile is out of date!"
47
+ echo "To update the lockfile, run 'uv lock'."
48
+ exit 1
49
+ fi
50
+ echo "✅ Lockfile is up to date"
45
51
  - name: Run pre-commit
46
- uses: pre-commit/action@v3.0.1
52
+ run: uv run pre-commit run --all-files
47
53
  env:
48
54
  SKIP: no-commit-to-branch
@@ -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
@@ -44,13 +44,14 @@ jobs:
44
44
  python-version: ${{ matrix.python-version }}
45
45
 
46
46
  - name: Install FastMCP
47
- run: uv sync --locked
47
+ # run with frozen to use the current lockfile; static checks will determine if it needs updating
48
+ run: uv sync --frozen
48
49
 
49
50
  - name: Run tests (excluding integration and client_process)
50
- 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"
51
52
 
52
53
  - name: Run client process tests separately
53
- run: uv run pytest tests -m "client_process" -x
54
+ run: uv run pytest -v tests -m "client_process" -x
54
55
 
55
56
  run_integration_tests:
56
57
  name: "Run integration tests"
@@ -58,7 +59,7 @@ jobs:
58
59
  timeout-minutes: 10
59
60
 
60
61
  steps:
61
- - uses: actions/checkout@v4
62
+ - uses: actions/checkout@v5
62
63
 
63
64
  - name: Install uv
64
65
  uses: astral-sh/setup-uv@v6
@@ -68,9 +69,12 @@ jobs:
68
69
  python-version: "3.10"
69
70
 
70
71
  - name: Install FastMCP
71
- run: uv sync --locked
72
+ # run with frozen to use the current lockfile; static checks will determine if it needs updating
73
+ run: uv sync --frozen
72
74
 
73
75
  - name: Run integration tests
74
- run: uv run pytest tests -m "integration"
76
+ run: uv run pytest -v tests -m "integration"
75
77
  env:
76
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"