fastmcp 2.9.2__py3-none-any.whl → 2.10.1__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.
- fastmcp/client/auth/oauth.py +5 -82
- fastmcp/client/client.py +114 -24
- fastmcp/client/elicitation.py +63 -0
- fastmcp/client/transports.py +50 -36
- fastmcp/contrib/component_manager/README.md +170 -0
- fastmcp/contrib/component_manager/__init__.py +4 -0
- fastmcp/contrib/component_manager/component_manager.py +186 -0
- fastmcp/contrib/component_manager/component_service.py +225 -0
- fastmcp/contrib/component_manager/example.py +59 -0
- fastmcp/prompts/prompt.py +12 -4
- fastmcp/resources/resource.py +8 -3
- fastmcp/resources/template.py +5 -0
- fastmcp/server/auth/auth.py +15 -0
- fastmcp/server/auth/providers/bearer.py +41 -3
- fastmcp/server/auth/providers/bearer_env.py +4 -0
- fastmcp/server/auth/providers/in_memory.py +15 -0
- fastmcp/server/context.py +144 -4
- fastmcp/server/elicitation.py +160 -0
- fastmcp/server/http.py +1 -9
- fastmcp/server/low_level.py +4 -2
- fastmcp/server/middleware/__init__.py +14 -1
- fastmcp/server/middleware/logging.py +11 -0
- fastmcp/server/middleware/middleware.py +10 -6
- fastmcp/server/openapi.py +19 -77
- fastmcp/server/proxy.py +13 -6
- fastmcp/server/server.py +27 -7
- fastmcp/settings.py +0 -17
- fastmcp/tools/tool.py +209 -57
- fastmcp/tools/tool_manager.py +2 -3
- fastmcp/tools/tool_transform.py +125 -26
- fastmcp/utilities/components.py +5 -1
- fastmcp/utilities/json_schema_type.py +648 -0
- fastmcp/utilities/openapi.py +69 -0
- fastmcp/utilities/types.py +50 -19
- {fastmcp-2.9.2.dist-info → fastmcp-2.10.1.dist-info}/METADATA +3 -2
- {fastmcp-2.9.2.dist-info → fastmcp-2.10.1.dist-info}/RECORD +39 -31
- {fastmcp-2.9.2.dist-info → fastmcp-2.10.1.dist-info}/WHEEL +0 -0
- {fastmcp-2.9.2.dist-info → fastmcp-2.10.1.dist-info}/entry_points.txt +0 -0
- {fastmcp-2.9.2.dist-info → fastmcp-2.10.1.dist-info}/licenses/LICENSE +0 -0
fastmcp/utilities/openapi.py
CHANGED
|
@@ -39,6 +39,60 @@ ParameterLocation = Literal["path", "query", "header", "cookie"]
|
|
|
39
39
|
JsonSchema = dict[str, Any]
|
|
40
40
|
|
|
41
41
|
|
|
42
|
+
def format_array_parameter(
|
|
43
|
+
values: list, parameter_name: str, is_query_parameter: bool = False
|
|
44
|
+
) -> str | list:
|
|
45
|
+
"""
|
|
46
|
+
Format an array parameter according to OpenAPI specifications.
|
|
47
|
+
|
|
48
|
+
Args:
|
|
49
|
+
values: List of values to format
|
|
50
|
+
parameter_name: Name of the parameter (for error messages)
|
|
51
|
+
is_query_parameter: If True, can return list for explode=True behavior
|
|
52
|
+
|
|
53
|
+
Returns:
|
|
54
|
+
String (comma-separated) or list (for query params with explode=True)
|
|
55
|
+
"""
|
|
56
|
+
# For arrays of simple types (strings, numbers, etc.), join with commas
|
|
57
|
+
if all(isinstance(item, str | int | float | bool) for item in values):
|
|
58
|
+
return ",".join(str(v) for v in values)
|
|
59
|
+
|
|
60
|
+
# For complex types, try to create a simpler representation
|
|
61
|
+
try:
|
|
62
|
+
# Try to create a simple string representation
|
|
63
|
+
formatted_parts = []
|
|
64
|
+
for item in values:
|
|
65
|
+
if isinstance(item, dict):
|
|
66
|
+
# For objects, serialize key-value pairs
|
|
67
|
+
item_parts = []
|
|
68
|
+
for k, v in item.items():
|
|
69
|
+
item_parts.append(f"{k}:{v}")
|
|
70
|
+
formatted_parts.append(".".join(item_parts))
|
|
71
|
+
else:
|
|
72
|
+
formatted_parts.append(str(item))
|
|
73
|
+
|
|
74
|
+
return ",".join(formatted_parts)
|
|
75
|
+
except Exception as e:
|
|
76
|
+
param_type = "query" if is_query_parameter else "path"
|
|
77
|
+
logger.warning(
|
|
78
|
+
f"Failed to format complex array {param_type} parameter '{parameter_name}': {e}"
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
if is_query_parameter:
|
|
82
|
+
# For query parameters, fallback to original list
|
|
83
|
+
return values
|
|
84
|
+
else:
|
|
85
|
+
# For path parameters, fallback to string representation without Python syntax
|
|
86
|
+
str_value = (
|
|
87
|
+
str(values)
|
|
88
|
+
.replace("[", "")
|
|
89
|
+
.replace("]", "")
|
|
90
|
+
.replace("'", "")
|
|
91
|
+
.replace('"', "")
|
|
92
|
+
)
|
|
93
|
+
return str_value
|
|
94
|
+
|
|
95
|
+
|
|
42
96
|
class ParameterInfo(FastMCPBaseModel):
|
|
43
97
|
"""Represents a single parameter for an HTTP operation in our IR."""
|
|
44
98
|
|
|
@@ -47,6 +101,7 @@ class ParameterInfo(FastMCPBaseModel):
|
|
|
47
101
|
required: bool = False
|
|
48
102
|
schema_: JsonSchema = Field(..., alias="schema") # Target name in IR
|
|
49
103
|
description: str | None = None
|
|
104
|
+
explode: bool | None = None # OpenAPI explode property for array parameters
|
|
50
105
|
|
|
51
106
|
|
|
52
107
|
class RequestBodyInfo(FastMCPBaseModel):
|
|
@@ -84,6 +139,7 @@ class HTTPRoute(FastMCPBaseModel):
|
|
|
84
139
|
schema_definitions: dict[str, JsonSchema] = Field(
|
|
85
140
|
default_factory=dict
|
|
86
141
|
) # Store component schemas
|
|
142
|
+
extensions: dict[str, Any] = Field(default_factory=dict)
|
|
87
143
|
|
|
88
144
|
|
|
89
145
|
# Export public symbols
|
|
@@ -358,6 +414,9 @@ class OpenAPIParser(
|
|
|
358
414
|
):
|
|
359
415
|
param_schema_dict["default"] = resolved_media_schema.default
|
|
360
416
|
|
|
417
|
+
# Extract explode property if present
|
|
418
|
+
explode = getattr(parameter, "explode", None)
|
|
419
|
+
|
|
361
420
|
# Create parameter info object
|
|
362
421
|
param_info = ParameterInfo(
|
|
363
422
|
name=parameter.name,
|
|
@@ -365,6 +424,7 @@ class OpenAPIParser(
|
|
|
365
424
|
required=parameter.required,
|
|
366
425
|
schema=param_schema_dict,
|
|
367
426
|
description=parameter.description,
|
|
427
|
+
explode=explode,
|
|
368
428
|
)
|
|
369
429
|
extracted_params.append(param_info)
|
|
370
430
|
except Exception as e:
|
|
@@ -591,6 +651,14 @@ class OpenAPIParser(
|
|
|
591
651
|
getattr(operation, "responses", None)
|
|
592
652
|
)
|
|
593
653
|
|
|
654
|
+
extensions = {}
|
|
655
|
+
if hasattr(operation, "model_extra") and operation.model_extra:
|
|
656
|
+
extensions = {
|
|
657
|
+
k: v
|
|
658
|
+
for k, v in operation.model_extra.items()
|
|
659
|
+
if k.startswith("x-")
|
|
660
|
+
}
|
|
661
|
+
|
|
594
662
|
route = HTTPRoute(
|
|
595
663
|
path=path_str,
|
|
596
664
|
method=method_upper, # type: ignore[arg-type] # Known valid HTTP method
|
|
@@ -602,6 +670,7 @@ class OpenAPIParser(
|
|
|
602
670
|
request_body=request_body_info,
|
|
603
671
|
responses=responses,
|
|
604
672
|
schema_definitions=schema_definitions,
|
|
673
|
+
extensions=extensions,
|
|
605
674
|
)
|
|
606
675
|
routes.append(route)
|
|
607
676
|
logger.info(
|
fastmcp/utilities/types.py
CHANGED
|
@@ -6,23 +6,18 @@ import mimetypes
|
|
|
6
6
|
from collections.abc import Callable
|
|
7
7
|
from functools import lru_cache
|
|
8
8
|
from pathlib import Path
|
|
9
|
-
from types import UnionType
|
|
9
|
+
from types import EllipsisType, UnionType
|
|
10
10
|
from typing import Annotated, TypeAlias, TypeVar, Union, get_args, get_origin
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
AudioContent,
|
|
15
|
-
BlobResourceContents,
|
|
16
|
-
EmbeddedResource,
|
|
17
|
-
ImageContent,
|
|
18
|
-
TextContent,
|
|
19
|
-
TextResourceContents, # Added import
|
|
20
|
-
)
|
|
12
|
+
import mcp.types
|
|
13
|
+
from mcp.types import Annotations
|
|
21
14
|
from pydantic import AnyUrl, BaseModel, ConfigDict, TypeAdapter, UrlConstraints
|
|
22
15
|
|
|
23
16
|
T = TypeVar("T")
|
|
24
17
|
|
|
25
|
-
|
|
18
|
+
# sentinel values for optional arguments
|
|
19
|
+
NotSet = ...
|
|
20
|
+
NotSetT: TypeAlias = EllipsisType
|
|
26
21
|
|
|
27
22
|
|
|
28
23
|
class FastMCPBaseModel(BaseModel):
|
|
@@ -132,7 +127,7 @@ class Image:
|
|
|
132
127
|
self,
|
|
133
128
|
mime_type: str | None = None,
|
|
134
129
|
annotations: Annotations | None = None,
|
|
135
|
-
) -> ImageContent:
|
|
130
|
+
) -> mcp.types.ImageContent:
|
|
136
131
|
"""Convert to MCP ImageContent."""
|
|
137
132
|
if self.path:
|
|
138
133
|
with open(self.path, "rb") as f:
|
|
@@ -142,7 +137,7 @@ class Image:
|
|
|
142
137
|
else:
|
|
143
138
|
raise ValueError("No image data available")
|
|
144
139
|
|
|
145
|
-
return ImageContent(
|
|
140
|
+
return mcp.types.ImageContent(
|
|
146
141
|
type="image",
|
|
147
142
|
data=data,
|
|
148
143
|
mimeType=mime_type or self._mime_type,
|
|
@@ -191,7 +186,7 @@ class Audio:
|
|
|
191
186
|
self,
|
|
192
187
|
mime_type: str | None = None,
|
|
193
188
|
annotations: Annotations | None = None,
|
|
194
|
-
) -> AudioContent:
|
|
189
|
+
) -> mcp.types.AudioContent:
|
|
195
190
|
if self.path:
|
|
196
191
|
with open(self.path, "rb") as f:
|
|
197
192
|
data = base64.b64encode(f.read()).decode()
|
|
@@ -200,7 +195,7 @@ class Audio:
|
|
|
200
195
|
else:
|
|
201
196
|
raise ValueError("No audio data available")
|
|
202
197
|
|
|
203
|
-
return AudioContent(
|
|
198
|
+
return mcp.types.AudioContent(
|
|
204
199
|
type="audio",
|
|
205
200
|
data=data,
|
|
206
201
|
mimeType=mime_type or self._mime_type,
|
|
@@ -251,7 +246,7 @@ class File:
|
|
|
251
246
|
self,
|
|
252
247
|
mime_type: str | None = None,
|
|
253
248
|
annotations: Annotations | None = None,
|
|
254
|
-
) -> EmbeddedResource:
|
|
249
|
+
) -> mcp.types.EmbeddedResource:
|
|
255
250
|
if self.path:
|
|
256
251
|
with open(self.path, "rb") as f:
|
|
257
252
|
raw_data = f.read()
|
|
@@ -274,21 +269,57 @@ class File:
|
|
|
274
269
|
text = raw_data.decode("utf-8")
|
|
275
270
|
except UnicodeDecodeError:
|
|
276
271
|
text = raw_data.decode("latin-1")
|
|
277
|
-
resource = TextResourceContents(
|
|
272
|
+
resource = mcp.types.TextResourceContents(
|
|
278
273
|
text=text,
|
|
279
274
|
mimeType=mime,
|
|
280
275
|
uri=uri,
|
|
281
276
|
)
|
|
282
277
|
else:
|
|
283
278
|
data = base64.b64encode(raw_data).decode()
|
|
284
|
-
resource = BlobResourceContents(
|
|
279
|
+
resource = mcp.types.BlobResourceContents(
|
|
285
280
|
blob=data,
|
|
286
281
|
mimeType=mime,
|
|
287
282
|
uri=uri,
|
|
288
283
|
)
|
|
289
284
|
|
|
290
|
-
return EmbeddedResource(
|
|
285
|
+
return mcp.types.EmbeddedResource(
|
|
291
286
|
type="resource",
|
|
292
287
|
resource=resource,
|
|
293
288
|
annotations=annotations or self.annotations,
|
|
294
289
|
)
|
|
290
|
+
|
|
291
|
+
|
|
292
|
+
def replace_type(type_, type_map: dict[type, type]):
|
|
293
|
+
"""
|
|
294
|
+
Given a (possibly generic, nested, or otherwise complex) type, replaces all
|
|
295
|
+
instances of old_type with new_type.
|
|
296
|
+
|
|
297
|
+
This is useful for transforming types when creating tools.
|
|
298
|
+
|
|
299
|
+
Args:
|
|
300
|
+
type_: The type to replace instances of old_type with new_type.
|
|
301
|
+
old_type: The type to replace.
|
|
302
|
+
new_type: The type to replace old_type with.
|
|
303
|
+
|
|
304
|
+
Examples:
|
|
305
|
+
>>> replace_type(list[int | bool], {int: str})
|
|
306
|
+
list[str | bool]
|
|
307
|
+
|
|
308
|
+
>>> replace_type(list[list[int]], {int: str})
|
|
309
|
+
list[list[str]]
|
|
310
|
+
|
|
311
|
+
"""
|
|
312
|
+
if type_ in type_map:
|
|
313
|
+
return type_map[type_]
|
|
314
|
+
|
|
315
|
+
origin = get_origin(type_)
|
|
316
|
+
if not origin:
|
|
317
|
+
return type_
|
|
318
|
+
|
|
319
|
+
args = get_args(type_)
|
|
320
|
+
new_args = tuple(replace_type(arg, type_map) for arg in args)
|
|
321
|
+
|
|
322
|
+
if origin is UnionType:
|
|
323
|
+
return Union[new_args] # type: ignore # noqa: UP007
|
|
324
|
+
else:
|
|
325
|
+
return origin[new_args]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fastmcp
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.10.1
|
|
4
4
|
Summary: The fast, Pythonic way to build MCP servers.
|
|
5
5
|
Project-URL: Homepage, https://gofastmcp.com
|
|
6
6
|
Project-URL: Repository, https://github.com/jlowin/fastmcp
|
|
@@ -20,8 +20,9 @@ Requires-Python: >=3.10
|
|
|
20
20
|
Requires-Dist: authlib>=1.5.2
|
|
21
21
|
Requires-Dist: exceptiongroup>=1.2.2
|
|
22
22
|
Requires-Dist: httpx>=0.28.1
|
|
23
|
-
Requires-Dist: mcp
|
|
23
|
+
Requires-Dist: mcp>=1.10.0
|
|
24
24
|
Requires-Dist: openapi-pydantic>=0.5.1
|
|
25
|
+
Requires-Dist: pydantic[email]>=2.11.7
|
|
25
26
|
Requires-Dist: python-dotenv>=1.1.0
|
|
26
27
|
Requires-Dist: rich>=13.9.4
|
|
27
28
|
Requires-Dist: typer>=0.15.2
|
|
@@ -1,78 +1,86 @@
|
|
|
1
1
|
fastmcp/__init__.py,sha256=5ChT4kg3srdFl0-9dZekGqpzCESlpc6ohrfPbWf1aTo,1300
|
|
2
2
|
fastmcp/exceptions.py,sha256=-krEavxwddQau6T7MESCR4VjKNLfP9KHJrU1p3y72FU,744
|
|
3
3
|
fastmcp/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
|
-
fastmcp/settings.py,sha256=
|
|
4
|
+
fastmcp/settings.py,sha256=yC3f0ITEWYeit37-wnF0G12klTw_hjrWjCr6oZtUT8o,8329
|
|
5
5
|
fastmcp/cli/__init__.py,sha256=Ii284TNoG5lxTP40ETMGhHEq3lQZWxu9m9JuU57kUpQ,87
|
|
6
6
|
fastmcp/cli/claude.py,sha256=IAlcZ4qZKBBj09jZUMEx7EANZE_IR3vcu7zOBJmMOuU,4567
|
|
7
7
|
fastmcp/cli/cli.py,sha256=598s1S-KdqIB85mwqvXJaBVen6xYY65ek4v-q3lmY4k,15933
|
|
8
8
|
fastmcp/cli/run.py,sha256=Pw3vH5wKRHfbmHRn0saIbC4l450KPOzeQbzPFqG4AbY,6208
|
|
9
9
|
fastmcp/client/__init__.py,sha256=kd2hhSuD8rZuF87c9zlPJP_icJ-Rx3exyNoK0EzfOtE,617
|
|
10
|
-
fastmcp/client/client.py,sha256=
|
|
10
|
+
fastmcp/client/client.py,sha256=8Sx7NxnnF5IMv9E-J0MXjTI_TfhlM3j0mD1Rh-LXQJI,29213
|
|
11
|
+
fastmcp/client/elicitation.py,sha256=8eWZpXbRFctZGgulyJ_GGI4GYXqAFf5Zp47vYTRD4fc,2155
|
|
11
12
|
fastmcp/client/logging.py,sha256=7GJ-BLFW16_IOJPlGTNEWPP0P-yqqRpmsLdiKrlVsw8,757
|
|
12
13
|
fastmcp/client/messages.py,sha256=NIPjt-5js_DkI5BD4OVdTf6pz-nGjc2dtbgt-vAY234,4329
|
|
13
14
|
fastmcp/client/oauth_callback.py,sha256=ODAnVX-ettL82RuI5KpfkKf8iDtYMDue3Tnab5sjQtM,10071
|
|
14
15
|
fastmcp/client/progress.py,sha256=WjLLDbUKMsx8DK-fqO7AGsXb83ak-6BMrLvzzznGmcI,1043
|
|
15
16
|
fastmcp/client/roots.py,sha256=IxI_bHwHTmg6c2H-s1av1ZgrRnNDieHtYwdGFbzXT5c,2471
|
|
16
17
|
fastmcp/client/sampling.py,sha256=Q8PzYCERa1W3xGGI9I9QOhhDM-M4i3P5lESb0cp2iI8,1595
|
|
17
|
-
fastmcp/client/transports.py,sha256=
|
|
18
|
+
fastmcp/client/transports.py,sha256=liHLuOcgKotdlhTJBOiSn73WX0v7mnFa853hJBdu-2E,33898
|
|
18
19
|
fastmcp/client/auth/__init__.py,sha256=4DNsfp4iaQeBcpds0JDdMn6Mmfud44stWLsret0sVKY,91
|
|
19
20
|
fastmcp/client/auth/bearer.py,sha256=MFEFqcH6u_V86msYiOsEFKN5ks1V9BnBNiPsPLHUTqo,399
|
|
20
|
-
fastmcp/client/auth/oauth.py,sha256=
|
|
21
|
+
fastmcp/client/auth/oauth.py,sha256=pSyuI0FlRK1qkBA6mvq-bxKzl2B-pMCvPPzIByTJBEo,11745
|
|
21
22
|
fastmcp/contrib/README.md,sha256=rKknYSI1T192UvSszqwwDlQ2eYQpxywrNTLoj177SYU,878
|
|
22
23
|
fastmcp/contrib/bulk_tool_caller/README.md,sha256=5aUUY1TSFKtz1pvTLSDqkUCkGkuqMfMZNsLeaNqEgAc,1960
|
|
23
24
|
fastmcp/contrib/bulk_tool_caller/__init__.py,sha256=xvGSSaUXTQrc31erBoi1Gh7BikgOliETDiYVTP3rLxY,75
|
|
24
25
|
fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py,sha256=2NcrGS59qvHo1lfbRaT8NSWfCxN66knciLxFvnGwCLY,4165
|
|
25
26
|
fastmcp/contrib/bulk_tool_caller/example.py,sha256=6og_8pCJN_CabworC5R82zPAwwwM-W7HNJLQQSnS3lU,319
|
|
27
|
+
fastmcp/contrib/component_manager/README.md,sha256=sTan1D51jzkPNnCQTxwd5JXGzWVy4DtkUjrUfNH3-F0,4457
|
|
28
|
+
fastmcp/contrib/component_manager/__init__.py,sha256=4bppVrCOSEepKmBRwVWN-ndu5BYAz1Kv2Z8yhjEUmlo,164
|
|
29
|
+
fastmcp/contrib/component_manager/component_manager.py,sha256=4R1FPVYjCr-j7Mn6OcbHH-psl9-JTdd1hgNZHasC52Y,6412
|
|
30
|
+
fastmcp/contrib/component_manager/component_service.py,sha256=dLIOtXvMpCAu8CGlrqAWb9pX0AhVGqkC4j0uxv6XnXs,8759
|
|
31
|
+
fastmcp/contrib/component_manager/example.py,sha256=AdFrUoN2jhtnF4JE4ywRg6O4oP8lZ3S64ds0mRTH3sg,1604
|
|
26
32
|
fastmcp/contrib/mcp_mixin/README.md,sha256=X6rzt_4vC_rmq9jbHmrVPqYLGVVlw9b4TVL4H_0SMmQ,4277
|
|
27
33
|
fastmcp/contrib/mcp_mixin/__init__.py,sha256=aw9IQ1ssNjCgws4ZNt8bkdpossAAGVAwwjBpMp9O5ZQ,153
|
|
28
34
|
fastmcp/contrib/mcp_mixin/example.py,sha256=GnunkXmtG5hLLTUsM8aW5ZURU52Z8vI4tNLl-fK7Dg0,1228
|
|
29
35
|
fastmcp/contrib/mcp_mixin/mcp_mixin.py,sha256=sUSJ2o0sTsb061MyPN2xuYP0oI4W6YVQXupY3nnjD50,8687
|
|
30
36
|
fastmcp/prompts/__init__.py,sha256=An8uMBUh9Hrb7qqcn_5_Hent7IOeSh7EA2IUVsIrtHc,179
|
|
31
|
-
fastmcp/prompts/prompt.py,sha256=
|
|
37
|
+
fastmcp/prompts/prompt.py,sha256=ee7DT32pw0H0k0ON8a63Eu0kQ3G1zMGlWXIFRDV8p7E,13925
|
|
32
38
|
fastmcp/prompts/prompt_manager.py,sha256=Pt9cg_c9FR2EA0ITIHJT5Utihkd383JzhqhT-y2VnKo,7677
|
|
33
39
|
fastmcp/resources/__init__.py,sha256=y1iAuqx-GIrS1NqIYzKezIDiYyjNEzzHD35epHpMnXE,463
|
|
34
|
-
fastmcp/resources/resource.py,sha256=
|
|
40
|
+
fastmcp/resources/resource.py,sha256=fN_ck9fgFG_ciHV9reXDNe-dWzqEZ7XV4p3U7z-yf4k,6050
|
|
35
41
|
fastmcp/resources/resource_manager.py,sha256=zjhso9ZP0EK_beTpUz_amqJ7XSABqU8mqPSk-JturOE,19777
|
|
36
|
-
fastmcp/resources/template.py,sha256=
|
|
42
|
+
fastmcp/resources/template.py,sha256=rYEfwNWVJZnlTp6uSKbGNL0OlaUqOoKRjmg4hesLXVU,10346
|
|
37
43
|
fastmcp/resources/types.py,sha256=SiYNLnpXT-mHgNUrzqKUvXYUsY-V3gwJIrYdJfFwDDo,4868
|
|
38
44
|
fastmcp/server/__init__.py,sha256=bMD4aQD4yJqLz7-mudoNsyeV8UgQfRAg3PRwPvwTEds,119
|
|
39
|
-
fastmcp/server/context.py,sha256=
|
|
45
|
+
fastmcp/server/context.py,sha256=OFkdgT53NkN_VYwwHjdR2C_28CWtPsFln36X0QLM23g,20258
|
|
40
46
|
fastmcp/server/dependencies.py,sha256=iKJdz1XsVJcrfHo_reXj9ZSldw-HeAwsp9S6lAgfGA8,2358
|
|
41
|
-
fastmcp/server/
|
|
42
|
-
fastmcp/server/
|
|
43
|
-
fastmcp/server/
|
|
44
|
-
fastmcp/server/
|
|
45
|
-
fastmcp/server/
|
|
47
|
+
fastmcp/server/elicitation.py,sha256=jZIHjV4NjhYbT-w8pBArwd0vNzP8OYwzmsnWDdk6Bd0,6136
|
|
48
|
+
fastmcp/server/http.py,sha256=d0Jij4HVTaAohluRXArSniXLb1HcHP3ytbe-mMHg6nE,11678
|
|
49
|
+
fastmcp/server/low_level.py,sha256=LNmc_nU_wx-fRG8OEHdLPKopZpovcrWlyAxJzKss3TA,1239
|
|
50
|
+
fastmcp/server/openapi.py,sha256=ALIbl0r2T1cvbSeFwz6HpIzut2akdngAtKDdWGyIWHs,36221
|
|
51
|
+
fastmcp/server/proxy.py,sha256=Ofx7P5rU7mKVPDjvvIKjQS7_C1w4-1UiKc78x7AdjN8,15211
|
|
52
|
+
fastmcp/server/server.py,sha256=XKt0vGwQNopBnYvciJtbJ_FVDt1uuwwuxrAcrVBJGa8,79703
|
|
46
53
|
fastmcp/server/auth/__init__.py,sha256=doHCLwOIElvH1NrTdpeP9JKfnNf3MDYPSpQfdsQ-uI0,84
|
|
47
|
-
fastmcp/server/auth/auth.py,sha256=
|
|
54
|
+
fastmcp/server/auth/auth.py,sha256=A00OKxglEMrGMMIiMbc6UmpGc2VoWDkEVU5g2pIzDIg,2119
|
|
48
55
|
fastmcp/server/auth/providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
49
|
-
fastmcp/server/auth/providers/bearer.py,sha256=
|
|
50
|
-
fastmcp/server/auth/providers/bearer_env.py,sha256=
|
|
51
|
-
fastmcp/server/auth/providers/in_memory.py,sha256=
|
|
52
|
-
fastmcp/server/middleware/__init__.py,sha256=
|
|
56
|
+
fastmcp/server/auth/providers/bearer.py,sha256=iRExt5hRKmrwr7MjsUN-UdQDe-iCSjH7sNCURaK7HBs,16456
|
|
57
|
+
fastmcp/server/auth/providers/bearer_env.py,sha256=NYPCW363Q8u8BdiPPz1FdB3_kwmbCaWT5yKdAO-ZgwA,2081
|
|
58
|
+
fastmcp/server/auth/providers/in_memory.py,sha256=Sb3GOtLL2bWbm8z-T8cEsMz1qcQUSHpPEEgYRvTOQi4,14251
|
|
59
|
+
fastmcp/server/middleware/__init__.py,sha256=m1QJFQ7JW_2JHpJp1FurBNYaxbBUa_HyDn1Bw9mtyvc,367
|
|
53
60
|
fastmcp/server/middleware/error_handling.py,sha256=SoDatr9i3T2qSIUbSEGWrOnu4WPPyMDymnsF5GR_BiE,7572
|
|
54
|
-
fastmcp/server/middleware/logging.py,sha256=
|
|
55
|
-
fastmcp/server/middleware/middleware.py,sha256=
|
|
61
|
+
fastmcp/server/middleware/logging.py,sha256=UIAoafnKRGWpQa7OX5nzChep-9EhKdyTDBmmcRcEVdo,6239
|
|
62
|
+
fastmcp/server/middleware/middleware.py,sha256=1Zy5KdBCrGzqFIpYZqWlZq9rLK3NDlRiXhJ2j-YGKeQ,6961
|
|
56
63
|
fastmcp/server/middleware/rate_limiting.py,sha256=VTrCoQFmWCm0BxwOrNfG21CBFDDOKJT7IiSEjpJgmPA,7921
|
|
57
64
|
fastmcp/server/middleware/timing.py,sha256=lL_xc-ErLD5lplfvd5-HIyWEbZhgNBYkcQ74KFXAMkA,5591
|
|
58
65
|
fastmcp/tools/__init__.py,sha256=vzqb-Y7Kf0d5T0aOsld-O-FA8kD7-4uFExChewFHEzY,201
|
|
59
|
-
fastmcp/tools/tool.py,sha256=
|
|
60
|
-
fastmcp/tools/tool_manager.py,sha256=
|
|
61
|
-
fastmcp/tools/tool_transform.py,sha256=
|
|
66
|
+
fastmcp/tools/tool.py,sha256=DsoF0QNTl4i_w0FqqmdbK_1poZtfj1j6mv5kuf8zH1Y,17524
|
|
67
|
+
fastmcp/tools/tool_manager.py,sha256=Sm_tOO-SY0m7tEN_dofP-tvBnC2HroPRKLU6sp8gnUw,7739
|
|
68
|
+
fastmcp/tools/tool_transform.py,sha256=YY2DZdJZ6fEGtgEP1Djrc49F8rAEyx6fgRGEyIGaxPE,32601
|
|
62
69
|
fastmcp/utilities/__init__.py,sha256=-imJ8S-rXmbXMWeDamldP-dHDqAPg_wwmPVz-LNX14E,31
|
|
63
70
|
fastmcp/utilities/cache.py,sha256=aV3oZ-ZhMgLSM9iAotlUlEy5jFvGXrVo0Y5Bj4PBtqY,707
|
|
64
|
-
fastmcp/utilities/components.py,sha256=
|
|
71
|
+
fastmcp/utilities/components.py,sha256=WIxNVZ7YxCLpdIm_pbTYeP0lAxikvgptVYhIL0LVmCc,2535
|
|
65
72
|
fastmcp/utilities/exceptions.py,sha256=7Z9j5IzM5rT27BC1Mcn8tkS-bjqCYqMKwb2MMTaxJYU,1350
|
|
66
73
|
fastmcp/utilities/http.py,sha256=1ns1ymBS-WSxbZjGP6JYjSO52Wa_ls4j4WbnXiupoa4,245
|
|
67
74
|
fastmcp/utilities/inspect.py,sha256=XNA0dfYM5G-FVbJaVJO8loSUUCNypyLA-QjqTOneJyU,10833
|
|
68
75
|
fastmcp/utilities/json_schema.py,sha256=K0QH5UazBD_tweBi-TguWYjUu5Lgp9wcM-wT42Fet5w,5022
|
|
76
|
+
fastmcp/utilities/json_schema_type.py,sha256=Sml03nJGOnUfxCGrHWRMwZMultV0X5JThMepUnHIUiA,22377
|
|
69
77
|
fastmcp/utilities/logging.py,sha256=B1WNO-ZWFjd9wiFSh13YtW1hAKaNmbpscDZleIAhr-g,1317
|
|
70
78
|
fastmcp/utilities/mcp_config.py,sha256=ryjAfJUPquDSoKdSymPH4M2B0WvuM3pWUGI3cOgAX80,2782
|
|
71
|
-
fastmcp/utilities/openapi.py,sha256=
|
|
79
|
+
fastmcp/utilities/openapi.py,sha256=neeaXwwn1OWdUp0Gawhx4SJHLfV78gXU5OMMTFGeD24,45235
|
|
72
80
|
fastmcp/utilities/tests.py,sha256=O9hRSjnyaYQqu1RJ-CFBw1cIjezlwSQtS-Ea_iqO4sY,3899
|
|
73
|
-
fastmcp/utilities/types.py,sha256=
|
|
74
|
-
fastmcp-2.
|
|
75
|
-
fastmcp-2.
|
|
76
|
-
fastmcp-2.
|
|
77
|
-
fastmcp-2.
|
|
78
|
-
fastmcp-2.
|
|
81
|
+
fastmcp/utilities/types.py,sha256=SWtzKpIr9TMeOE6TyPgqSi-SBXpWBPUnA5QPiP4nDzw,10512
|
|
82
|
+
fastmcp-2.10.1.dist-info/METADATA,sha256=I0_44sR-kc7BcTHdA1mLy4f9zASLk6hCiOWjrcxBfk8,17796
|
|
83
|
+
fastmcp-2.10.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
84
|
+
fastmcp-2.10.1.dist-info/entry_points.txt,sha256=ff8bMtKX1JvXyurMibAacMSKbJEPmac9ffAKU9mLnM8,44
|
|
85
|
+
fastmcp-2.10.1.dist-info/licenses/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
|
|
86
|
+
fastmcp-2.10.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|