fastmcp 2.10.5__tar.gz → 2.11.0__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 (509) hide show
  1. {fastmcp-2.10.5 → fastmcp-2.11.0}/.github/ISSUE_TEMPLATE/bug.yml +13 -0
  2. {fastmcp-2.10.5 → fastmcp-2.11.0}/.github/release.yml +0 -4
  3. {fastmcp-2.10.5 → fastmcp-2.11.0}/.github/workflows/run-static.yml +2 -0
  4. {fastmcp-2.10.5 → fastmcp-2.11.0}/.github/workflows/run-tests.yml +26 -2
  5. {fastmcp-2.10.5 → fastmcp-2.11.0}/.pre-commit-config.yaml +6 -0
  6. {fastmcp-2.10.5 → fastmcp-2.11.0}/PKG-INFO +4 -3
  7. {fastmcp-2.10.5 → fastmcp-2.11.0}/README.md +2 -2
  8. fastmcp-2.11.0/docs/.ccignore +2 -0
  9. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/changelog.mdx +185 -0
  10. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/clients/auth/oauth.mdx +2 -1
  11. fastmcp-2.11.0/docs/clients/logging.mdx +111 -0
  12. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/clients/prompts.mdx +29 -0
  13. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/clients/resources.mdx +33 -0
  14. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/clients/tools.mdx +29 -0
  15. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/clients/transports.mdx +73 -0
  16. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/deployment/running-server.mdx +36 -0
  17. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/docs.json +27 -2
  18. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/integrations/anthropic.mdx +8 -8
  19. fastmcp-2.11.0/docs/integrations/authkit.mdx +103 -0
  20. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/integrations/claude-code.mdx +46 -6
  21. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/integrations/claude-desktop.mdx +65 -6
  22. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/integrations/cursor.mdx +65 -8
  23. fastmcp-2.11.0/docs/integrations/eunomia-authorization.mdx +130 -0
  24. fastmcp-2.11.0/docs/integrations/fastapi.mdx +446 -0
  25. fastmcp-2.11.0/docs/integrations/images/authkit/enable_dcr.png +0 -0
  26. fastmcp-2.11.0/docs/integrations/images/permit/abac_condition_example.png +0 -0
  27. fastmcp-2.11.0/docs/integrations/images/permit/abac_policy_example.png +0 -0
  28. fastmcp-2.11.0/docs/integrations/images/permit/policy_mapping.png +0 -0
  29. fastmcp-2.11.0/docs/integrations/images/permit/role_assignement.png +0 -0
  30. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/integrations/mcp-json-configuration.mdx +115 -49
  31. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/integrations/openai.mdx +8 -8
  32. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/integrations/openapi.mdx +57 -0
  33. fastmcp-2.11.0/docs/integrations/permit.mdx +353 -0
  34. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/patterns/cli.mdx +111 -26
  35. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/patterns/tool-transformation.mdx +85 -1
  36. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-cli-claude.mdx +2 -2
  37. fastmcp-2.11.0/docs/python-sdk/fastmcp-cli-cli.mdx +80 -0
  38. fastmcp-2.11.0/docs/python-sdk/fastmcp-cli-install-__init__.mdx +9 -0
  39. fastmcp-2.11.0/docs/python-sdk/fastmcp-cli-install-claude_code.mdx +71 -0
  40. fastmcp-2.11.0/docs/python-sdk/fastmcp-cli-install-claude_desktop.mdx +58 -0
  41. fastmcp-2.11.0/docs/python-sdk/fastmcp-cli-install-cursor.mdx +81 -0
  42. fastmcp-2.11.0/docs/python-sdk/fastmcp-cli-install-mcp_json.mdx +49 -0
  43. fastmcp-2.11.0/docs/python-sdk/fastmcp-cli-install-shared.mdx +31 -0
  44. fastmcp-2.11.0/docs/python-sdk/fastmcp-cli-run.mdx +142 -0
  45. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-client-auth-bearer.mdx +2 -2
  46. fastmcp-2.11.0/docs/python-sdk/fastmcp-client-auth-oauth.mdx +152 -0
  47. fastmcp-2.11.0/docs/python-sdk/fastmcp-client-client.mdx +499 -0
  48. fastmcp-2.11.0/docs/python-sdk/fastmcp-client-elicitation.mdx +18 -0
  49. fastmcp-2.11.0/docs/python-sdk/fastmcp-client-logging.mdx +20 -0
  50. fastmcp-2.11.0/docs/python-sdk/fastmcp-client-messages.mdx +107 -0
  51. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-client-oauth_callback.mdx +5 -5
  52. fastmcp-2.11.0/docs/python-sdk/fastmcp-client-progress.mdx +25 -0
  53. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-client-roots.mdx +2 -2
  54. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-client-sampling.mdx +1 -1
  55. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-client-transports.mdx +111 -15
  56. fastmcp-2.11.0/docs/python-sdk/fastmcp-exceptions.mdx +65 -0
  57. fastmcp-2.11.0/docs/python-sdk/fastmcp-mcp_config.mdx +188 -0
  58. fastmcp-2.11.0/docs/python-sdk/fastmcp-prompts-prompt.mdx +114 -0
  59. fastmcp-2.11.0/docs/python-sdk/fastmcp-prompts-prompt_manager.mdx +89 -0
  60. fastmcp-2.11.0/docs/python-sdk/fastmcp-resources-resource.mdx +120 -0
  61. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-resources-resource_manager.mdx +77 -7
  62. fastmcp-2.11.0/docs/python-sdk/fastmcp-resources-template.mdx +143 -0
  63. fastmcp-2.11.0/docs/python-sdk/fastmcp-resources-types.mdx +134 -0
  64. fastmcp-2.11.0/docs/python-sdk/fastmcp-server-auth-auth.mdx +30 -0
  65. fastmcp-2.11.0/docs/python-sdk/fastmcp-server-auth-providers-bearer.mdx +152 -0
  66. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-auth-providers-bearer_env.mdx +2 -2
  67. fastmcp-2.11.0/docs/python-sdk/fastmcp-server-auth-providers-in_memory.mdx +96 -0
  68. fastmcp-2.11.0/docs/python-sdk/fastmcp-server-context.mdx +321 -0
  69. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-dependencies.mdx +3 -3
  70. fastmcp-2.11.0/docs/python-sdk/fastmcp-server-elicitation.mdx +54 -0
  71. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-http.mdx +8 -8
  72. fastmcp-2.11.0/docs/python-sdk/fastmcp-server-low_level.mdx +18 -0
  73. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-middleware-error_handling.mdx +23 -3
  74. fastmcp-2.11.0/docs/python-sdk/fastmcp-server-middleware-logging.mdx +51 -0
  75. fastmcp-2.11.0/docs/python-sdk/fastmcp-server-middleware-middleware.mdx +108 -0
  76. fastmcp-2.11.0/docs/python-sdk/fastmcp-server-middleware-rate_limiting.mdx +97 -0
  77. fastmcp-2.11.0/docs/python-sdk/fastmcp-server-middleware-timing.mdx +105 -0
  78. fastmcp-2.11.0/docs/python-sdk/fastmcp-server-openapi.mdx +91 -0
  79. fastmcp-2.11.0/docs/python-sdk/fastmcp-server-proxy.mdx +324 -0
  80. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-server.mdx +246 -40
  81. fastmcp-2.11.0/docs/python-sdk/fastmcp-settings.mdx +78 -0
  82. fastmcp-2.11.0/docs/python-sdk/fastmcp-tools-tool.mdx +114 -0
  83. fastmcp-2.11.0/docs/python-sdk/fastmcp-tools-tool_manager.mdx +131 -0
  84. fastmcp-2.11.0/docs/python-sdk/fastmcp-tools-tool_transform.mdx +286 -0
  85. fastmcp-2.11.0/docs/python-sdk/fastmcp-utilities-cli.mdx +25 -0
  86. fastmcp-2.11.0/docs/python-sdk/fastmcp-utilities-components.mdx +99 -0
  87. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-utilities-exceptions.mdx +2 -2
  88. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-utilities-http.mdx +1 -1
  89. fastmcp-2.11.0/docs/python-sdk/fastmcp-utilities-inspect.mdx +94 -0
  90. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-utilities-json_schema.mdx +1 -1
  91. fastmcp-2.11.0/docs/python-sdk/fastmcp-utilities-json_schema_type.mdx +110 -0
  92. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-utilities-logging.mdx +2 -2
  93. fastmcp-2.11.0/docs/python-sdk/fastmcp-utilities-mcp_config.mdx +28 -0
  94. fastmcp-2.11.0/docs/python-sdk/fastmcp-utilities-openapi.mdx +179 -0
  95. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-utilities-tests.mdx +12 -2
  96. fastmcp-2.11.0/docs/python-sdk/fastmcp-utilities-types.mdx +139 -0
  97. fastmcp-2.11.0/docs/servers/auth/authentication.mdx +167 -0
  98. fastmcp-2.11.0/docs/servers/auth/full-oauth-server.mdx +128 -0
  99. fastmcp-2.11.0/docs/servers/auth/remote-authentication.mdx +146 -0
  100. fastmcp-2.11.0/docs/servers/auth/token-verification.mdx +210 -0
  101. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/servers/context.mdx +46 -0
  102. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/servers/logging.mdx +45 -3
  103. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/servers/middleware.mdx +68 -4
  104. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/servers/prompts.mdx +9 -2
  105. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/servers/proxy.mdx +11 -12
  106. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/servers/resources.mdx +73 -15
  107. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/servers/sampling.mdx +1 -0
  108. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/servers/server.mdx +36 -34
  109. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/servers/tools.mdx +113 -50
  110. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/tutorials/rest-api.mdx +2 -2
  111. {fastmcp-2.10.5 → fastmcp-2.11.0}/justfile +1 -1
  112. {fastmcp-2.10.5 → fastmcp-2.11.0}/pyproject.toml +12 -1
  113. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/__init__.py +7 -2
  114. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/cli/cli.py +128 -33
  115. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/cli/install/__init__.py +2 -2
  116. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/cli/install/claude_code.py +42 -1
  117. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/cli/install/claude_desktop.py +42 -1
  118. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/cli/install/cursor.py +42 -1
  119. fastmcp-2.10.5/src/fastmcp/cli/install/mcp_config.py → fastmcp-2.11.0/src/fastmcp/cli/install/mcp_json.py +51 -7
  120. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/cli/run.py +127 -1
  121. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/client/__init__.py +2 -0
  122. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/client/auth/oauth.py +68 -99
  123. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/client/oauth_callback.py +18 -0
  124. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/client/transports.py +69 -15
  125. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/contrib/component_manager/example.py +2 -2
  126. fastmcp-2.11.0/src/fastmcp/experimental/server/openapi/README.md +266 -0
  127. fastmcp-2.11.0/src/fastmcp/experimental/server/openapi/__init__.py +38 -0
  128. fastmcp-2.11.0/src/fastmcp/experimental/server/openapi/components.py +348 -0
  129. fastmcp-2.11.0/src/fastmcp/experimental/server/openapi/routing.py +132 -0
  130. fastmcp-2.11.0/src/fastmcp/experimental/server/openapi/server.py +466 -0
  131. fastmcp-2.11.0/src/fastmcp/experimental/utilities/openapi/README.md +239 -0
  132. fastmcp-2.11.0/src/fastmcp/experimental/utilities/openapi/__init__.py +68 -0
  133. fastmcp-2.11.0/src/fastmcp/experimental/utilities/openapi/director.py +208 -0
  134. fastmcp-2.11.0/src/fastmcp/experimental/utilities/openapi/formatters.py +355 -0
  135. fastmcp-2.11.0/src/fastmcp/experimental/utilities/openapi/json_schema_converter.py +340 -0
  136. fastmcp-2.11.0/src/fastmcp/experimental/utilities/openapi/models.py +85 -0
  137. fastmcp-2.11.0/src/fastmcp/experimental/utilities/openapi/parser.py +618 -0
  138. fastmcp-2.11.0/src/fastmcp/experimental/utilities/openapi/schemas.py +538 -0
  139. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/mcp_config.py +125 -88
  140. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/prompts/prompt.py +11 -1
  141. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/prompts/prompt_manager.py +1 -1
  142. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/resources/resource.py +21 -1
  143. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/resources/resource_manager.py +2 -2
  144. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/resources/template.py +20 -1
  145. fastmcp-2.11.0/src/fastmcp/server/auth/__init__.py +19 -0
  146. fastmcp-2.11.0/src/fastmcp/server/auth/auth.py +197 -0
  147. fastmcp-2.11.0/src/fastmcp/server/auth/providers/bearer.py +25 -0
  148. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/server/auth/providers/in_memory.py +4 -2
  149. fastmcp-2.10.5/src/fastmcp/server/auth/providers/bearer.py → fastmcp-2.11.0/src/fastmcp/server/auth/providers/jwt.py +207 -142
  150. fastmcp-2.11.0/src/fastmcp/server/auth/providers/workos.py +170 -0
  151. fastmcp-2.11.0/src/fastmcp/server/auth/registry.py +52 -0
  152. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/server/context.py +110 -26
  153. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/server/dependencies.py +9 -2
  154. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/server/http.py +62 -30
  155. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/server/middleware/middleware.py +3 -23
  156. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/server/openapi.py +26 -13
  157. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/server/proxy.py +89 -8
  158. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/server/server.py +170 -62
  159. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/settings.py +83 -18
  160. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/tools/tool.py +41 -6
  161. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/tools/tool_manager.py +39 -3
  162. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/tools/tool_transform.py +122 -6
  163. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/utilities/components.py +35 -2
  164. fastmcp-2.11.0/src/fastmcp/utilities/json_schema.py +213 -0
  165. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/utilities/json_schema_type.py +1 -3
  166. fastmcp-2.11.0/src/fastmcp/utilities/mcp_config.py +28 -0
  167. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/utilities/openapi.py +306 -30
  168. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/utilities/tests.py +54 -6
  169. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/utilities/types.py +89 -11
  170. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/cli/test_cli.py +210 -0
  171. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/cli/test_cursor.py +3 -0
  172. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/cli/test_install.py +94 -8
  173. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/cli/test_run.py +61 -0
  174. fastmcp-2.11.0/tests/cli/test_run_with_uv.py +240 -0
  175. fastmcp-2.11.0/tests/client/auth/test_oauth_client.py +128 -0
  176. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/client/test_client.py +12 -0
  177. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/client/test_logs.py +35 -5
  178. fastmcp-2.11.0/tests/client/test_openapi_experimental.py +201 -0
  179. fastmcp-2.11.0/tests/client/test_openapi_legacy.py +198 -0
  180. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/client/test_sampling.py +59 -4
  181. fastmcp-2.11.0/tests/client/transports/test_uv_transport.py +98 -0
  182. fastmcp-2.11.0/tests/conftest.py +9 -0
  183. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/contrib/test_component_manager.py +6 -7
  184. fastmcp-2.11.0/tests/deprecated/test_bearer_auth_provider.py +13 -0
  185. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/deprecated/test_settings.py +2 -0
  186. fastmcp-2.11.0/tests/experimental/server/openapi/__init__.py +1 -0
  187. fastmcp-2.11.0/tests/experimental/server/openapi/test_comprehensive.py +706 -0
  188. fastmcp-2.11.0/tests/experimental/server/openapi/test_deepobject_style.py +338 -0
  189. fastmcp-2.11.0/tests/experimental/server/openapi/test_end_to_end_compatibility.py +323 -0
  190. fastmcp-2.11.0/tests/experimental/server/openapi/test_openapi_features.py +391 -0
  191. fastmcp-2.11.0/tests/experimental/server/openapi/test_parameter_collisions.py +215 -0
  192. fastmcp-2.11.0/tests/experimental/server/openapi/test_performance_comparison.py +291 -0
  193. fastmcp-2.11.0/tests/experimental/server/openapi/test_server.py +340 -0
  194. fastmcp-2.11.0/tests/experimental/server/test_openapi_performance.py +142 -0
  195. fastmcp-2.11.0/tests/experimental/utilities/openapi/__init__.py +1 -0
  196. fastmcp-2.11.0/tests/experimental/utilities/openapi/conftest.py +222 -0
  197. fastmcp-2.11.0/tests/experimental/utilities/openapi/test_director.py +462 -0
  198. fastmcp-2.11.0/tests/experimental/utilities/openapi/test_legacy_compatibility.py +333 -0
  199. fastmcp-2.11.0/tests/experimental/utilities/openapi/test_models.py +453 -0
  200. fastmcp-2.11.0/tests/experimental/utilities/openapi/test_nullable_fields.py +245 -0
  201. fastmcp-2.11.0/tests/experimental/utilities/openapi/test_parser.py +331 -0
  202. fastmcp-2.11.0/tests/experimental/utilities/openapi/test_schemas.py +532 -0
  203. fastmcp-2.11.0/tests/integration_tests/conftest.py +28 -0
  204. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/integration_tests/test_github_mcp_remote.py +1 -0
  205. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/prompts/test_prompt.py +15 -0
  206. fastmcp-2.11.0/tests/resources/test_resource_template_meta.py +25 -0
  207. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/resources/test_resources.py +20 -0
  208. fastmcp-2.10.5/tests/auth/providers/test_bearer.py → fastmcp-2.11.0/tests/server/auth/test_jwt_provider.py +61 -45
  209. fastmcp-2.11.0/tests/server/auth/test_static_token_verifier.py +89 -0
  210. fastmcp-2.11.0/tests/server/auth/test_workos.py +58 -0
  211. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/http/test_auth_setup.py +22 -20
  212. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/http/test_bearer_auth_backend.py +15 -15
  213. fastmcp-2.11.0/tests/server/http/test_http_auth_middleware.py +78 -0
  214. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/middleware/test_middleware.py +166 -2
  215. fastmcp-2.11.0/tests/server/openapi/__init__.py +0 -0
  216. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/openapi/test_basic_functionality.py +2 -2
  217. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/openapi/test_openapi_path_parameters.py +148 -0
  218. fastmcp-2.11.0/tests/server/openapi/test_optional_parameters.py +100 -0
  219. fastmcp-2.11.0/tests/server/proxy/__init__.py +0 -0
  220. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/proxy/test_proxy_client.py +59 -0
  221. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/proxy/test_proxy_server.py +51 -4
  222. fastmcp-2.11.0/tests/server/proxy/test_stateful_proxy_client.py +148 -0
  223. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/test_context.py +78 -24
  224. fastmcp-2.11.0/tests/server/test_experimental_openapi_feature_flag.py +98 -0
  225. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/test_mount.py +6 -4
  226. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/test_server.py +213 -1
  227. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/test_server_interactions.py +272 -1
  228. fastmcp-2.11.0/tests/server/test_tool_transformation.py +40 -0
  229. fastmcp-2.11.0/tests/test_mcp_config.py +586 -0
  230. fastmcp-2.11.0/tests/tools/__init__.py +0 -0
  231. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/tools/test_tool.py +98 -0
  232. fastmcp-2.11.0/tests/tools/test_tool_future_annotations.py +170 -0
  233. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/tools/test_tool_manager.py +80 -0
  234. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/tools/test_tool_transform.py +180 -2
  235. fastmcp-2.11.0/tests/utilities/openapi/test_nullable_fields.py +243 -0
  236. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/utilities/test_json_schema.py +59 -14
  237. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/utilities/test_json_schema_type.py +55 -0
  238. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/utilities/test_types.py +75 -0
  239. {fastmcp-2.10.5 → fastmcp-2.11.0}/uv.lock +478 -202
  240. fastmcp-2.10.5/docs/clients/logging.mdx +0 -76
  241. fastmcp-2.10.5/docs/integrations/eunomia-authorization.mdx +0 -108
  242. fastmcp-2.10.5/docs/integrations/fastapi.mdx +0 -229
  243. fastmcp-2.10.5/docs/python-sdk/fastmcp-cli-cli.mdx +0 -87
  244. fastmcp-2.10.5/docs/python-sdk/fastmcp-cli-run.mdx +0 -106
  245. fastmcp-2.10.5/docs/python-sdk/fastmcp-client-auth-oauth.mdx +0 -102
  246. fastmcp-2.10.5/docs/python-sdk/fastmcp-client-client.mdx +0 -94
  247. fastmcp-2.10.5/docs/python-sdk/fastmcp-client-logging.mdx +0 -14
  248. fastmcp-2.10.5/docs/python-sdk/fastmcp-client-progress.mdx +0 -8
  249. fastmcp-2.10.5/docs/python-sdk/fastmcp-exceptions.mdx +0 -65
  250. fastmcp-2.10.5/docs/python-sdk/fastmcp-prompts-prompt.mdx +0 -84
  251. fastmcp-2.10.5/docs/python-sdk/fastmcp-prompts-prompt_manager.mdx +0 -43
  252. fastmcp-2.10.5/docs/python-sdk/fastmcp-resources-resource.mdx +0 -90
  253. fastmcp-2.10.5/docs/python-sdk/fastmcp-resources-template.mdx +0 -104
  254. fastmcp-2.10.5/docs/python-sdk/fastmcp-resources-types.mdx +0 -83
  255. fastmcp-2.10.5/docs/python-sdk/fastmcp-server-auth-auth.mdx +0 -10
  256. fastmcp-2.10.5/docs/python-sdk/fastmcp-server-auth-providers-bearer.mdx +0 -69
  257. fastmcp-2.10.5/docs/python-sdk/fastmcp-server-auth-providers-in_memory.mdx +0 -15
  258. fastmcp-2.10.5/docs/python-sdk/fastmcp-server-context.mdx +0 -118
  259. fastmcp-2.10.5/docs/python-sdk/fastmcp-server-middleware-logging.mdx +0 -29
  260. fastmcp-2.10.5/docs/python-sdk/fastmcp-server-middleware-middleware.mdx +0 -56
  261. fastmcp-2.10.5/docs/python-sdk/fastmcp-server-middleware-rate_limiting.mdx +0 -47
  262. fastmcp-2.10.5/docs/python-sdk/fastmcp-server-middleware-timing.mdx +0 -29
  263. fastmcp-2.10.5/docs/python-sdk/fastmcp-server-middleware.mdx +0 -56
  264. fastmcp-2.10.5/docs/python-sdk/fastmcp-server-openapi.mdx +0 -58
  265. fastmcp-2.10.5/docs/python-sdk/fastmcp-server-proxy.mdx +0 -101
  266. fastmcp-2.10.5/docs/python-sdk/fastmcp-settings.mdx +0 -59
  267. fastmcp-2.10.5/docs/python-sdk/fastmcp-tools-tool.mdx +0 -68
  268. fastmcp-2.10.5/docs/python-sdk/fastmcp-tools-tool_manager.mdx +0 -58
  269. fastmcp-2.10.5/docs/python-sdk/fastmcp-tools-tool_transform.mdx +0 -139
  270. fastmcp-2.10.5/docs/python-sdk/fastmcp-utilities-cache.mdx +0 -30
  271. fastmcp-2.10.5/docs/python-sdk/fastmcp-utilities-components.mdx +0 -52
  272. fastmcp-2.10.5/docs/python-sdk/fastmcp-utilities-inspect.mdx +0 -41
  273. fastmcp-2.10.5/docs/python-sdk/fastmcp-utilities-mcp_config.mdx +0 -50
  274. fastmcp-2.10.5/docs/python-sdk/fastmcp-utilities-openapi.mdx +0 -118
  275. fastmcp-2.10.5/docs/python-sdk/fastmcp-utilities-types.mdx +0 -112
  276. fastmcp-2.10.5/docs/servers/auth/bearer.mdx +0 -238
  277. fastmcp-2.10.5/src/fastmcp/server/auth/__init__.py +0 -4
  278. fastmcp-2.10.5/src/fastmcp/server/auth/auth.py +0 -60
  279. fastmcp-2.10.5/src/fastmcp/server/auth/providers/bearer_env.py +0 -63
  280. fastmcp-2.10.5/src/fastmcp/utilities/cache.py +0 -26
  281. fastmcp-2.10.5/src/fastmcp/utilities/json_schema.py +0 -175
  282. fastmcp-2.10.5/tests/auth/providers/test_bearer_env.py +0 -91
  283. fastmcp-2.10.5/tests/auth/providers/test_token_verifier.py +0 -179
  284. fastmcp-2.10.5/tests/auth/test_oauth_client.py +0 -267
  285. fastmcp-2.10.5/tests/client/test_openapi.py +0 -166
  286. fastmcp-2.10.5/tests/utilities/test_cache.py +0 -233
  287. fastmcp-2.10.5/tests/utilities/test_mcp_config.py +0 -286
  288. {fastmcp-2.10.5 → fastmcp-2.11.0}/.ccignore +0 -0
  289. {fastmcp-2.10.5 → fastmcp-2.11.0}/.cursor/rules/core-mcp-objects.mdc +0 -0
  290. {fastmcp-2.10.5 → fastmcp-2.11.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  291. {fastmcp-2.10.5 → fastmcp-2.11.0}/.github/ISSUE_TEMPLATE/enhancement.yml +0 -0
  292. {fastmcp-2.10.5 → fastmcp-2.11.0}/.github/dependabot.yml +0 -0
  293. {fastmcp-2.10.5 → fastmcp-2.11.0}/.github/labeler.yml +0 -0
  294. {fastmcp-2.10.5 → fastmcp-2.11.0}/.github/workflows/labeler.yml +0 -0
  295. {fastmcp-2.10.5 → fastmcp-2.11.0}/.github/workflows/publish.yml +0 -0
  296. {fastmcp-2.10.5 → fastmcp-2.11.0}/.gitignore +0 -0
  297. {fastmcp-2.10.5 → fastmcp-2.11.0}/AGENTS.md +0 -0
  298. {fastmcp-2.10.5 → fastmcp-2.11.0}/CLAUDE.md +0 -0
  299. {fastmcp-2.10.5 → fastmcp-2.11.0}/LICENSE +0 -0
  300. {fastmcp-2.10.5 → fastmcp-2.11.0}/README_OPENAPI.md +0 -0
  301. {fastmcp-2.10.5 → fastmcp-2.11.0}/Windows_Notes.md +0 -0
  302. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/.cursor/rules/mintlify.mdc +0 -0
  303. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/assets/favicon.svg +0 -0
  304. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/assets/images/tutorial-rest-api-result.png +0 -0
  305. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/assets/updates/release-2-7.png +0 -0
  306. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/clients/auth/bearer.mdx +0 -0
  307. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/clients/client.mdx +0 -0
  308. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/clients/elicitation.mdx +0 -0
  309. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/clients/messages.mdx +0 -0
  310. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/clients/progress.mdx +0 -0
  311. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/clients/roots.mdx +0 -0
  312. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/clients/sampling.mdx +0 -0
  313. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/community/README.md +0 -0
  314. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/community/showcase.mdx +0 -0
  315. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/css/banner.css +0 -0
  316. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/css/python-sdk.css +0 -0
  317. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/css/style.css +0 -0
  318. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/css/version-badge.css +0 -0
  319. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/getting-started/installation.mdx +0 -0
  320. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/getting-started/quickstart.mdx +0 -0
  321. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/getting-started/welcome.mdx +0 -0
  322. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/integrations/chatgpt.mdx +0 -0
  323. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/integrations/cursor-install-mcp.png +0 -0
  324. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/integrations/gemini.mdx +0 -0
  325. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/integrations/starlette.mdx +0 -0
  326. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/patterns/contrib.mdx +0 -0
  327. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/patterns/decorating-methods.mdx +0 -0
  328. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/patterns/http-requests.mdx +0 -0
  329. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/patterns/testing.mdx +0 -0
  330. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-cli-__init__.mdx +0 -0
  331. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-client-__init__.mdx +0 -0
  332. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-client-auth-__init__.mdx +0 -0
  333. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-prompts-__init__.mdx +0 -0
  334. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-resources-__init__.mdx +0 -0
  335. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-__init__.mdx +0 -0
  336. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-auth-__init__.mdx +0 -0
  337. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-auth-providers-__init__.mdx +0 -0
  338. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-middleware-__init__.mdx +0 -0
  339. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-tools-__init__.mdx +0 -0
  340. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-utilities-__init__.mdx +0 -0
  341. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/servers/composition.mdx +0 -0
  342. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/servers/elicitation.mdx +0 -0
  343. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/servers/progress.mdx +0 -0
  344. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/snippets/local-focus.mdx +0 -0
  345. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/snippets/version-badge.mdx +0 -0
  346. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/snippets/youtube-embed.mdx +0 -0
  347. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/tutorials/create-mcp-server.mdx +0 -0
  348. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/tutorials/mcp.mdx +0 -0
  349. {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/updates.mdx +0 -0
  350. {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/atproto_mcp/README.md +0 -0
  351. {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/atproto_mcp/demo.py +0 -0
  352. {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/atproto_mcp/pyproject.toml +0 -0
  353. {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/atproto_mcp/src/atproto_mcp/__init__.py +0 -0
  354. {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/atproto_mcp/src/atproto_mcp/__main__.py +0 -0
  355. {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/atproto_mcp/src/atproto_mcp/_atproto/__init__.py +0 -0
  356. {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/atproto_mcp/src/atproto_mcp/_atproto/_client.py +0 -0
  357. {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/atproto_mcp/src/atproto_mcp/_atproto/_posts.py +0 -0
  358. {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/atproto_mcp/src/atproto_mcp/_atproto/_profile.py +0 -0
  359. {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/atproto_mcp/src/atproto_mcp/_atproto/_read.py +0 -0
  360. {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/atproto_mcp/src/atproto_mcp/_atproto/_social.py +0 -0
  361. {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/atproto_mcp/src/atproto_mcp/py.typed +0 -0
  362. {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/atproto_mcp/src/atproto_mcp/server.py +0 -0
  363. {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/atproto_mcp/src/atproto_mcp/settings.py +0 -0
  364. {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/atproto_mcp/src/atproto_mcp/types.py +0 -0
  365. {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/complex_inputs.py +0 -0
  366. {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/config_server.py +0 -0
  367. {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/desktop.py +0 -0
  368. {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/echo.py +0 -0
  369. {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/get_file.py +0 -0
  370. {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/in_memory_proxy_example.py +0 -0
  371. {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/memory.py +0 -0
  372. {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/mount_example.py +0 -0
  373. {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/sampling.py +0 -0
  374. {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/screenshot.py +0 -0
  375. {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/serializer.py +0 -0
  376. {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/simple_echo.py +0 -0
  377. {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/smart_home/README.md +0 -0
  378. {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/smart_home/pyproject.toml +0 -0
  379. {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/smart_home/src/smart_home/__init__.py +0 -0
  380. {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/smart_home/src/smart_home/__main__.py +0 -0
  381. {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/smart_home/src/smart_home/hub.py +0 -0
  382. {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/smart_home/src/smart_home/lights/__init__.py +0 -0
  383. {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/smart_home/src/smart_home/lights/hue_utils.py +0 -0
  384. {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/smart_home/src/smart_home/lights/server.py +0 -0
  385. {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/smart_home/src/smart_home/py.typed +0 -0
  386. {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/smart_home/src/smart_home/settings.py +0 -0
  387. {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/smart_home/uv.lock +0 -0
  388. {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/tags_example.py +0 -0
  389. {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/text_me.py +0 -0
  390. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/cli/__init__.py +0 -0
  391. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/cli/claude.py +0 -0
  392. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/cli/install/shared.py +0 -0
  393. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/client/auth/__init__.py +0 -0
  394. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/client/auth/bearer.py +0 -0
  395. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/client/client.py +0 -0
  396. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/client/elicitation.py +0 -0
  397. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/client/logging.py +0 -0
  398. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/client/messages.py +0 -0
  399. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/client/progress.py +0 -0
  400. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/client/roots.py +0 -0
  401. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/client/sampling.py +0 -0
  402. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/contrib/README.md +0 -0
  403. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
  404. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
  405. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
  406. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
  407. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/contrib/component_manager/README.md +0 -0
  408. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/contrib/component_manager/__init__.py +0 -0
  409. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/contrib/component_manager/component_manager.py +0 -0
  410. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/contrib/component_manager/component_service.py +0 -0
  411. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/contrib/mcp_mixin/README.md +0 -0
  412. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
  413. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/contrib/mcp_mixin/example.py +0 -0
  414. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
  415. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/exceptions.py +0 -0
  416. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/prompts/__init__.py +0 -0
  417. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/py.typed +0 -0
  418. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/resources/__init__.py +0 -0
  419. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/resources/types.py +0 -0
  420. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/server/__init__.py +0 -0
  421. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/server/auth/providers/__init__.py +0 -0
  422. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/server/elicitation.py +0 -0
  423. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/server/low_level.py +0 -0
  424. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/server/middleware/__init__.py +0 -0
  425. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/server/middleware/error_handling.py +0 -0
  426. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/server/middleware/logging.py +0 -0
  427. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/server/middleware/rate_limiting.py +0 -0
  428. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/server/middleware/timing.py +0 -0
  429. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/tools/__init__.py +0 -0
  430. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/utilities/__init__.py +0 -0
  431. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/utilities/cli.py +0 -0
  432. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/utilities/exceptions.py +0 -0
  433. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/utilities/http.py +0 -0
  434. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/utilities/inspect.py +0 -0
  435. {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/utilities/logging.py +0 -0
  436. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/__init__.py +0 -0
  437. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/cli/__init__.py +0 -0
  438. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/cli/test_shared.py +0 -0
  439. {fastmcp-2.10.5/tests/auth → fastmcp-2.11.0/tests/client}/__init__.py +0 -0
  440. {fastmcp-2.10.5/tests/client → fastmcp-2.11.0/tests/client/auth}/__init__.py +0 -0
  441. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/client/test_elicitation.py +0 -0
  442. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/client/test_notifications.py +0 -0
  443. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/client/test_progress.py +0 -0
  444. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/client/test_roots.py +0 -0
  445. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/client/test_sse.py +0 -0
  446. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/client/test_stdio.py +0 -0
  447. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/client/test_streamable_http.py +0 -0
  448. {fastmcp-2.10.5/tests/integration_tests → fastmcp-2.11.0/tests/client/transports}/__init__.py +0 -0
  449. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/contrib/__init__.py +0 -0
  450. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/contrib/test_bulk_tool_caller.py +0 -0
  451. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/contrib/test_mcp_mixin.py +0 -0
  452. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/deprecated/__init__.py +0 -0
  453. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/deprecated/test_deprecated.py +0 -0
  454. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/deprecated/test_mount_import_arg_order.py +0 -0
  455. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/deprecated/test_mount_separators.py +0 -0
  456. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/deprecated/test_proxy_client.py +0 -0
  457. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/deprecated/test_resource_prefixes.py +0 -0
  458. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/deprecated/test_route_type_ignore.py +0 -0
  459. {fastmcp-2.10.5/tests/prompts → fastmcp-2.11.0/tests/experimental}/__init__.py +0 -0
  460. {fastmcp-2.10.5/tests/resources → fastmcp-2.11.0/tests/experimental/server}/__init__.py +0 -0
  461. {fastmcp-2.10.5/tests/server → fastmcp-2.11.0/tests/experimental/utilities}/__init__.py +0 -0
  462. {fastmcp-2.10.5/tests/server/http → fastmcp-2.11.0/tests/integration_tests}/__init__.py +0 -0
  463. {fastmcp-2.10.5/tests/server/middleware → fastmcp-2.11.0/tests/prompts}/__init__.py +0 -0
  464. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/prompts/test_prompt_manager.py +0 -0
  465. {fastmcp-2.10.5/tests/server/openapi → fastmcp-2.11.0/tests/resources}/__init__.py +0 -0
  466. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/resources/test_file_resources.py +0 -0
  467. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/resources/test_function_resources.py +0 -0
  468. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/resources/test_resource_manager.py +0 -0
  469. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/resources/test_resource_template.py +0 -0
  470. {fastmcp-2.10.5/tests/server/proxy → fastmcp-2.11.0/tests/server}/__init__.py +0 -0
  471. {fastmcp-2.10.5/tests/tools → fastmcp-2.11.0/tests/server/http}/__init__.py +0 -0
  472. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/http/test_custom_routes.py +0 -0
  473. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/http/test_http_dependencies.py +0 -0
  474. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/http/test_http_middleware.py +0 -0
  475. /fastmcp-2.10.5/tests/conftest.py → /fastmcp-2.11.0/tests/server/middleware/__init__.py +0 -0
  476. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/middleware/test_error_handling.py +0 -0
  477. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/middleware/test_logging.py +0 -0
  478. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/middleware/test_rate_limiting.py +0 -0
  479. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/middleware/test_timing.py +0 -0
  480. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/openapi/conftest.py +0 -0
  481. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/openapi/test_advanced_behavior.py +0 -0
  482. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/openapi/test_configuration.py +0 -0
  483. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/openapi/test_deepobject_style.py +0 -0
  484. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/openapi/test_description_propagation.py +0 -0
  485. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/openapi/test_explode_integration.py +0 -0
  486. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/openapi/test_openapi_compatibility.py +0 -0
  487. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/openapi/test_parameter_collisions.py +0 -0
  488. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/openapi/test_route_map_fn.py +0 -0
  489. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/test_app_state.py +0 -0
  490. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/test_auth_integration.py +0 -0
  491. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/test_file_server.py +0 -0
  492. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/test_import_server.py +0 -0
  493. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/test_logging.py +0 -0
  494. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/test_resource_prefix_formats.py +0 -0
  495. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/test_run_server.py +0 -0
  496. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/test_tool_annotations.py +0 -0
  497. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/test_tool_exclude_args.py +0 -0
  498. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/test_examples.py +0 -0
  499. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/utilities/__init__.py +0 -0
  500. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/utilities/openapi/__init__.py +0 -0
  501. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/utilities/openapi/conftest.py +0 -0
  502. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/utilities/openapi/test_openapi.py +0 -0
  503. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/utilities/openapi/test_openapi_advanced.py +0 -0
  504. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/utilities/openapi/test_openapi_fastapi.py +0 -0
  505. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/utilities/openapi/test_openapi_output_schemas.py +0 -0
  506. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/utilities/test_inspect.py +0 -0
  507. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/utilities/test_logging.py +0 -0
  508. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/utilities/test_tests.py +0 -0
  509. {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/utilities/test_typeadapter.py +0 -0
@@ -7,6 +7,19 @@ body:
7
7
  attributes:
8
8
  value: Thank you for contributing to FastMCP! 🙏
9
9
 
10
+ - type: markdown
11
+ attributes:
12
+ value: |
13
+ ## Before you submit 📝
14
+
15
+ To help us help you, please:
16
+
17
+ - 🔄 **Make sure you're testing on the latest version of FastMCP** - many issues are already fixed in newer versions
18
+ - 🔍 **Check if someone else has already reported this issue** or if it's been fixed on the main branch
19
+ - 📋 **You MUST include a copy/pasteable and properly formatted MRE** (minimal reproducible example) below or your issue may be closed without response
20
+
21
+ Thanks for helping make FastMCP better! 🚀
22
+
10
23
  - type: textarea
11
24
  id: description
12
25
  attributes:
@@ -7,9 +7,6 @@ changelog:
7
7
  - title: New Features 🎉
8
8
  labels:
9
9
  - feature
10
- exclude:
11
- labels:
12
- - contrib
13
10
 
14
11
  - title: Enhancements 🔧
15
12
  labels:
@@ -17,7 +14,6 @@ changelog:
17
14
  exclude:
18
15
  labels:
19
16
  - breaking change
20
- - contrib
21
17
 
22
18
  - title: Fixes 🐞
23
19
  labels:
@@ -44,3 +44,5 @@ jobs:
44
44
  run: uv sync --dev
45
45
  - name: Run pre-commit
46
46
  uses: pre-commit/action@v3.0.1
47
+ env:
48
+ SKIP: no-commit-to-branch
@@ -46,7 +46,31 @@ jobs:
46
46
  - name: Install FastMCP
47
47
  run: uv sync --locked
48
48
 
49
- - name: Run tests
50
- run: uv run pytest tests
49
+ - name: Run tests (excluding integration and client_process)
50
+ run: uv run pytest tests -m "not integration and not client_process"
51
+
52
+ - name: Run client process tests separately
53
+ run: uv run pytest tests -m "client_process" -x
54
+
55
+ run_integration_tests:
56
+ name: "Run integration tests"
57
+ runs-on: ubuntu-latest
58
+ timeout-minutes: 10
59
+
60
+ steps:
61
+ - uses: actions/checkout@v4
62
+
63
+ - name: Install uv
64
+ uses: astral-sh/setup-uv@v6
65
+ with:
66
+ enable-cache: true
67
+ cache-dependency-glob: "uv.lock"
68
+ python-version: "3.10"
69
+
70
+ - name: Install FastMCP
71
+ run: uv sync --locked
72
+
73
+ - name: Run integration tests
74
+ run: uv run pytest tests -m "integration"
51
75
  env:
52
76
  FASTMCP_GITHUB_TOKEN: ${{ secrets.FASTMCP_GITHUB_TOKEN }}
@@ -27,3 +27,9 @@ repos:
27
27
  hooks:
28
28
  - id: pyright-pretty
29
29
  files: ^src/|^tests/
30
+
31
+ - repo: https://github.com/pre-commit/pre-commit-hooks
32
+ rev: v4.3.0
33
+ hooks:
34
+ - id: no-commit-to-branch
35
+ args: [--branch, main]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fastmcp
3
- Version: 2.10.5
3
+ Version: 2.11.0
4
4
  Summary: The fast, Pythonic way to build MCP servers and clients.
5
5
  Project-URL: Homepage, https://gofastmcp.com
6
6
  Project-URL: Repository, https://github.com/jlowin/fastmcp
@@ -22,6 +22,7 @@ Requires-Dist: cyclopts>=3.0.0
22
22
  Requires-Dist: exceptiongroup>=1.2.2
23
23
  Requires-Dist: httpx>=0.28.1
24
24
  Requires-Dist: mcp>=1.10.0
25
+ Requires-Dist: openapi-core>=0.19.5
25
26
  Requires-Dist: openapi-pydantic>=0.5.1
26
27
  Requires-Dist: pydantic[email]>=2.11.7
27
28
  Requires-Dist: pyperclip>=1.9.0
@@ -38,7 +39,7 @@ Description-Content-Type: text/markdown
38
39
 
39
40
  <strong>The fast, Pythonic way to build MCP servers and clients.</strong>
40
41
 
41
- *FastMCP is made with 💙 by [Prefect](https://www.prefect.io/)*
42
+ *Made with ☕️ by [Prefect](https://www.prefect.io/)*
42
43
 
43
44
  [![Docs](https://img.shields.io/badge/docs-gofastmcp.com-blue)](https://gofastmcp.com)
44
45
  [![PyPI - Version](https://img.shields.io/pypi/v/fastmcp.svg)](https://pypi.org/project/fastmcp)
@@ -341,7 +342,7 @@ Learn more in the [**Composition Documentation**](https://gofastmcp.com/patterns
341
342
 
342
343
  Automatically generate FastMCP servers from existing OpenAPI specifications (`FastMCP.from_openapi()`) or FastAPI applications (`FastMCP.from_fastapi()`), instantly bringing your web APIs to the MCP ecosystem.
343
344
 
344
- Learn more: [**OpenAPI Integration**](https://gofastmcp.com/servers/openapi#openapi-integration) | [**FastAPI Integration**](https://gofastmcp.com/deployment/asgi#fastapi-integration).
345
+ Learn more: [**OpenAPI Integration**](https://gofastmcp.com/integrations/openapi) | [**FastAPI Integration**](https://gofastmcp.com/integrations/fastapi).
345
346
 
346
347
  ### Authentication & Security
347
348
 
@@ -5,7 +5,7 @@
5
5
 
6
6
  <strong>The fast, Pythonic way to build MCP servers and clients.</strong>
7
7
 
8
- *FastMCP is made with 💙 by [Prefect](https://www.prefect.io/)*
8
+ *Made with ☕️ by [Prefect](https://www.prefect.io/)*
9
9
 
10
10
  [![Docs](https://img.shields.io/badge/docs-gofastmcp.com-blue)](https://gofastmcp.com)
11
11
  [![PyPI - Version](https://img.shields.io/pypi/v/fastmcp.svg)](https://pypi.org/project/fastmcp)
@@ -308,7 +308,7 @@ Learn more in the [**Composition Documentation**](https://gofastmcp.com/patterns
308
308
 
309
309
  Automatically generate FastMCP servers from existing OpenAPI specifications (`FastMCP.from_openapi()`) or FastAPI applications (`FastMCP.from_fastapi()`), instantly bringing your web APIs to the MCP ecosystem.
310
310
 
311
- Learn more: [**OpenAPI Integration**](https://gofastmcp.com/servers/openapi#openapi-integration) | [**FastAPI Integration**](https://gofastmcp.com/deployment/asgi#fastapi-integration).
311
+ Learn more: [**OpenAPI Integration**](https://gofastmcp.com/integrations/openapi) | [**FastAPI Integration**](https://gofastmcp.com/integrations/fastapi).
312
312
 
313
313
  ### Authentication & Security
314
314
 
@@ -0,0 +1,2 @@
1
+ changelog.mdx
2
+ python-sdk/
@@ -2,6 +2,191 @@
2
2
  icon: "list-check"
3
3
  ---
4
4
 
5
+ <Update label="v2.10.6" description="2025-07-19">
6
+
7
+ ## [v2.10.6: Hymn for the Weekend](https://github.com/jlowin/fastmcp/releases/tag/v2.10.6)
8
+
9
+ A special Saturday release with many fixes.
10
+
11
+ ## What's Changed
12
+ ### Enhancements 🔧
13
+ * Resolve #1139 -- Implement include_context argument in Context.sample by [@codingjoe](https://github.com/codingjoe) in [#1141](https://github.com/jlowin/fastmcp/pull/1141)
14
+ * feat(settings): add log level normalization by [@ka2048](https://github.com/ka2048) in [#1171](https://github.com/jlowin/fastmcp/pull/1171)
15
+ * add server name to mounted server warnings by [@artificial-aidan](https://github.com/artificial-aidan) in [#1147](https://github.com/jlowin/fastmcp/pull/1147)
16
+ * Add StatefulProxyClient by [@hopeful0](https://github.com/hopeful0) in [#1109](https://github.com/jlowin/fastmcp/pull/1109)
17
+ ### Fixes 🐞
18
+ * Fix OpenAPI empty parameters by [@FabrizioSandri](https://github.com/FabrizioSandri) in [#1128](https://github.com/jlowin/fastmcp/pull/1128)
19
+ * Fix title field preservation in tool transformations by [@jlowin](https://github.com/jlowin) in [#1131](https://github.com/jlowin/fastmcp/pull/1131)
20
+ * Fix optional parameter validation in OpenAPI integration by [@jlowin](https://github.com/jlowin) in [#1135](https://github.com/jlowin/fastmcp/pull/1135)
21
+ * Do not silently exclude the "context" key from JSON body by [@melkamar](https://github.com/melkamar) in [#1153](https://github.com/jlowin/fastmcp/pull/1153)
22
+ * Fix tool output schema generation to respect Pydantic serialization aliases by [@zzstoatzz](https://github.com/zzstoatzz) in [#1148](https://github.com/jlowin/fastmcp/pull/1148)
23
+ * fix: _replace_ref_with_defs; ensure ref_path is string by [@itaru2622](https://github.com/itaru2622) in [#1164](https://github.com/jlowin/fastmcp/pull/1164)
24
+ * Fix nesting when making OpenAPI arrays and objects optional by [@melkamar](https://github.com/melkamar) in [#1178](https://github.com/jlowin/fastmcp/pull/1178)
25
+ * Fix `mcp-json` output format to include server name by [@jlowin](https://github.com/jlowin) in [#1185](https://github.com/jlowin/fastmcp/pull/1185)
26
+ * Only configure logging one time by [@jlowin](https://github.com/jlowin) in [#1187](https://github.com/jlowin/fastmcp/pull/1187)
27
+ ### Docs 📚
28
+ * Update changelog.mdx by [@jlowin](https://github.com/jlowin) in [#1127](https://github.com/jlowin/fastmcp/pull/1127)
29
+ * Eunomia Authorization with native FastMCP's Middleware by [@tommitt](https://github.com/tommitt) in [#1144](https://github.com/jlowin/fastmcp/pull/1144)
30
+ * update api ref for new `mdxify` version by [@zzstoatzz](https://github.com/zzstoatzz) in [#1182](https://github.com/jlowin/fastmcp/pull/1182)
31
+ ### Other Changes 🦾
32
+ * Expand empty parameter filtering and add comprehensive tests by [@jlowin](https://github.com/jlowin) in [#1129](https://github.com/jlowin/fastmcp/pull/1129)
33
+ * Add no-commit-to-branch hook by [@zzstoatzz](https://github.com/zzstoatzz) in [#1149](https://github.com/jlowin/fastmcp/pull/1149)
34
+ * Update README.md by [@jlowin](https://github.com/jlowin) in [#1165](https://github.com/jlowin/fastmcp/pull/1165)
35
+ * skip on rate limit by [@zzstoatzz](https://github.com/zzstoatzz) in [#1183](https://github.com/jlowin/fastmcp/pull/1183)
36
+ * Remove deprecated proxy creation by [@jlowin](https://github.com/jlowin) in [#1186](https://github.com/jlowin/fastmcp/pull/1186)
37
+ * Separate integration tests from unit tests in CI by [@jlowin](https://github.com/jlowin) in [#1188](https://github.com/jlowin/fastmcp/pull/1188)
38
+
39
+ ## New Contributors
40
+ * [@FabrizioSandri](https://github.com/FabrizioSandri) made their first contribution in [#1128](https://github.com/jlowin/fastmcp/pull/1128)
41
+ * [@melkamar](https://github.com/melkamar) made their first contribution in [#1153](https://github.com/jlowin/fastmcp/pull/1153)
42
+ * [@codingjoe](https://github.com/codingjoe) made their first contribution in [#1141](https://github.com/jlowin/fastmcp/pull/1141)
43
+ * [@itaru2622](https://github.com/itaru2622) made their first contribution in [#1164](https://github.com/jlowin/fastmcp/pull/1164)
44
+ * [@ka2048](https://github.com/ka2048) made their first contribution in [#1171](https://github.com/jlowin/fastmcp/pull/1171)
45
+ * [@artificial-aidan](https://github.com/artificial-aidan) made their first contribution in [#1147](https://github.com/jlowin/fastmcp/pull/1147)
46
+
47
+ **Full Changelog**: [v2.10.5...v2.10.6](https://github.com/jlowin/fastmcp/compare/v2.10.5...v2.10.6)
48
+
49
+ </Update>
50
+
51
+ <Update label="v2.10.5" description="2025-07-11">
52
+
53
+ ## [v2.10.5: Middle Management](https://github.com/jlowin/fastmcp/releases/tag/v2.10.5)
54
+
55
+ A maintenance release focused on OpenAPI refinements and middleware fixes, plus console improvements.
56
+
57
+ ## What's Changed
58
+ ### Enhancements 🔧
59
+ * Fix Claude Code CLI detection for npm global installations by [@jlowin](https://github.com/jlowin) in [#1106](https://github.com/jlowin/fastmcp/pull/1106)
60
+ * Fix OpenAPI parameter name collisions with location suffixing by [@jlowin](https://github.com/jlowin) in [#1107](https://github.com/jlowin/fastmcp/pull/1107)
61
+ * Add mirrored component support for proxy servers by [@jlowin](https://github.com/jlowin) in [#1105](https://github.com/jlowin/fastmcp/pull/1105)
62
+ ### Fixes 🐞
63
+ * Fix OpenAPI deepObject style parameter encoding by [@jlowin](https://github.com/jlowin) in [#1122](https://github.com/jlowin/fastmcp/pull/1122)
64
+ * xfail when github token is not set ('' or None) by [@jlowin](https://github.com/jlowin) in [#1123](https://github.com/jlowin/fastmcp/pull/1123)
65
+ * fix: replace oneOf with anyOf in OpenAPI output schemas by [@MagnusS0](https://github.com/MagnusS0) in [#1119](https://github.com/jlowin/fastmcp/pull/1119)
66
+ * Fix middleware list result types by [@jlowin](https://github.com/jlowin) in [#1125](https://github.com/jlowin/fastmcp/pull/1125)
67
+ * Improve console width for logo by [@jlowin](https://github.com/jlowin) in [#1126](https://github.com/jlowin/fastmcp/pull/1126)
68
+ ### Docs 📚
69
+ * Improve transport + integration docs by [@jlowin](https://github.com/jlowin) in [#1103](https://github.com/jlowin/fastmcp/pull/1103)
70
+ * Update proxy.mdx by [@coldfire-x](https://github.com/coldfire-x) in [#1108](https://github.com/jlowin/fastmcp/pull/1108)
71
+ ### Other Changes 🦾
72
+ * Update github remote server tests with secret by [@jlowin](https://github.com/jlowin) in [#1112](https://github.com/jlowin/fastmcp/pull/1112)
73
+
74
+ ## New Contributors
75
+ * [@coldfire-x](https://github.com/coldfire-x) made their first contribution in [#1108](https://github.com/jlowin/fastmcp/pull/1108)
76
+ * [@MagnusS0](https://github.com/MagnusS0) made their first contribution in [#1119](https://github.com/jlowin/fastmcp/pull/1119)
77
+
78
+ **Full Changelog**: [v2.10.4...v2.10.5](https://github.com/jlowin/fastmcp/compare/v2.10.4...v2.10.5)
79
+
80
+ </Update>
81
+
82
+ <Update label="v2.10.4" description="2025-07-09">
83
+
84
+ ## [v2.10.4: Transport-ation](https://github.com/jlowin/fastmcp/releases/tag/v2.10.4)
85
+
86
+ A quick fix to ensure the CLI accepts "streamable-http" as a valid transport option.
87
+
88
+ ## What's Changed
89
+ ### Fixes 🐞
90
+ * Ensure the CLI accepts "streamable-http" as a valid transport by [@jlowin](https://github.com/jlowin) in [#1099](https://github.com/jlowin/fastmcp/pull/1099)
91
+
92
+ **Full Changelog**: [v2.10.3...v2.10.4](https://github.com/jlowin/fastmcp/compare/v2.10.3...v2.10.4)
93
+
94
+ </Update>
95
+
96
+ <Update label="v2.10.3" description="2025-07-09">
97
+
98
+ ## [v2.10.3: CLI Me a River](https://github.com/jlowin/fastmcp/releases/tag/v2.10.3)
99
+
100
+ A major CLI overhaul featuring a complete refactor from typer to cyclopts, new IDE integrations, and comprehensive OpenAPI improvements.
101
+
102
+ ## What's Changed
103
+ ### New Features 🎉
104
+ * Refactor CLI from typer to cyclopts and add comprehensive tests by [@jlowin](https://github.com/jlowin) in [#1062](https://github.com/jlowin/fastmcp/pull/1062)
105
+ * Add output schema support for OpenAPI tools by [@jlowin](https://github.com/jlowin) in [#1073](https://github.com/jlowin/fastmcp/pull/1073)
106
+ ### Enhancements 🔧
107
+ * Add Cursor support via CLI integration by [@jlowin](https://github.com/jlowin) in [#1052](https://github.com/jlowin/fastmcp/pull/1052)
108
+ * Add Claude Code install integration by [@jlowin](https://github.com/jlowin) in [#1053](https://github.com/jlowin/fastmcp/pull/1053)
109
+ * Generate MCP JSON config output from CLI as new `fastmcp install` command by [@jlowin](https://github.com/jlowin) in [#1056](https://github.com/jlowin/fastmcp/pull/1056)
110
+ * Use isawaitable instead of iscoroutine by [@jlowin](https://github.com/jlowin) in [#1059](https://github.com/jlowin/fastmcp/pull/1059)
111
+ * feat: Add `--path` Option to CLI for HTTP/SSE Route by [@davidbk-legit](https://github.com/davidbk-legit) in [#1087](https://github.com/jlowin/fastmcp/pull/1087)
112
+ * Fix concurrent proxy client operations with session isolation by [@jlowin](https://github.com/jlowin) in [#1083](https://github.com/jlowin/fastmcp/pull/1083)
113
+ ### Fixes 🐞
114
+ * Refactor Client context management to avoid concurrency issue by [@hopeful0](https://github.com/hopeful0) in [#1054](https://github.com/jlowin/fastmcp/pull/1054)
115
+ * Keep json schema $defs on transform by [@strawgate](https://github.com/strawgate) in [#1066](https://github.com/jlowin/fastmcp/pull/1066)
116
+ * Ensure fastmcp version copy is plaintext by [@jlowin](https://github.com/jlowin) in [#1071](https://github.com/jlowin/fastmcp/pull/1071)
117
+ * Fix single-element list unwrapping in tool content by [@jlowin](https://github.com/jlowin) in [#1074](https://github.com/jlowin/fastmcp/pull/1074)
118
+ * Fix max recursion error when pruning OpenAPI definitions by [@dimitribarbot](https://github.com/dimitribarbot) in [#1092](https://github.com/jlowin/fastmcp/pull/1092)
119
+ * Fix OpenAPI tool name registration when modified by mcp_component_fn by [@jlowin](https://github.com/jlowin) in [#1096](https://github.com/jlowin/fastmcp/pull/1096)
120
+ ### Docs 📚
121
+ * Docs: add example of more concise way to use bearer auth by [@neilconway](https://github.com/neilconway) in [#1055](https://github.com/jlowin/fastmcp/pull/1055)
122
+ * Update favicon by [@jlowin](https://github.com/jlowin) in [#1058](https://github.com/jlowin/fastmcp/pull/1058)
123
+ * Update environment note by [@jlowin](https://github.com/jlowin) in [#1075](https://github.com/jlowin/fastmcp/pull/1075)
124
+ * Add fastmcp version --copy documentation by [@jlowin](https://github.com/jlowin) in [#1076](https://github.com/jlowin/fastmcp/pull/1076)
125
+ ### Other Changes 🦾
126
+ * Remove asserts and add documentation following #1054 by [@jlowin](https://github.com/jlowin) in [#1057](https://github.com/jlowin/fastmcp/pull/1057)
127
+ * Add --copy flag for fastmcp version by [@jlowin](https://github.com/jlowin) in [#1063](https://github.com/jlowin/fastmcp/pull/1063)
128
+ * Fix docstring format for fastmcp.client.Client by [@neilconway](https://github.com/neilconway) in [#1094](https://github.com/jlowin/fastmcp/pull/1094)
129
+
130
+ ## New Contributors
131
+ * [@neilconway](https://github.com/neilconway) made their first contribution in [#1055](https://github.com/jlowin/fastmcp/pull/1055)
132
+ * [@davidbk-legit](https://github.com/davidbk-legit) made their first contribution in [#1087](https://github.com/jlowin/fastmcp/pull/1087)
133
+ * [@dimitribarbot](https://github.com/dimitribarbot) made their first contribution in [#1092](https://github.com/jlowin/fastmcp/pull/1092)
134
+
135
+ **Full Changelog**: [v2.10.2...v2.10.3](https://github.com/jlowin/fastmcp/compare/v2.10.2...v2.10.3)
136
+
137
+ </Update>
138
+
139
+ <Update label="v2.10.2" description="2025-07-05">
140
+
141
+ ## [v2.10.2: Forward March](https://github.com/jlowin/fastmcp/releases/tag/v2.10.2)
142
+
143
+ The headline feature of this release is the ability to "forward" advanced MCP interactions like logging, progress, and elicitation through proxy servers. If the remote server requests an elicitation, the proxy client will pass that request to the new, "ultimate" client.
144
+
145
+ ## What's Changed
146
+ ### New Features 🎉
147
+ * Proxy support advanced MCP features by [@hopeful0](https://github.com/hopeful0) in [#1022](https://github.com/jlowin/fastmcp/pull/1022)
148
+ ### Enhancements 🔧
149
+ * Re-add splash screen by [@jlowin](https://github.com/jlowin) in [#1027](https://github.com/jlowin/fastmcp/pull/1027)
150
+ * Reduce banner padding by [@jlowin](https://github.com/jlowin) in [#1030](https://github.com/jlowin/fastmcp/pull/1030)
151
+ * Allow per-server timeouts in MCPConfig by [@cegersdoerfer](https://github.com/cegersdoerfer) in [#1031](https://github.com/jlowin/fastmcp/pull/1031)
152
+ * Support 'scp' claim for OAuth scopes in BearerAuthProvider by [@jlowin](https://github.com/jlowin) in [#1033](https://github.com/jlowin/fastmcp/pull/1033)
153
+ * Add path expansion to image/audio/file by [@jlowin](https://github.com/jlowin) in [#1038](https://github.com/jlowin/fastmcp/pull/1038)
154
+ * Ensure multi-client configurations use new ProxyClient by [@jlowin](https://github.com/jlowin) in [#1045](https://github.com/jlowin/fastmcp/pull/1045)
155
+ ### Fixes 🐞
156
+ * Expose stateless_http kwarg for mcp.run() by [@jlowin](https://github.com/jlowin) in [#1018](https://github.com/jlowin/fastmcp/pull/1018)
157
+ * Avoid propagating logs by [@jlowin](https://github.com/jlowin) in [#1042](https://github.com/jlowin/fastmcp/pull/1042)
158
+ ### Docs 📚
159
+ * Clean up docs by [@jlowin](https://github.com/jlowin) in [#1028](https://github.com/jlowin/fastmcp/pull/1028)
160
+ * Docs: clarify server URL paths for ChatGPT integration by [@thap2331](https://github.com/thap2331) in [#1017](https://github.com/jlowin/fastmcp/pull/1017)
161
+ ### Other Changes 🦾
162
+ * Split giant openapi test file into smaller files by [@jlowin](https://github.com/jlowin) in [#1034](https://github.com/jlowin/fastmcp/pull/1034)
163
+ * Add comprehensive OpenAPI 3.0 vs 3.1 compatibility tests by [@jlowin](https://github.com/jlowin) in [#1035](https://github.com/jlowin/fastmcp/pull/1035)
164
+ * Update banner and use console.log by [@jlowin](https://github.com/jlowin) in [#1041](https://github.com/jlowin/fastmcp/pull/1041)
165
+
166
+ ## New Contributors
167
+ * [@cegersdoerfer](https://github.com/cegersdoerfer) made their first contribution in [#1031](https://github.com/jlowin/fastmcp/pull/1031)
168
+ * [@hopeful0](https://github.com/hopeful0) made their first contribution in [#1022](https://github.com/jlowin/fastmcp/pull/1022)
169
+ * [@thap2331](https://github.com/thap2331) made their first contribution in [#1017](https://github.com/jlowin/fastmcp/pull/1017)
170
+
171
+ **Full Changelog**: [v2.10.1...v2.10.2](https://github.com/jlowin/fastmcp/compare/v2.10.1...v2.10.2)
172
+
173
+ </Update>
174
+
175
+ <Update label="v2.10.1" description="2025-07-02">
176
+
177
+ ## [v2.10.1: Revert to Sender](https://github.com/jlowin/fastmcp/releases/tag/v2.10.1)
178
+
179
+ A quick patch to revert the CLI banner that was added in v2.10.0.
180
+
181
+ ## What's Changed
182
+ ### Docs 📚
183
+ * Update changelog.mdx by [@jlowin](https://github.com/jlowin) in [#1009](https://github.com/jlowin/fastmcp/pull/1009)
184
+ * Revert "Add CLI banner" by [@jlowin](https://github.com/jlowin) in [#1011](https://github.com/jlowin/fastmcp/pull/1011)
185
+
186
+ **Full Changelog**: [v2.10.0...v2.10.1](https://github.com/jlowin/fastmcp/compare/v2.10.0...v2.10.1)
187
+
188
+ </Update>
189
+
5
190
  <Update label="v2.10.0" description="2024-07-01">
6
191
 
7
192
  ## [v2.10.0: Great Spec-tations](https://github.com/jlowin/fastmcp/releases/tag/v2.10.0)
@@ -55,6 +55,7 @@ async with Client("https://fastmcp.cloud/mcp", auth=oauth) as client:
55
55
  - **`client_name`** (`str`, optional): Client name for dynamic registration. Defaults to `"FastMCP Client"`
56
56
  - **`token_storage_cache_dir`** (`Path`, optional): Token cache directory. Defaults to `~/.fastmcp/oauth-mcp-client-cache/`
57
57
  - **`additional_client_metadata`** (`dict[str, Any]`, optional): Extra metadata for client registration
58
+ - **`callback_port`** (`int`, optional): Fixed port for OAuth callback server. If not specified, uses a random available port
58
59
 
59
60
 
60
61
  ## OAuth Flow
@@ -72,7 +73,7 @@ If no valid tokens exist, the client attempts to discover the OAuth server's end
72
73
  If the OAuth server supports it and the client isn't already registered (or credentials aren't cached), the client performs dynamic client registration according to RFC 7591.
73
74
  </Step>
74
75
  <Step title="Local Callback Server">
75
- A temporary local HTTP server is started on an available port. This server's address (e.g., `http://127.0.0.1:<port>/callback`) acts as the `redirect_uri` for the OAuth flow.
76
+ A temporary local HTTP server is started on an available port (or the port specified via `callback_port`). This server's address (e.g., `http://127.0.0.1:<port>/callback`) acts as the `redirect_uri` for the OAuth flow.
76
77
  </Step>
77
78
  <Step title="Browser Interaction">
78
79
  The user's default web browser is automatically opened, directing them to the OAuth server's authorization endpoint. The user logs in and grants (or denies) the requested `scopes`.
@@ -0,0 +1,111 @@
1
+ ---
2
+ title: Server Logging
3
+ sidebarTitle: Logging
4
+ description: Receive and handle log messages from MCP servers.
5
+ icon: receipt
6
+ ---
7
+
8
+ import { VersionBadge } from '/snippets/version-badge.mdx'
9
+
10
+ <VersionBadge version="2.0.0" />
11
+
12
+ MCP servers can emit log messages to clients. The client can handle these logs through a log handler callback.
13
+
14
+ ## Log Handler
15
+
16
+ Provide a `log_handler` function when creating the client. For robust logging, the log messages can be integrated with Python's standard `logging` module.
17
+
18
+ ```python
19
+ import logging
20
+ from fastmcp import Client
21
+ from fastmcp.client.logging import LogMessage
22
+
23
+ # In a real app, you might configure this in your main entry point
24
+ logging.basicConfig(
25
+ level=logging.INFO,
26
+ format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
27
+ )
28
+
29
+ # Get a logger for the module where the client is used
30
+ logger = logging.getLogger(__name__)
31
+
32
+ # This mapping is useful for converting MCP level strings to Python's levels
33
+ LOGGING_LEVEL_MAP = logging.getLevelNamesMapping()
34
+
35
+ async def log_handler(message: LogMessage):
36
+ """
37
+ Handles incoming logs from the MCP server and forwards them
38
+ to the standard Python logging system.
39
+ """
40
+ msg = message.data.get('msg')
41
+ extra = message.data.get('extra')
42
+
43
+ # Convert the MCP log level to a Python log level
44
+ level = LOGGING_LEVEL_MAP.get(message.level.upper(), logging.INFO)
45
+
46
+ # Log the message using the standard logging library
47
+ logger.log(level, msg, extra=extra)
48
+
49
+
50
+ client = Client(
51
+ "my_mcp_server.py",
52
+ log_handler=log_handler,
53
+ )
54
+ ```
55
+
56
+ ## Handling Structured Logs
57
+
58
+ The `message.data` attribute is a dictionary that contains the log payload from the server. This enables structured logging, allowing you to receive rich, contextual information.
59
+
60
+ The dictionary contains two keys:
61
+ - `msg`: The string log message.
62
+ - `extra`: A dictionary containing any extra data sent from the server.
63
+
64
+ This structure is preserved even when logs are forwarded through a FastMCP proxy, making it a powerful tool for debugging complex, multi-server applications.
65
+
66
+ ### Handler Parameters
67
+
68
+ The `log_handler` is called every time a log message is received. It receives a `LogMessage` object:
69
+
70
+ <Card icon="code" title="Log Handler Parameters">
71
+ <ResponseField name="LogMessage" type="Log Message Object">
72
+ <Expandable title="attributes">
73
+ <ResponseField name="level" type='Literal["debug", "info", "notice", "warning", "error", "critical", "alert", "emergency"]'>
74
+ The log level
75
+ </ResponseField>
76
+
77
+ <ResponseField name="logger" type="str | None">
78
+ The logger name (optional, may be None)
79
+ </ResponseField>
80
+
81
+ <ResponseField name="data" type="dict">
82
+ The log payload, containing `msg` and `extra` keys.
83
+ </ResponseField>
84
+ </Expandable>
85
+ </ResponseField>
86
+ </Card>
87
+
88
+ ```python
89
+ async def detailed_log_handler(message: LogMessage):
90
+ msg = message.data.get('msg')
91
+ extra = message.data.get('extra')
92
+
93
+ if message.level == "error":
94
+ print(f"ERROR: {msg} | Details: {extra}")
95
+ elif message.level == "warning":
96
+ print(f"WARNING: {msg} | Details: {extra}")
97
+ else:
98
+ print(f"{message.level.upper()}: {msg}")
99
+ ```
100
+
101
+ ## Default Log Handling
102
+
103
+ If you don't provide a custom `log_handler`, FastMCP uses a default handler that emits a DEBUG-level FastMCP log for every log message received from the server, which is useful for visibility without polluting your own logs.
104
+
105
+ ```python
106
+ client = Client("my_mcp_server.py")
107
+
108
+ async with client:
109
+ # Server logs will be emitted at DEBUG level automatically
110
+ await client.call_tool("some_tool")
111
+ ```
@@ -25,8 +25,37 @@ async with client:
25
25
  print(f"Description: {prompt.description}")
26
26
  if prompt.arguments:
27
27
  print(f"Arguments: {[arg.name for arg in prompt.arguments]}")
28
+ # Access tags and other metadata
29
+ if hasattr(prompt, '_meta') and prompt._meta:
30
+ fastmcp_meta = prompt._meta.get('_fastmcp', {})
31
+ print(f"Tags: {fastmcp_meta.get('tags', [])}")
28
32
  ```
29
33
 
34
+ ### Filtering by Tags
35
+
36
+ <VersionBadge version="2.11.0" />
37
+
38
+ You can use the `meta` field to filter prompts based on their tags:
39
+
40
+ ```python
41
+ async with client:
42
+ prompts = await client.list_prompts()
43
+
44
+ # Filter prompts by tag
45
+ analysis_prompts = [
46
+ prompt for prompt in prompts
47
+ if hasattr(prompt, '_meta') and prompt._meta and
48
+ prompt._meta.get('_fastmcp', {}) and
49
+ 'analysis' in prompt._meta.get('_fastmcp', {}).get('tags', [])
50
+ ]
51
+
52
+ print(f"Found {len(analysis_prompts)} analysis prompts")
53
+ ```
54
+
55
+ <Note>
56
+ The `_meta` field is part of the standard MCP specification. FastMCP servers include tags and other metadata within a `_fastmcp` namespace (e.g., `_meta._fastmcp.tags`) to avoid conflicts with user-defined metadata. This behavior can be controlled with the server's `include_fastmcp_meta` setting - when disabled, the `_fastmcp` namespace won't be included. Other MCP server implementations may not provide this metadata structure.
57
+ </Note>
58
+
30
59
  ## Using Prompts
31
60
 
32
61
  ### Basic Usage
@@ -34,6 +34,10 @@ async with client:
34
34
  print(f"Name: {resource.name}")
35
35
  print(f"Description: {resource.description}")
36
36
  print(f"MIME Type: {resource.mimeType}")
37
+ # Access tags and other metadata
38
+ if hasattr(resource, '_meta') and resource._meta:
39
+ fastmcp_meta = resource._meta.get('_fastmcp', {})
40
+ print(f"Tags: {fastmcp_meta.get('tags', [])}")
37
41
  ```
38
42
 
39
43
  ### Resource Templates
@@ -49,8 +53,37 @@ async with client:
49
53
  print(f"Template URI: {template.uriTemplate}")
50
54
  print(f"Name: {template.name}")
51
55
  print(f"Description: {template.description}")
56
+ # Access tags and other metadata
57
+ if hasattr(template, '_meta') and template._meta:
58
+ fastmcp_meta = template._meta.get('_fastmcp', {})
59
+ print(f"Tags: {fastmcp_meta.get('tags', [])}")
52
60
  ```
53
61
 
62
+ ### Filtering by Tags
63
+
64
+ <VersionBadge version="2.11.0" />
65
+
66
+ You can use the `meta` field to filter resources based on their tags:
67
+
68
+ ```python
69
+ async with client:
70
+ resources = await client.list_resources()
71
+
72
+ # Filter resources by tag
73
+ config_resources = [
74
+ resource for resource in resources
75
+ if hasattr(resource, '_meta') and resource._meta and
76
+ resource._meta.get('_fastmcp', {}) and
77
+ 'config' in resource._meta.get('_fastmcp', {}).get('tags', [])
78
+ ]
79
+
80
+ print(f"Found {len(config_resources)} config resources")
81
+ ```
82
+
83
+ <Note>
84
+ The `_meta` field is part of the standard MCP specification. FastMCP servers include tags and other metadata within a `_fastmcp` namespace (e.g., `_meta._fastmcp.tags`) to avoid conflicts with user-defined metadata. This behavior can be controlled with the server's `include_fastmcp_meta` setting - when disabled, the `_fastmcp` namespace won't be included. Other MCP server implementations may not provide this metadata structure.
85
+ </Note>
86
+
54
87
  ## Reading Resources
55
88
 
56
89
  ### Static Resources
@@ -25,8 +25,37 @@ async with client:
25
25
  print(f"Description: {tool.description}")
26
26
  if tool.inputSchema:
27
27
  print(f"Parameters: {tool.inputSchema}")
28
+ # Access tags and other metadata
29
+ if hasattr(tool, '_meta') and tool._meta:
30
+ fastmcp_meta = tool._meta.get('_fastmcp', {})
31
+ print(f"Tags: {fastmcp_meta.get('tags', [])}")
28
32
  ```
29
33
 
34
+ ### Filtering by Tags
35
+
36
+ <VersionBadge version="2.11.0" />
37
+
38
+ You can use the `meta` field to filter tools based on their tags:
39
+
40
+ ```python
41
+ async with client:
42
+ tools = await client.list_tools()
43
+
44
+ # Filter tools by tag
45
+ analysis_tools = [
46
+ tool for tool in tools
47
+ if hasattr(tool, '_meta') and tool._meta and
48
+ tool._meta.get('_fastmcp', {}) and
49
+ 'analysis' in tool._meta.get('_fastmcp', {}).get('tags', [])
50
+ ]
51
+
52
+ print(f"Found {len(analysis_tools)} analysis tools")
53
+ ```
54
+
55
+ <Note>
56
+ The `_meta` field is part of the standard MCP specification. FastMCP servers include tags and other metadata within a `_fastmcp` namespace (e.g., `_meta._fastmcp.tags`) to avoid conflicts with user-defined metadata. This behavior can be controlled with the server's `include_fastmcp_meta` setting - when disabled, the `_fastmcp` namespace won't be included. Other MCP server implementations may not provide this metadata structure.
57
+ </Note>
58
+
30
59
  ## Executing Tools
31
60
 
32
61
  ### Basic Execution