fastmcp 2.10.6__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 (478) hide show
  1. {fastmcp-2.10.6 → fastmcp-2.11.0}/.github/ISSUE_TEMPLATE/bug.yml +13 -0
  2. {fastmcp-2.10.6 → fastmcp-2.11.0}/.github/release.yml +0 -4
  3. {fastmcp-2.10.6 → fastmcp-2.11.0}/.github/workflows/run-tests.yml +5 -2
  4. {fastmcp-2.10.6 → fastmcp-2.11.0}/PKG-INFO +4 -3
  5. {fastmcp-2.10.6 → fastmcp-2.11.0}/README.md +2 -2
  6. fastmcp-2.11.0/docs/.ccignore +2 -0
  7. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/changelog.mdx +46 -0
  8. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/clients/auth/oauth.mdx +2 -1
  9. fastmcp-2.11.0/docs/clients/logging.mdx +111 -0
  10. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/clients/prompts.mdx +29 -0
  11. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/clients/resources.mdx +33 -0
  12. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/clients/tools.mdx +29 -0
  13. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/clients/transports.mdx +73 -0
  14. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/deployment/running-server.mdx +36 -0
  15. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/docs.json +14 -22
  16. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/integrations/anthropic.mdx +8 -8
  17. fastmcp-2.11.0/docs/integrations/authkit.mdx +103 -0
  18. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/integrations/claude-code.mdx +46 -6
  19. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/integrations/claude-desktop.mdx +65 -6
  20. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/integrations/cursor.mdx +65 -8
  21. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/integrations/eunomia-authorization.mdx +17 -21
  22. fastmcp-2.11.0/docs/integrations/fastapi.mdx +446 -0
  23. fastmcp-2.11.0/docs/integrations/images/authkit/enable_dcr.png +0 -0
  24. fastmcp-2.11.0/docs/integrations/images/permit/abac_condition_example.png +0 -0
  25. fastmcp-2.11.0/docs/integrations/images/permit/abac_policy_example.png +0 -0
  26. fastmcp-2.11.0/docs/integrations/images/permit/policy_mapping.png +0 -0
  27. fastmcp-2.11.0/docs/integrations/images/permit/role_assignement.png +0 -0
  28. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/integrations/mcp-json-configuration.mdx +56 -0
  29. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/integrations/openai.mdx +8 -8
  30. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/integrations/openapi.mdx +57 -0
  31. fastmcp-2.11.0/docs/integrations/permit.mdx +353 -0
  32. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/patterns/cli.mdx +91 -8
  33. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/patterns/tool-transformation.mdx +85 -1
  34. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-cli-cli.mdx +10 -9
  35. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-cli-install-claude_code.mdx +4 -1
  36. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-cli-install-claude_desktop.mdx +4 -1
  37. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-cli-install-cursor.mdx +4 -1
  38. fastmcp-2.10.6/docs/python-sdk/fastmcp-cli-install-mcp_config.mdx → fastmcp-2.11.0/docs/python-sdk/fastmcp-cli-install-mcp_json.mdx +10 -7
  39. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-cli-run.mdx +42 -8
  40. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-client-transports.mdx +3 -3
  41. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-mcp_config.mdx +73 -35
  42. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-context.mdx +52 -24
  43. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-proxy.mdx +58 -33
  44. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-server.mdx +68 -50
  45. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-settings.mdx +25 -12
  46. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-tools-tool.mdx +15 -15
  47. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-tools-tool_manager.mdx +37 -10
  48. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-tools-tool_transform.mdx +51 -6
  49. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-utilities-json_schema.mdx +1 -1
  50. fastmcp-2.11.0/docs/python-sdk/fastmcp-utilities-mcp_config.mdx +28 -0
  51. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-utilities-openapi.mdx +15 -16
  52. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-utilities-tests.mdx +2 -2
  53. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-utilities-types.mdx +19 -17
  54. fastmcp-2.11.0/docs/servers/auth/authentication.mdx +167 -0
  55. fastmcp-2.11.0/docs/servers/auth/full-oauth-server.mdx +128 -0
  56. fastmcp-2.11.0/docs/servers/auth/remote-authentication.mdx +146 -0
  57. fastmcp-2.11.0/docs/servers/auth/token-verification.mdx +210 -0
  58. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/servers/context.mdx +46 -0
  59. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/servers/logging.mdx +45 -3
  60. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/servers/middleware.mdx +68 -4
  61. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/servers/prompts.mdx +9 -2
  62. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/servers/proxy.mdx +11 -12
  63. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/servers/resources.mdx +73 -15
  64. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/servers/server.mdx +36 -34
  65. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/servers/tools.mdx +113 -50
  66. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/tutorials/rest-api.mdx +2 -2
  67. {fastmcp-2.10.6 → fastmcp-2.11.0}/justfile +1 -1
  68. {fastmcp-2.10.6 → fastmcp-2.11.0}/pyproject.toml +3 -1
  69. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/cli/cli.py +128 -33
  70. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/cli/install/claude_code.py +42 -1
  71. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/cli/install/claude_desktop.py +42 -1
  72. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/cli/install/cursor.py +42 -1
  73. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/cli/install/mcp_json.py +41 -0
  74. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/cli/run.py +127 -1
  75. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/client/__init__.py +2 -0
  76. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/client/auth/oauth.py +68 -99
  77. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/client/oauth_callback.py +18 -0
  78. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/client/transports.py +69 -15
  79. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/contrib/component_manager/example.py +2 -2
  80. fastmcp-2.11.0/src/fastmcp/experimental/server/openapi/README.md +266 -0
  81. fastmcp-2.11.0/src/fastmcp/experimental/server/openapi/__init__.py +38 -0
  82. fastmcp-2.11.0/src/fastmcp/experimental/server/openapi/components.py +348 -0
  83. fastmcp-2.11.0/src/fastmcp/experimental/server/openapi/routing.py +132 -0
  84. fastmcp-2.11.0/src/fastmcp/experimental/server/openapi/server.py +466 -0
  85. fastmcp-2.11.0/src/fastmcp/experimental/utilities/openapi/README.md +239 -0
  86. fastmcp-2.11.0/src/fastmcp/experimental/utilities/openapi/__init__.py +68 -0
  87. fastmcp-2.11.0/src/fastmcp/experimental/utilities/openapi/director.py +208 -0
  88. fastmcp-2.11.0/src/fastmcp/experimental/utilities/openapi/formatters.py +355 -0
  89. fastmcp-2.11.0/src/fastmcp/experimental/utilities/openapi/json_schema_converter.py +340 -0
  90. fastmcp-2.11.0/src/fastmcp/experimental/utilities/openapi/models.py +85 -0
  91. fastmcp-2.11.0/src/fastmcp/experimental/utilities/openapi/parser.py +618 -0
  92. fastmcp-2.11.0/src/fastmcp/experimental/utilities/openapi/schemas.py +538 -0
  93. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/mcp_config.py +125 -88
  94. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/prompts/prompt.py +11 -1
  95. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/resources/resource.py +21 -1
  96. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/resources/template.py +20 -1
  97. fastmcp-2.11.0/src/fastmcp/server/auth/__init__.py +19 -0
  98. fastmcp-2.11.0/src/fastmcp/server/auth/auth.py +197 -0
  99. fastmcp-2.11.0/src/fastmcp/server/auth/providers/bearer.py +25 -0
  100. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/server/auth/providers/in_memory.py +4 -2
  101. fastmcp-2.10.6/src/fastmcp/server/auth/providers/bearer.py → fastmcp-2.11.0/src/fastmcp/server/auth/providers/jwt.py +207 -142
  102. fastmcp-2.11.0/src/fastmcp/server/auth/providers/workos.py +170 -0
  103. fastmcp-2.11.0/src/fastmcp/server/auth/registry.py +52 -0
  104. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/server/context.py +107 -26
  105. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/server/dependencies.py +9 -2
  106. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/server/http.py +62 -30
  107. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/server/middleware/middleware.py +3 -23
  108. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/server/openapi.py +1 -1
  109. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/server/proxy.py +50 -11
  110. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/server/server.py +168 -59
  111. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/settings.py +73 -6
  112. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/tools/tool.py +36 -3
  113. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/tools/tool_manager.py +38 -2
  114. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/tools/tool_transform.py +112 -3
  115. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/utilities/components.py +35 -2
  116. fastmcp-2.11.0/src/fastmcp/utilities/json_schema.py +213 -0
  117. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/utilities/json_schema_type.py +1 -3
  118. fastmcp-2.11.0/src/fastmcp/utilities/mcp_config.py +28 -0
  119. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/utilities/openapi.py +240 -50
  120. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/utilities/tests.py +54 -6
  121. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/utilities/types.py +89 -11
  122. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/cli/test_cli.py +210 -0
  123. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/cli/test_cursor.py +3 -0
  124. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/cli/test_install.py +92 -6
  125. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/cli/test_run.py +61 -0
  126. fastmcp-2.11.0/tests/cli/test_run_with_uv.py +240 -0
  127. fastmcp-2.11.0/tests/client/auth/test_oauth_client.py +128 -0
  128. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/client/test_client.py +12 -0
  129. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/client/test_logs.py +35 -5
  130. fastmcp-2.11.0/tests/client/test_openapi_experimental.py +201 -0
  131. fastmcp-2.11.0/tests/client/test_openapi_legacy.py +198 -0
  132. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/client/test_sampling.py +59 -4
  133. fastmcp-2.11.0/tests/client/transports/test_uv_transport.py +98 -0
  134. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/contrib/test_component_manager.py +6 -7
  135. fastmcp-2.11.0/tests/deprecated/test_bearer_auth_provider.py +13 -0
  136. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/deprecated/test_settings.py +2 -0
  137. fastmcp-2.11.0/tests/experimental/server/openapi/__init__.py +1 -0
  138. fastmcp-2.11.0/tests/experimental/server/openapi/test_comprehensive.py +706 -0
  139. fastmcp-2.11.0/tests/experimental/server/openapi/test_deepobject_style.py +338 -0
  140. fastmcp-2.11.0/tests/experimental/server/openapi/test_end_to_end_compatibility.py +323 -0
  141. fastmcp-2.11.0/tests/experimental/server/openapi/test_openapi_features.py +391 -0
  142. fastmcp-2.11.0/tests/experimental/server/openapi/test_parameter_collisions.py +215 -0
  143. fastmcp-2.11.0/tests/experimental/server/openapi/test_performance_comparison.py +291 -0
  144. fastmcp-2.11.0/tests/experimental/server/openapi/test_server.py +340 -0
  145. fastmcp-2.11.0/tests/experimental/server/test_openapi_performance.py +142 -0
  146. fastmcp-2.11.0/tests/experimental/utilities/openapi/__init__.py +1 -0
  147. fastmcp-2.11.0/tests/experimental/utilities/openapi/conftest.py +222 -0
  148. fastmcp-2.11.0/tests/experimental/utilities/openapi/test_director.py +462 -0
  149. fastmcp-2.11.0/tests/experimental/utilities/openapi/test_legacy_compatibility.py +333 -0
  150. fastmcp-2.11.0/tests/experimental/utilities/openapi/test_models.py +453 -0
  151. fastmcp-2.11.0/tests/experimental/utilities/openapi/test_nullable_fields.py +245 -0
  152. fastmcp-2.11.0/tests/experimental/utilities/openapi/test_parser.py +331 -0
  153. fastmcp-2.11.0/tests/experimental/utilities/openapi/test_schemas.py +532 -0
  154. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/prompts/test_prompt.py +15 -0
  155. fastmcp-2.11.0/tests/resources/test_resource_template_meta.py +25 -0
  156. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/resources/test_resources.py +20 -0
  157. fastmcp-2.10.6/tests/auth/providers/test_bearer.py → fastmcp-2.11.0/tests/server/auth/test_jwt_provider.py +61 -45
  158. fastmcp-2.11.0/tests/server/auth/test_static_token_verifier.py +89 -0
  159. fastmcp-2.11.0/tests/server/auth/test_workos.py +58 -0
  160. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/http/test_auth_setup.py +22 -20
  161. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/http/test_bearer_auth_backend.py +15 -15
  162. fastmcp-2.11.0/tests/server/http/test_http_auth_middleware.py +78 -0
  163. fastmcp-2.11.0/tests/server/middleware/__init__.py +0 -0
  164. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/middleware/test_middleware.py +166 -2
  165. fastmcp-2.11.0/tests/server/openapi/__init__.py +0 -0
  166. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/openapi/test_basic_functionality.py +2 -2
  167. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/openapi/test_optional_parameters.py +14 -14
  168. fastmcp-2.11.0/tests/server/proxy/__init__.py +0 -0
  169. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/proxy/test_proxy_client.py +58 -0
  170. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/proxy/test_proxy_server.py +51 -4
  171. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/proxy/test_stateful_proxy_client.py +28 -0
  172. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/test_context.py +78 -24
  173. fastmcp-2.11.0/tests/server/test_experimental_openapi_feature_flag.py +98 -0
  174. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/test_mount.py +0 -1
  175. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/test_server.py +213 -1
  176. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/test_server_interactions.py +272 -1
  177. fastmcp-2.11.0/tests/server/test_tool_transformation.py +40 -0
  178. fastmcp-2.11.0/tests/test_mcp_config.py +586 -0
  179. fastmcp-2.11.0/tests/tools/__init__.py +0 -0
  180. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/tools/test_tool.py +16 -0
  181. fastmcp-2.11.0/tests/tools/test_tool_future_annotations.py +170 -0
  182. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/tools/test_tool_manager.py +80 -0
  183. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/tools/test_tool_transform.py +95 -2
  184. fastmcp-2.11.0/tests/utilities/openapi/test_nullable_fields.py +243 -0
  185. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/utilities/test_json_schema.py +59 -14
  186. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/utilities/test_json_schema_type.py +55 -0
  187. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/utilities/test_types.py +75 -0
  188. {fastmcp-2.10.6 → fastmcp-2.11.0}/uv.lock +478 -202
  189. fastmcp-2.10.6/docs/clients/logging.mdx +0 -76
  190. fastmcp-2.10.6/docs/integrations/fastapi.mdx +0 -229
  191. fastmcp-2.10.6/docs/python-sdk/fastmcp-server-middleware.mdx +0 -56
  192. fastmcp-2.10.6/docs/python-sdk/fastmcp-utilities-cache.mdx +0 -30
  193. fastmcp-2.10.6/docs/python-sdk/fastmcp-utilities-mcp_config.mdx +0 -50
  194. fastmcp-2.10.6/docs/servers/auth/bearer.mdx +0 -238
  195. fastmcp-2.10.6/src/fastmcp/server/auth/__init__.py +0 -4
  196. fastmcp-2.10.6/src/fastmcp/server/auth/auth.py +0 -60
  197. fastmcp-2.10.6/src/fastmcp/server/auth/providers/bearer_env.py +0 -63
  198. fastmcp-2.10.6/src/fastmcp/utilities/cache.py +0 -26
  199. fastmcp-2.10.6/src/fastmcp/utilities/json_schema.py +0 -175
  200. fastmcp-2.10.6/tests/auth/providers/test_bearer_env.py +0 -91
  201. fastmcp-2.10.6/tests/auth/providers/test_token_verifier.py +0 -179
  202. fastmcp-2.10.6/tests/auth/test_oauth_client.py +0 -267
  203. fastmcp-2.10.6/tests/client/test_openapi.py +0 -166
  204. fastmcp-2.10.6/tests/utilities/test_cache.py +0 -233
  205. fastmcp-2.10.6/tests/utilities/test_mcp_config.py +0 -286
  206. {fastmcp-2.10.6 → fastmcp-2.11.0}/.ccignore +0 -0
  207. {fastmcp-2.10.6 → fastmcp-2.11.0}/.cursor/rules/core-mcp-objects.mdc +0 -0
  208. {fastmcp-2.10.6 → fastmcp-2.11.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  209. {fastmcp-2.10.6 → fastmcp-2.11.0}/.github/ISSUE_TEMPLATE/enhancement.yml +0 -0
  210. {fastmcp-2.10.6 → fastmcp-2.11.0}/.github/dependabot.yml +0 -0
  211. {fastmcp-2.10.6 → fastmcp-2.11.0}/.github/labeler.yml +0 -0
  212. {fastmcp-2.10.6 → fastmcp-2.11.0}/.github/workflows/labeler.yml +0 -0
  213. {fastmcp-2.10.6 → fastmcp-2.11.0}/.github/workflows/publish.yml +0 -0
  214. {fastmcp-2.10.6 → fastmcp-2.11.0}/.github/workflows/run-static.yml +0 -0
  215. {fastmcp-2.10.6 → fastmcp-2.11.0}/.gitignore +0 -0
  216. {fastmcp-2.10.6 → fastmcp-2.11.0}/.pre-commit-config.yaml +0 -0
  217. {fastmcp-2.10.6 → fastmcp-2.11.0}/AGENTS.md +0 -0
  218. {fastmcp-2.10.6 → fastmcp-2.11.0}/CLAUDE.md +0 -0
  219. {fastmcp-2.10.6 → fastmcp-2.11.0}/LICENSE +0 -0
  220. {fastmcp-2.10.6 → fastmcp-2.11.0}/README_OPENAPI.md +0 -0
  221. {fastmcp-2.10.6 → fastmcp-2.11.0}/Windows_Notes.md +0 -0
  222. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/.cursor/rules/mintlify.mdc +0 -0
  223. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/assets/favicon.svg +0 -0
  224. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/assets/images/tutorial-rest-api-result.png +0 -0
  225. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/assets/updates/release-2-7.png +0 -0
  226. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/clients/auth/bearer.mdx +0 -0
  227. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/clients/client.mdx +0 -0
  228. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/clients/elicitation.mdx +0 -0
  229. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/clients/messages.mdx +0 -0
  230. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/clients/progress.mdx +0 -0
  231. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/clients/roots.mdx +0 -0
  232. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/clients/sampling.mdx +0 -0
  233. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/community/README.md +0 -0
  234. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/community/showcase.mdx +0 -0
  235. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/css/banner.css +0 -0
  236. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/css/python-sdk.css +0 -0
  237. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/css/style.css +0 -0
  238. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/css/version-badge.css +0 -0
  239. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/getting-started/installation.mdx +0 -0
  240. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/getting-started/quickstart.mdx +0 -0
  241. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/getting-started/welcome.mdx +0 -0
  242. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/integrations/chatgpt.mdx +0 -0
  243. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/integrations/cursor-install-mcp.png +0 -0
  244. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/integrations/gemini.mdx +0 -0
  245. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/integrations/starlette.mdx +0 -0
  246. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/patterns/contrib.mdx +0 -0
  247. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/patterns/decorating-methods.mdx +0 -0
  248. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/patterns/http-requests.mdx +0 -0
  249. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/patterns/testing.mdx +0 -0
  250. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-cli-__init__.mdx +0 -0
  251. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-cli-claude.mdx +0 -0
  252. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-cli-install-__init__.mdx +0 -0
  253. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-cli-install-shared.mdx +0 -0
  254. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-client-__init__.mdx +0 -0
  255. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-client-auth-__init__.mdx +0 -0
  256. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-client-auth-bearer.mdx +0 -0
  257. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-client-auth-oauth.mdx +0 -0
  258. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-client-client.mdx +0 -0
  259. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-client-elicitation.mdx +0 -0
  260. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-client-logging.mdx +0 -0
  261. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-client-messages.mdx +0 -0
  262. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-client-oauth_callback.mdx +0 -0
  263. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-client-progress.mdx +0 -0
  264. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-client-roots.mdx +0 -0
  265. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-client-sampling.mdx +0 -0
  266. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-exceptions.mdx +0 -0
  267. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-prompts-__init__.mdx +0 -0
  268. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-prompts-prompt.mdx +0 -0
  269. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-prompts-prompt_manager.mdx +0 -0
  270. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-resources-__init__.mdx +0 -0
  271. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-resources-resource.mdx +0 -0
  272. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-resources-resource_manager.mdx +0 -0
  273. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-resources-template.mdx +0 -0
  274. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-resources-types.mdx +0 -0
  275. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-__init__.mdx +0 -0
  276. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-auth-__init__.mdx +0 -0
  277. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-auth-auth.mdx +0 -0
  278. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-auth-providers-__init__.mdx +0 -0
  279. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-auth-providers-bearer.mdx +0 -0
  280. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-auth-providers-bearer_env.mdx +0 -0
  281. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-auth-providers-in_memory.mdx +0 -0
  282. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-dependencies.mdx +0 -0
  283. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-elicitation.mdx +0 -0
  284. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-http.mdx +0 -0
  285. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-low_level.mdx +0 -0
  286. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-middleware-__init__.mdx +0 -0
  287. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-middleware-error_handling.mdx +0 -0
  288. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-middleware-logging.mdx +0 -0
  289. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-middleware-middleware.mdx +0 -0
  290. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-middleware-rate_limiting.mdx +0 -0
  291. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-middleware-timing.mdx +0 -0
  292. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-openapi.mdx +0 -0
  293. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-tools-__init__.mdx +0 -0
  294. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-utilities-__init__.mdx +0 -0
  295. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-utilities-cli.mdx +0 -0
  296. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-utilities-components.mdx +0 -0
  297. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-utilities-exceptions.mdx +0 -0
  298. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-utilities-http.mdx +0 -0
  299. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-utilities-inspect.mdx +0 -0
  300. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-utilities-json_schema_type.mdx +0 -0
  301. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-utilities-logging.mdx +0 -0
  302. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/servers/composition.mdx +0 -0
  303. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/servers/elicitation.mdx +0 -0
  304. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/servers/progress.mdx +0 -0
  305. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/servers/sampling.mdx +0 -0
  306. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/snippets/local-focus.mdx +0 -0
  307. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/snippets/version-badge.mdx +0 -0
  308. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/snippets/youtube-embed.mdx +0 -0
  309. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/tutorials/create-mcp-server.mdx +0 -0
  310. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/tutorials/mcp.mdx +0 -0
  311. {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/updates.mdx +0 -0
  312. {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/atproto_mcp/README.md +0 -0
  313. {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/atproto_mcp/demo.py +0 -0
  314. {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/atproto_mcp/pyproject.toml +0 -0
  315. {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/atproto_mcp/src/atproto_mcp/__init__.py +0 -0
  316. {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/atproto_mcp/src/atproto_mcp/__main__.py +0 -0
  317. {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/atproto_mcp/src/atproto_mcp/_atproto/__init__.py +0 -0
  318. {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/atproto_mcp/src/atproto_mcp/_atproto/_client.py +0 -0
  319. {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/atproto_mcp/src/atproto_mcp/_atproto/_posts.py +0 -0
  320. {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/atproto_mcp/src/atproto_mcp/_atproto/_profile.py +0 -0
  321. {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/atproto_mcp/src/atproto_mcp/_atproto/_read.py +0 -0
  322. {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/atproto_mcp/src/atproto_mcp/_atproto/_social.py +0 -0
  323. {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/atproto_mcp/src/atproto_mcp/py.typed +0 -0
  324. {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/atproto_mcp/src/atproto_mcp/server.py +0 -0
  325. {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/atproto_mcp/src/atproto_mcp/settings.py +0 -0
  326. {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/atproto_mcp/src/atproto_mcp/types.py +0 -0
  327. {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/complex_inputs.py +0 -0
  328. {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/config_server.py +0 -0
  329. {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/desktop.py +0 -0
  330. {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/echo.py +0 -0
  331. {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/get_file.py +0 -0
  332. {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/in_memory_proxy_example.py +0 -0
  333. {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/memory.py +0 -0
  334. {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/mount_example.py +0 -0
  335. {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/sampling.py +0 -0
  336. {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/screenshot.py +0 -0
  337. {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/serializer.py +0 -0
  338. {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/simple_echo.py +0 -0
  339. {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/smart_home/README.md +0 -0
  340. {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/smart_home/pyproject.toml +0 -0
  341. {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/smart_home/src/smart_home/__init__.py +0 -0
  342. {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/smart_home/src/smart_home/__main__.py +0 -0
  343. {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/smart_home/src/smart_home/hub.py +0 -0
  344. {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/smart_home/src/smart_home/lights/__init__.py +0 -0
  345. {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/smart_home/src/smart_home/lights/hue_utils.py +0 -0
  346. {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/smart_home/src/smart_home/lights/server.py +0 -0
  347. {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/smart_home/src/smart_home/py.typed +0 -0
  348. {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/smart_home/src/smart_home/settings.py +0 -0
  349. {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/smart_home/uv.lock +0 -0
  350. {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/tags_example.py +0 -0
  351. {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/text_me.py +0 -0
  352. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/__init__.py +0 -0
  353. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/cli/__init__.py +0 -0
  354. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/cli/claude.py +0 -0
  355. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/cli/install/__init__.py +0 -0
  356. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/cli/install/shared.py +0 -0
  357. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/client/auth/__init__.py +0 -0
  358. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/client/auth/bearer.py +0 -0
  359. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/client/client.py +0 -0
  360. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/client/elicitation.py +0 -0
  361. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/client/logging.py +0 -0
  362. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/client/messages.py +0 -0
  363. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/client/progress.py +0 -0
  364. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/client/roots.py +0 -0
  365. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/client/sampling.py +0 -0
  366. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/contrib/README.md +0 -0
  367. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
  368. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
  369. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
  370. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
  371. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/contrib/component_manager/README.md +0 -0
  372. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/contrib/component_manager/__init__.py +0 -0
  373. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/contrib/component_manager/component_manager.py +0 -0
  374. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/contrib/component_manager/component_service.py +0 -0
  375. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/contrib/mcp_mixin/README.md +0 -0
  376. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
  377. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/contrib/mcp_mixin/example.py +0 -0
  378. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
  379. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/exceptions.py +0 -0
  380. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/prompts/__init__.py +0 -0
  381. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/prompts/prompt_manager.py +0 -0
  382. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/py.typed +0 -0
  383. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/resources/__init__.py +0 -0
  384. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/resources/resource_manager.py +0 -0
  385. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/resources/types.py +0 -0
  386. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/server/__init__.py +0 -0
  387. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/server/auth/providers/__init__.py +0 -0
  388. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/server/elicitation.py +0 -0
  389. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/server/low_level.py +0 -0
  390. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/server/middleware/__init__.py +0 -0
  391. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/server/middleware/error_handling.py +0 -0
  392. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/server/middleware/logging.py +0 -0
  393. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/server/middleware/rate_limiting.py +0 -0
  394. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/server/middleware/timing.py +0 -0
  395. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/tools/__init__.py +0 -0
  396. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/utilities/__init__.py +0 -0
  397. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/utilities/cli.py +0 -0
  398. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/utilities/exceptions.py +0 -0
  399. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/utilities/http.py +0 -0
  400. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/utilities/inspect.py +0 -0
  401. {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/utilities/logging.py +0 -0
  402. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/__init__.py +0 -0
  403. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/cli/__init__.py +0 -0
  404. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/cli/test_shared.py +0 -0
  405. {fastmcp-2.10.6/tests/auth → fastmcp-2.11.0/tests/client}/__init__.py +0 -0
  406. {fastmcp-2.10.6/tests/client → fastmcp-2.11.0/tests/client/auth}/__init__.py +0 -0
  407. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/client/test_elicitation.py +0 -0
  408. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/client/test_notifications.py +0 -0
  409. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/client/test_progress.py +0 -0
  410. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/client/test_roots.py +0 -0
  411. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/client/test_sse.py +0 -0
  412. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/client/test_stdio.py +0 -0
  413. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/client/test_streamable_http.py +0 -0
  414. {fastmcp-2.10.6/tests/integration_tests → fastmcp-2.11.0/tests/client/transports}/__init__.py +0 -0
  415. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/conftest.py +0 -0
  416. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/contrib/__init__.py +0 -0
  417. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/contrib/test_bulk_tool_caller.py +0 -0
  418. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/contrib/test_mcp_mixin.py +0 -0
  419. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/deprecated/__init__.py +0 -0
  420. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/deprecated/test_deprecated.py +0 -0
  421. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/deprecated/test_mount_import_arg_order.py +0 -0
  422. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/deprecated/test_mount_separators.py +0 -0
  423. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/deprecated/test_proxy_client.py +0 -0
  424. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/deprecated/test_resource_prefixes.py +0 -0
  425. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/deprecated/test_route_type_ignore.py +0 -0
  426. {fastmcp-2.10.6/tests/prompts → fastmcp-2.11.0/tests/experimental}/__init__.py +0 -0
  427. {fastmcp-2.10.6/tests/resources → fastmcp-2.11.0/tests/experimental/server}/__init__.py +0 -0
  428. {fastmcp-2.10.6/tests/server → fastmcp-2.11.0/tests/experimental/utilities}/__init__.py +0 -0
  429. {fastmcp-2.10.6/tests/server/http → fastmcp-2.11.0/tests/integration_tests}/__init__.py +0 -0
  430. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/integration_tests/conftest.py +0 -0
  431. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/integration_tests/test_github_mcp_remote.py +0 -0
  432. {fastmcp-2.10.6/tests/server/middleware → fastmcp-2.11.0/tests/prompts}/__init__.py +0 -0
  433. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/prompts/test_prompt_manager.py +0 -0
  434. {fastmcp-2.10.6/tests/server/openapi → fastmcp-2.11.0/tests/resources}/__init__.py +0 -0
  435. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/resources/test_file_resources.py +0 -0
  436. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/resources/test_function_resources.py +0 -0
  437. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/resources/test_resource_manager.py +0 -0
  438. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/resources/test_resource_template.py +0 -0
  439. {fastmcp-2.10.6/tests/server/proxy → fastmcp-2.11.0/tests/server}/__init__.py +0 -0
  440. {fastmcp-2.10.6/tests/tools → fastmcp-2.11.0/tests/server/http}/__init__.py +0 -0
  441. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/http/test_custom_routes.py +0 -0
  442. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/http/test_http_dependencies.py +0 -0
  443. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/http/test_http_middleware.py +0 -0
  444. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/middleware/test_error_handling.py +0 -0
  445. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/middleware/test_logging.py +0 -0
  446. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/middleware/test_rate_limiting.py +0 -0
  447. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/middleware/test_timing.py +0 -0
  448. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/openapi/conftest.py +0 -0
  449. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/openapi/test_advanced_behavior.py +0 -0
  450. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/openapi/test_configuration.py +0 -0
  451. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/openapi/test_deepobject_style.py +0 -0
  452. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/openapi/test_description_propagation.py +0 -0
  453. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/openapi/test_explode_integration.py +0 -0
  454. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/openapi/test_openapi_compatibility.py +0 -0
  455. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/openapi/test_openapi_path_parameters.py +0 -0
  456. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/openapi/test_parameter_collisions.py +0 -0
  457. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/openapi/test_route_map_fn.py +0 -0
  458. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/test_app_state.py +0 -0
  459. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/test_auth_integration.py +0 -0
  460. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/test_file_server.py +0 -0
  461. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/test_import_server.py +0 -0
  462. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/test_logging.py +0 -0
  463. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/test_resource_prefix_formats.py +0 -0
  464. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/test_run_server.py +0 -0
  465. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/test_tool_annotations.py +0 -0
  466. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/test_tool_exclude_args.py +0 -0
  467. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/test_examples.py +0 -0
  468. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/utilities/__init__.py +0 -0
  469. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/utilities/openapi/__init__.py +0 -0
  470. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/utilities/openapi/conftest.py +0 -0
  471. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/utilities/openapi/test_openapi.py +0 -0
  472. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/utilities/openapi/test_openapi_advanced.py +0 -0
  473. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/utilities/openapi/test_openapi_fastapi.py +0 -0
  474. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/utilities/openapi/test_openapi_output_schemas.py +0 -0
  475. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/utilities/test_inspect.py +0 -0
  476. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/utilities/test_logging.py +0 -0
  477. {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/utilities/test_tests.py +0 -0
  478. {fastmcp-2.10.6 → 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:
@@ -46,8 +46,11 @@ jobs:
46
46
  - name: Install FastMCP
47
47
  run: uv sync --locked
48
48
 
49
- - name: Run tests (excluding integration)
50
- run: uv run pytest tests -m "not integration"
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
51
54
 
52
55
  run_integration_tests:
53
56
  name: "Run integration tests"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fastmcp
3
- Version: 2.10.6
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,52 @@
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
+
5
51
  <Update label="v2.10.5" description="2025-07-11">
6
52
 
7
53
  ## [v2.10.5: Middle Management](https://github.com/jlowin/fastmcp/releases/tag/v2.10.5)
@@ -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
@@ -180,6 +180,7 @@ FastMCP provides convenience transports that are thin wrappers around `StdioTran
180
180
 
181
181
  - **`PythonStdioTransport`** - Uses `python` command for `.py` files
182
182
  - **`NodeStdioTransport`** - Uses `node` command for `.js` files
183
+ - **`UvStdioTransport`** - Uses `uv` for Python packages (uses `env_vars` parameter)
183
184
  - **`UvxStdioTransport`** - Uses `uvx` for Python packages (uses `env_vars` parameter)
184
185
  - **`NpxStdioTransport`** - Uses `npx` for Node packages (uses `env_vars` parameter)
185
186
 
@@ -308,3 +309,75 @@ async with client:
308
309
  answer = await client.call_tool("assistant_ask", {"question": "What?"})
309
310
  ```
310
311
 
312
+ ### Tool Transformation with FastMCP and MCPConfig
313
+
314
+ FastMCP supports basic tool transformations to be defined alongside the MCP Servers in the MCPConfig file.
315
+
316
+ ```python
317
+ config = {
318
+ "mcpServers": {
319
+ "weather": {
320
+ "url": "https://weather.example.com/mcp",
321
+ "transport": "http",
322
+ "tools": { } # <--- This is the tool transformation section
323
+ }
324
+ }
325
+ }
326
+ ```
327
+
328
+ With these transformations, you can transform (change) the name, title, description, tags, enablement, and arguments of a tool.
329
+
330
+ For each argument the tool takes, you can transform (change) the name, description, default, visibility, whether it's required, and you can provide example values.
331
+
332
+ In the following example, we're transforming the `weather_get_forecast` tool to only retrieve the weather for `Miami` and hiding the `city` argument from the client.
333
+
334
+ ```python
335
+ tool_transformations = {
336
+ "weather_get_forecast": {
337
+ "name": "miami_weather",
338
+ "description": "Get the weather for Miami",
339
+ "arguments": {
340
+ "city": {
341
+ "name": "city",
342
+ "default": "Miami",
343
+ "hide": True,
344
+ }
345
+ }
346
+ }
347
+ }
348
+
349
+ config = {
350
+ "mcpServers": {
351
+ "weather": {
352
+ "url": "https://weather.example.com/mcp",
353
+ "transport": "http",
354
+ "tools": tool_transformations
355
+ }
356
+ }
357
+ }
358
+ ```
359
+
360
+ #### Allowlisting and Blocklisting Tools
361
+
362
+ Tools can be allowlisted or blocklisted from the client by applying `tags` to the tools on the server. In the following example, we're allowlisting only tools marked with the `forecast` tag, all other tools will be unavailable to the client.
363
+
364
+ ```python
365
+ tool_transformations = {
366
+ "weather_get_forecast": {
367
+ "enabled": True,
368
+ "tags": ["forecast"]
369
+ }
370
+ }
371
+
372
+
373
+ config = {
374
+ "mcpServers": {
375
+ "weather": {
376
+ "url": "https://weather.example.com/mcp",
377
+ "transport": "http",
378
+ "tools": tool_transformations,
379
+ "include_tags": ["forecast"]
380
+ }
381
+ }
382
+ }
383
+ ```
@@ -53,12 +53,48 @@ You can specify transport options and other configuration:
53
53
  fastmcp run server.py --transport sse --port 9000
54
54
  ```
55
55
 
56
+ ### Dependency Management with CLI
57
+
58
+ When using the FastMCP CLI, you can pass additional options to configure how `uv` runs your server:
59
+
60
+ ```bash
61
+ # Run with a specific Python version
62
+ fastmcp run server.py --python 3.11
63
+
64
+ # Run with additional packages
65
+ fastmcp run server.py --with pandas --with numpy
66
+
67
+ # Run with dependencies from a requirements file
68
+ fastmcp run server.py --with-requirements requirements.txt
69
+
70
+ # Combine multiple options
71
+ fastmcp run server.py --python 3.10 --with httpx --transport http
72
+
73
+ # Run within a specific project directory
74
+ fastmcp run server.py --project /path/to/project
75
+ ```
76
+
77
+ <Note>
78
+ When using `--python`, `--with`, `--project`, or `--with-requirements`, the server runs via `uv run` subprocess instead of using your local environment. The `uv` command will manage dependencies based on your project configuration.
79
+ </Note>
80
+
81
+ <Tip>
82
+ The `--python` option is particularly useful when you need to run a server with a specific Python version that differs from your system's default. This addresses common compatibility issues where servers require a particular Python version to function correctly.
83
+ </Tip>
84
+
56
85
  For development and testing, you can use the `dev` command to run your server with the MCP Inspector:
57
86
 
58
87
  ```bash
59
88
  fastmcp dev server.py
60
89
  ```
61
90
 
91
+ The `dev` command also supports the same dependency management options:
92
+
93
+ ```bash
94
+ # Dev server with specific Python version and packages
95
+ fastmcp dev server.py --python 3.11 --with pandas
96
+ ```
97
+
62
98
  See the [CLI documentation](/patterns/cli) for detailed information about all available commands and options.
63
99
 
64
100
  ### Passing Arguments to Servers
@@ -65,10 +65,7 @@
65
65
  {
66
66
  "group": "Essentials",
67
67
  "icon": "cube",
68
- "pages": [
69
- "servers/server",
70
- "deployment/running-server"
71
- ]
68
+ "pages": ["servers/server", "deployment/running-server"]
72
69
  },
73
70
  {
74
71
  "group": "Core Components",
@@ -97,7 +94,10 @@
97
94
  "group": "Authentication",
98
95
  "icon": "shield-check",
99
96
  "pages": [
100
- "servers/auth/bearer"
97
+ "servers/auth/authentication",
98
+ "servers/auth/token-verification",
99
+ "servers/auth/remote-authentication",
100
+ "servers/auth/full-oauth-server"
101
101
  ]
102
102
  }
103
103
  ]
@@ -108,10 +108,7 @@
108
108
  {
109
109
  "group": "Essentials",
110
110
  "icon": "cube",
111
- "pages": [
112
- "clients/client",
113
- "clients/transports"
114
- ]
111
+ "pages": ["clients/client", "clients/transports"]
115
112
  },
116
113
  {
117
114
  "group": "Core Operations",
@@ -137,10 +134,7 @@
137
134
  {
138
135
  "group": "Authentication",
139
136
  "icon": "user-shield",
140
- "pages": [
141
- "clients/auth/oauth",
142
- "clients/auth/bearer"
143
- ]
137
+ "pages": ["clients/auth/oauth", "clients/auth/bearer"]
144
138
  }
145
139
  ]
146
140
  },
@@ -158,7 +152,9 @@
158
152
  "integrations/mcp-json-configuration",
159
153
  "integrations/openai",
160
154
  "integrations/openapi",
161
- "integrations/starlette"
155
+ "integrations/permit",
156
+ "integrations/starlette",
157
+ "integrations/authkit"
162
158
  ]
163
159
  },
164
160
  {
@@ -185,17 +181,12 @@
185
181
  },
186
182
  {
187
183
  "anchor": "What's New",
188
- "pages": [
189
- "updates",
190
- "changelog"
191
- ]
184
+ "pages": ["updates", "changelog"]
192
185
  },
193
186
  {
194
187
  "anchor": "Community",
195
188
  "icon": "users",
196
- "pages": [
197
- "community/showcase"
198
- ]
189
+ "pages": ["community/showcase"]
199
190
  }
200
191
  ]
201
192
  },
@@ -222,7 +213,7 @@
222
213
  "python-sdk/fastmcp-cli-install-claude_code",
223
214
  "python-sdk/fastmcp-cli-install-claude_desktop",
224
215
  "python-sdk/fastmcp-cli-install-cursor",
225
- "python-sdk/fastmcp-cli-install-mcp_config",
216
+ "python-sdk/fastmcp-cli-install-mcp_json",
226
217
  "python-sdk/fastmcp-cli-install-shared"
227
218
  ]
228
219
  },
@@ -333,6 +324,7 @@
333
324
  "python-sdk/fastmcp-utilities-json_schema",
334
325
  "python-sdk/fastmcp-utilities-json_schema_type",
335
326
  "python-sdk/fastmcp-utilities-logging",
327
+ "python-sdk/fastmcp-utilities-mcp_config",
336
328
  "python-sdk/fastmcp-utilities-openapi",
337
329
  "python-sdk/fastmcp-utilities-tests",
338
330
  "python-sdk/fastmcp-utilities-types"