fastmcp 2.14.4__py3-none-any.whl → 3.0.0b1__py3-none-any.whl

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 (175) hide show
  1. fastmcp/_vendor/__init__.py +1 -0
  2. fastmcp/_vendor/docket_di/README.md +7 -0
  3. fastmcp/_vendor/docket_di/__init__.py +163 -0
  4. fastmcp/cli/cli.py +112 -28
  5. fastmcp/cli/install/claude_code.py +1 -5
  6. fastmcp/cli/install/claude_desktop.py +1 -5
  7. fastmcp/cli/install/cursor.py +1 -5
  8. fastmcp/cli/install/gemini_cli.py +1 -5
  9. fastmcp/cli/install/mcp_json.py +1 -6
  10. fastmcp/cli/run.py +146 -5
  11. fastmcp/client/__init__.py +7 -9
  12. fastmcp/client/auth/oauth.py +18 -17
  13. fastmcp/client/client.py +100 -870
  14. fastmcp/client/elicitation.py +1 -1
  15. fastmcp/client/mixins/__init__.py +13 -0
  16. fastmcp/client/mixins/prompts.py +295 -0
  17. fastmcp/client/mixins/resources.py +325 -0
  18. fastmcp/client/mixins/task_management.py +157 -0
  19. fastmcp/client/mixins/tools.py +397 -0
  20. fastmcp/client/sampling/handlers/anthropic.py +2 -2
  21. fastmcp/client/sampling/handlers/openai.py +1 -1
  22. fastmcp/client/tasks.py +3 -3
  23. fastmcp/client/telemetry.py +47 -0
  24. fastmcp/client/transports/__init__.py +38 -0
  25. fastmcp/client/transports/base.py +82 -0
  26. fastmcp/client/transports/config.py +170 -0
  27. fastmcp/client/transports/http.py +145 -0
  28. fastmcp/client/transports/inference.py +154 -0
  29. fastmcp/client/transports/memory.py +90 -0
  30. fastmcp/client/transports/sse.py +89 -0
  31. fastmcp/client/transports/stdio.py +543 -0
  32. fastmcp/contrib/component_manager/README.md +4 -10
  33. fastmcp/contrib/component_manager/__init__.py +1 -2
  34. fastmcp/contrib/component_manager/component_manager.py +95 -160
  35. fastmcp/contrib/component_manager/example.py +1 -1
  36. fastmcp/contrib/mcp_mixin/example.py +4 -4
  37. fastmcp/contrib/mcp_mixin/mcp_mixin.py +11 -4
  38. fastmcp/decorators.py +41 -0
  39. fastmcp/dependencies.py +12 -1
  40. fastmcp/exceptions.py +4 -0
  41. fastmcp/experimental/server/openapi/__init__.py +18 -15
  42. fastmcp/mcp_config.py +13 -4
  43. fastmcp/prompts/__init__.py +6 -3
  44. fastmcp/prompts/function_prompt.py +465 -0
  45. fastmcp/prompts/prompt.py +321 -271
  46. fastmcp/resources/__init__.py +5 -3
  47. fastmcp/resources/function_resource.py +335 -0
  48. fastmcp/resources/resource.py +325 -115
  49. fastmcp/resources/template.py +215 -43
  50. fastmcp/resources/types.py +27 -12
  51. fastmcp/server/__init__.py +2 -2
  52. fastmcp/server/auth/__init__.py +14 -0
  53. fastmcp/server/auth/auth.py +30 -10
  54. fastmcp/server/auth/authorization.py +190 -0
  55. fastmcp/server/auth/oauth_proxy/__init__.py +14 -0
  56. fastmcp/server/auth/oauth_proxy/consent.py +361 -0
  57. fastmcp/server/auth/oauth_proxy/models.py +178 -0
  58. fastmcp/server/auth/{oauth_proxy.py → oauth_proxy/proxy.py} +24 -778
  59. fastmcp/server/auth/oauth_proxy/ui.py +277 -0
  60. fastmcp/server/auth/oidc_proxy.py +2 -2
  61. fastmcp/server/auth/providers/auth0.py +24 -94
  62. fastmcp/server/auth/providers/aws.py +26 -95
  63. fastmcp/server/auth/providers/azure.py +41 -129
  64. fastmcp/server/auth/providers/descope.py +18 -49
  65. fastmcp/server/auth/providers/discord.py +25 -86
  66. fastmcp/server/auth/providers/github.py +23 -87
  67. fastmcp/server/auth/providers/google.py +24 -87
  68. fastmcp/server/auth/providers/introspection.py +60 -79
  69. fastmcp/server/auth/providers/jwt.py +30 -67
  70. fastmcp/server/auth/providers/oci.py +47 -110
  71. fastmcp/server/auth/providers/scalekit.py +23 -61
  72. fastmcp/server/auth/providers/supabase.py +18 -47
  73. fastmcp/server/auth/providers/workos.py +34 -127
  74. fastmcp/server/context.py +372 -419
  75. fastmcp/server/dependencies.py +541 -251
  76. fastmcp/server/elicitation.py +20 -18
  77. fastmcp/server/event_store.py +3 -3
  78. fastmcp/server/http.py +16 -6
  79. fastmcp/server/lifespan.py +198 -0
  80. fastmcp/server/low_level.py +92 -2
  81. fastmcp/server/middleware/__init__.py +5 -1
  82. fastmcp/server/middleware/authorization.py +312 -0
  83. fastmcp/server/middleware/caching.py +101 -54
  84. fastmcp/server/middleware/middleware.py +6 -9
  85. fastmcp/server/middleware/ping.py +70 -0
  86. fastmcp/server/middleware/tool_injection.py +2 -2
  87. fastmcp/server/mixins/__init__.py +7 -0
  88. fastmcp/server/mixins/lifespan.py +217 -0
  89. fastmcp/server/mixins/mcp_operations.py +392 -0
  90. fastmcp/server/mixins/transport.py +342 -0
  91. fastmcp/server/openapi/__init__.py +41 -21
  92. fastmcp/server/openapi/components.py +16 -339
  93. fastmcp/server/openapi/routing.py +34 -118
  94. fastmcp/server/openapi/server.py +67 -392
  95. fastmcp/server/providers/__init__.py +71 -0
  96. fastmcp/server/providers/aggregate.py +261 -0
  97. fastmcp/server/providers/base.py +578 -0
  98. fastmcp/server/providers/fastmcp_provider.py +674 -0
  99. fastmcp/server/providers/filesystem.py +226 -0
  100. fastmcp/server/providers/filesystem_discovery.py +327 -0
  101. fastmcp/server/providers/local_provider/__init__.py +11 -0
  102. fastmcp/server/providers/local_provider/decorators/__init__.py +15 -0
  103. fastmcp/server/providers/local_provider/decorators/prompts.py +256 -0
  104. fastmcp/server/providers/local_provider/decorators/resources.py +240 -0
  105. fastmcp/server/providers/local_provider/decorators/tools.py +315 -0
  106. fastmcp/server/providers/local_provider/local_provider.py +465 -0
  107. fastmcp/server/providers/openapi/__init__.py +39 -0
  108. fastmcp/server/providers/openapi/components.py +332 -0
  109. fastmcp/server/providers/openapi/provider.py +405 -0
  110. fastmcp/server/providers/openapi/routing.py +109 -0
  111. fastmcp/server/providers/proxy.py +867 -0
  112. fastmcp/server/providers/skills/__init__.py +59 -0
  113. fastmcp/server/providers/skills/_common.py +101 -0
  114. fastmcp/server/providers/skills/claude_provider.py +44 -0
  115. fastmcp/server/providers/skills/directory_provider.py +153 -0
  116. fastmcp/server/providers/skills/skill_provider.py +432 -0
  117. fastmcp/server/providers/skills/vendor_providers.py +142 -0
  118. fastmcp/server/providers/wrapped_provider.py +140 -0
  119. fastmcp/server/proxy.py +34 -700
  120. fastmcp/server/sampling/run.py +341 -2
  121. fastmcp/server/sampling/sampling_tool.py +4 -3
  122. fastmcp/server/server.py +1214 -2171
  123. fastmcp/server/tasks/__init__.py +2 -1
  124. fastmcp/server/tasks/capabilities.py +13 -1
  125. fastmcp/server/tasks/config.py +66 -3
  126. fastmcp/server/tasks/handlers.py +65 -273
  127. fastmcp/server/tasks/keys.py +4 -6
  128. fastmcp/server/tasks/requests.py +474 -0
  129. fastmcp/server/tasks/routing.py +76 -0
  130. fastmcp/server/tasks/subscriptions.py +20 -11
  131. fastmcp/server/telemetry.py +131 -0
  132. fastmcp/server/transforms/__init__.py +244 -0
  133. fastmcp/server/transforms/namespace.py +193 -0
  134. fastmcp/server/transforms/prompts_as_tools.py +175 -0
  135. fastmcp/server/transforms/resources_as_tools.py +190 -0
  136. fastmcp/server/transforms/tool_transform.py +96 -0
  137. fastmcp/server/transforms/version_filter.py +124 -0
  138. fastmcp/server/transforms/visibility.py +526 -0
  139. fastmcp/settings.py +34 -96
  140. fastmcp/telemetry.py +122 -0
  141. fastmcp/tools/__init__.py +10 -3
  142. fastmcp/tools/function_parsing.py +201 -0
  143. fastmcp/tools/function_tool.py +467 -0
  144. fastmcp/tools/tool.py +215 -362
  145. fastmcp/tools/tool_transform.py +38 -21
  146. fastmcp/utilities/async_utils.py +69 -0
  147. fastmcp/utilities/components.py +152 -91
  148. fastmcp/utilities/inspect.py +8 -20
  149. fastmcp/utilities/json_schema.py +12 -5
  150. fastmcp/utilities/json_schema_type.py +17 -15
  151. fastmcp/utilities/lifespan.py +56 -0
  152. fastmcp/utilities/logging.py +12 -4
  153. fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +3 -3
  154. fastmcp/utilities/openapi/parser.py +3 -3
  155. fastmcp/utilities/pagination.py +80 -0
  156. fastmcp/utilities/skills.py +253 -0
  157. fastmcp/utilities/tests.py +0 -16
  158. fastmcp/utilities/timeout.py +47 -0
  159. fastmcp/utilities/types.py +1 -1
  160. fastmcp/utilities/versions.py +285 -0
  161. {fastmcp-2.14.4.dist-info → fastmcp-3.0.0b1.dist-info}/METADATA +8 -5
  162. fastmcp-3.0.0b1.dist-info/RECORD +228 -0
  163. fastmcp/client/transports.py +0 -1170
  164. fastmcp/contrib/component_manager/component_service.py +0 -209
  165. fastmcp/prompts/prompt_manager.py +0 -117
  166. fastmcp/resources/resource_manager.py +0 -338
  167. fastmcp/server/tasks/converters.py +0 -206
  168. fastmcp/server/tasks/protocol.py +0 -359
  169. fastmcp/tools/tool_manager.py +0 -170
  170. fastmcp/utilities/mcp_config.py +0 -56
  171. fastmcp-2.14.4.dist-info/RECORD +0 -161
  172. /fastmcp/server/{openapi → providers/openapi}/README.md +0 -0
  173. {fastmcp-2.14.4.dist-info → fastmcp-3.0.0b1.dist-info}/WHEEL +0 -0
  174. {fastmcp-2.14.4.dist-info → fastmcp-3.0.0b1.dist-info}/entry_points.txt +0 -0
  175. {fastmcp-2.14.4.dist-info → fastmcp-3.0.0b1.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,140 @@
1
+ """WrappedProvider for immutable transform composition.
2
+
3
+ This module provides `_WrappedProvider`, an internal class that wraps a provider
4
+ with an additional transform. Created by `Provider.wrap_transform()`.
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ from collections.abc import AsyncIterator, Sequence
10
+ from contextlib import asynccontextmanager
11
+ from typing import TYPE_CHECKING
12
+
13
+ from fastmcp.server.providers.base import Provider
14
+ from fastmcp.utilities.versions import VersionSpec
15
+
16
+ if TYPE_CHECKING:
17
+ from fastmcp.prompts.prompt import Prompt
18
+ from fastmcp.resources.resource import Resource
19
+ from fastmcp.resources.template import ResourceTemplate
20
+ from fastmcp.server.transforms import Transform
21
+ from fastmcp.tools.tool import Tool
22
+ from fastmcp.utilities.components import FastMCPComponent
23
+
24
+
25
+ class _WrappedProvider(Provider):
26
+ """Internal provider that wraps another provider with a transform.
27
+
28
+ Created by Provider.wrap_transform(). Delegates all component sourcing
29
+ to the inner provider's public methods (which apply inner's transforms),
30
+ then applies the wrapper's transform on top.
31
+
32
+ This enables immutable transform composition - the inner provider is
33
+ unchanged, and the wrapper adds its transform layer.
34
+ """
35
+
36
+ def __init__(self, inner: Provider, transform: Transform) -> None:
37
+ """Initialize wrapped provider.
38
+
39
+ Args:
40
+ inner: The provider to wrap.
41
+ transform: The transform to apply on top of inner's results.
42
+ """
43
+ super().__init__()
44
+ self._inner = inner
45
+ # Add the transform to this provider's transform list
46
+ # It will be applied via the normal transform chain
47
+ self._transforms.append(transform)
48
+
49
+ def __repr__(self) -> str:
50
+ return f"_WrappedProvider({self._inner!r}, transforms={self._transforms!r})"
51
+
52
+ # -------------------------------------------------------------------------
53
+ # Delegate to inner provider's public methods (which apply inner's transforms)
54
+ # -------------------------------------------------------------------------
55
+
56
+ async def _list_tools(self) -> Sequence[Tool]:
57
+ """Delegate to inner's list_tools (includes inner's transforms)."""
58
+ return await self._inner.list_tools()
59
+
60
+ async def _get_tool(
61
+ self, name: str, version: VersionSpec | None = None
62
+ ) -> Tool | None:
63
+ """Delegate to inner's get_tool (includes inner's transforms)."""
64
+ return await self._inner.get_tool(name, version)
65
+
66
+ async def _list_resources(self) -> Sequence[Resource]:
67
+ """Delegate to inner's list_resources (includes inner's transforms)."""
68
+ return await self._inner.list_resources()
69
+
70
+ async def _get_resource(
71
+ self, uri: str, version: VersionSpec | None = None
72
+ ) -> Resource | None:
73
+ """Delegate to inner's get_resource (includes inner's transforms)."""
74
+ return await self._inner.get_resource(uri, version)
75
+
76
+ async def _list_resource_templates(self) -> Sequence[ResourceTemplate]:
77
+ """Delegate to inner's list_resource_templates (includes inner's transforms)."""
78
+ return await self._inner.list_resource_templates()
79
+
80
+ async def _get_resource_template(
81
+ self, uri: str, version: VersionSpec | None = None
82
+ ) -> ResourceTemplate | None:
83
+ """Delegate to inner's get_resource_template (includes inner's transforms)."""
84
+ return await self._inner.get_resource_template(uri, version)
85
+
86
+ async def _list_prompts(self) -> Sequence[Prompt]:
87
+ """Delegate to inner's list_prompts (includes inner's transforms)."""
88
+ return await self._inner.list_prompts()
89
+
90
+ async def _get_prompt(
91
+ self, name: str, version: VersionSpec | None = None
92
+ ) -> Prompt | None:
93
+ """Delegate to inner's get_prompt (includes inner's transforms)."""
94
+ return await self._inner.get_prompt(name, version)
95
+
96
+ async def get_tasks(self) -> Sequence[FastMCPComponent]:
97
+ """Delegate to inner's get_tasks and apply wrapper's transforms."""
98
+ # Import here to avoid circular imports
99
+ from fastmcp.prompts.prompt import Prompt
100
+ from fastmcp.resources.resource import Resource
101
+ from fastmcp.resources.template import ResourceTemplate
102
+ from fastmcp.tools.tool import Tool
103
+
104
+ # Get tasks from inner (already has inner's transforms)
105
+ components = list(await self._inner.get_tasks())
106
+
107
+ # Apply this wrapper's transforms to the components
108
+ # We need to apply transforms per component type
109
+ tools = [c for c in components if isinstance(c, Tool)]
110
+ resources = [c for c in components if isinstance(c, Resource)]
111
+ templates = [c for c in components if isinstance(c, ResourceTemplate)]
112
+ prompts = [c for c in components if isinstance(c, Prompt)]
113
+
114
+ # Apply this wrapper's transforms sequentially
115
+ for transform in self.transforms:
116
+ tools = await transform.list_tools(tools)
117
+ resources = await transform.list_resources(resources)
118
+ templates = await transform.list_resource_templates(templates)
119
+ prompts = await transform.list_prompts(prompts)
120
+
121
+ return [
122
+ c
123
+ for c in [
124
+ *tools,
125
+ *resources,
126
+ *templates,
127
+ *prompts,
128
+ ]
129
+ if c.task_config.supports_tasks()
130
+ ]
131
+
132
+ # -------------------------------------------------------------------------
133
+ # Lifecycle - combine with inner
134
+ # -------------------------------------------------------------------------
135
+
136
+ @asynccontextmanager
137
+ async def lifespan(self) -> AsyncIterator[None]:
138
+ """Combine lifespan with inner provider."""
139
+ async with self._inner.lifespan():
140
+ yield