fastmcp 2.13.0.1__py3-none-any.whl → 2.13.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.
Files changed (42) hide show
  1. fastmcp/cli/cli.py +3 -4
  2. fastmcp/cli/install/cursor.py +12 -6
  3. fastmcp/client/auth/oauth.py +11 -6
  4. fastmcp/client/client.py +86 -20
  5. fastmcp/client/transports.py +4 -4
  6. fastmcp/experimental/utilities/openapi/director.py +13 -14
  7. fastmcp/experimental/utilities/openapi/parser.py +18 -15
  8. fastmcp/mcp_config.py +1 -1
  9. fastmcp/resources/resource_manager.py +3 -3
  10. fastmcp/server/auth/__init__.py +4 -0
  11. fastmcp/server/auth/auth.py +28 -9
  12. fastmcp/server/auth/handlers/authorize.py +7 -5
  13. fastmcp/server/auth/oauth_proxy.py +170 -30
  14. fastmcp/server/auth/oidc_proxy.py +28 -9
  15. fastmcp/server/auth/providers/azure.py +26 -5
  16. fastmcp/server/auth/providers/debug.py +114 -0
  17. fastmcp/server/auth/providers/descope.py +1 -1
  18. fastmcp/server/auth/providers/in_memory.py +25 -1
  19. fastmcp/server/auth/providers/jwt.py +38 -26
  20. fastmcp/server/auth/providers/oci.py +233 -0
  21. fastmcp/server/auth/providers/supabase.py +21 -5
  22. fastmcp/server/auth/providers/workos.py +1 -1
  23. fastmcp/server/context.py +50 -8
  24. fastmcp/server/dependencies.py +8 -2
  25. fastmcp/server/middleware/caching.py +9 -2
  26. fastmcp/server/middleware/logging.py +2 -2
  27. fastmcp/server/middleware/middleware.py +2 -2
  28. fastmcp/server/proxy.py +1 -1
  29. fastmcp/server/server.py +11 -5
  30. fastmcp/tools/tool.py +33 -8
  31. fastmcp/utilities/components.py +2 -2
  32. fastmcp/utilities/json_schema.py +4 -4
  33. fastmcp/utilities/logging.py +13 -9
  34. fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +1 -1
  35. fastmcp/utilities/openapi.py +2 -2
  36. fastmcp/utilities/types.py +28 -15
  37. fastmcp/utilities/ui.py +1 -1
  38. {fastmcp-2.13.0.1.dist-info → fastmcp-2.13.1.dist-info}/METADATA +14 -11
  39. {fastmcp-2.13.0.1.dist-info → fastmcp-2.13.1.dist-info}/RECORD +42 -40
  40. {fastmcp-2.13.0.1.dist-info → fastmcp-2.13.1.dist-info}/WHEEL +0 -0
  41. {fastmcp-2.13.0.1.dist-info → fastmcp-2.13.1.dist-info}/entry_points.txt +0 -0
  42. {fastmcp-2.13.0.1.dist-info → fastmcp-2.13.1.dist-info}/licenses/LICENSE +0 -0
@@ -46,7 +46,7 @@ class BaseLoggingMiddleware(Middleware):
46
46
 
47
47
  return payload
48
48
 
49
- def _format_message(self, message: dict[str, str | int]) -> str:
49
+ def _format_message(self, message: dict[str, str | int | float]) -> str:
50
50
  """Format a message for logging."""
51
51
  if self.structured_logging:
52
52
  return json.dumps(message)
@@ -55,7 +55,7 @@ class BaseLoggingMiddleware(Middleware):
55
55
 
56
56
  def _create_before_message(
57
57
  self, context: MiddlewareContext[Any]
58
- ) -> dict[str, str | int]:
58
+ ) -> dict[str, str | int | float]:
59
59
  message = {
60
60
  "event": context.type + "_start",
61
61
  "method": context.method or "unknown",
@@ -149,8 +149,8 @@ class Middleware:
149
149
 
150
150
  async def on_initialize(
151
151
  self,
152
- context: MiddlewareContext[mt.InitializeRequestParams],
153
- call_next: CallNext[mt.InitializeRequestParams, None],
152
+ context: MiddlewareContext[mt.InitializeRequest],
153
+ call_next: CallNext[mt.InitializeRequest, None],
154
154
  ) -> None:
155
155
  return await call_next(context)
156
156
 
fastmcp/server/proxy.py CHANGED
@@ -539,7 +539,7 @@ class ProxyClient(Client[ClientTransportT]):
539
539
  def __init__(
540
540
  self,
541
541
  transport: ClientTransportT
542
- | FastMCP
542
+ | FastMCP[Any]
543
543
  | FastMCP1Server
544
544
  | AnyUrl
545
545
  | Path
fastmcp/server/server.py CHANGED
@@ -79,6 +79,7 @@ from fastmcp.utilities.types import NotSet, NotSetT
79
79
 
80
80
  if TYPE_CHECKING:
81
81
  from fastmcp.client import Client
82
+ from fastmcp.client.client import FastMCP1Server
82
83
  from fastmcp.client.transports import ClientTransport, ClientTransportT
83
84
  from fastmcp.experimental.server.openapi import FastMCPOpenAPI as FastMCPOpenAPINew
84
85
  from fastmcp.experimental.server.openapi.routing import (
@@ -1045,7 +1046,11 @@ class FastMCP(Generic[LifespanResultT]):
1045
1046
 
1046
1047
  async def _call_tool_mcp(
1047
1048
  self, key: str, arguments: dict[str, Any]
1048
- ) -> list[ContentBlock] | tuple[list[ContentBlock], dict[str, Any]]:
1049
+ ) -> (
1050
+ list[ContentBlock]
1051
+ | tuple[list[ContentBlock], dict[str, Any]]
1052
+ | mcp.types.CallToolResult
1053
+ ):
1049
1054
  """
1050
1055
  Handle MCP 'callTool' requests.
1051
1056
 
@@ -1488,7 +1493,7 @@ class FastMCP(Generic[LifespanResultT]):
1488
1493
  icons=icons,
1489
1494
  tags=tags,
1490
1495
  output_schema=output_schema,
1491
- annotations=cast(ToolAnnotations | None, annotations),
1496
+ annotations=annotations,
1492
1497
  exclude_args=exclude_args,
1493
1498
  meta=meta,
1494
1499
  serializer=self._tool_serializer,
@@ -1721,7 +1726,7 @@ class FastMCP(Generic[LifespanResultT]):
1721
1726
  mime_type=mime_type,
1722
1727
  tags=tags,
1723
1728
  enabled=enabled,
1724
- annotations=cast(Annotations | None, annotations),
1729
+ annotations=annotations,
1725
1730
  meta=meta,
1726
1731
  )
1727
1732
  self.add_template(template)
@@ -1737,7 +1742,7 @@ class FastMCP(Generic[LifespanResultT]):
1737
1742
  mime_type=mime_type,
1738
1743
  tags=tags,
1739
1744
  enabled=enabled,
1740
- annotations=cast(Annotations | None, annotations),
1745
+ annotations=annotations,
1741
1746
  meta=meta,
1742
1747
  )
1743
1748
  self.add_resource(resource)
@@ -2582,6 +2587,7 @@ class FastMCP(Generic[LifespanResultT]):
2582
2587
  Client[ClientTransportT]
2583
2588
  | ClientTransport
2584
2589
  | FastMCP[Any]
2590
+ | FastMCP1Server
2585
2591
  | AnyUrl
2586
2592
  | Path
2587
2593
  | MCPConfig
@@ -2624,7 +2630,7 @@ class FastMCP(Generic[LifespanResultT]):
2624
2630
 
2625
2631
  client_factory = fresh_client_factory
2626
2632
  else:
2627
- base_client = ProxyClient(backend)
2633
+ base_client = ProxyClient(backend) # type: ignore
2628
2634
 
2629
2635
  # Fresh client created from transport - use fresh sessions per request
2630
2636
  def proxy_client_factory():
fastmcp/tools/tool.py CHANGED
@@ -16,7 +16,7 @@ from typing import (
16
16
 
17
17
  import mcp.types
18
18
  import pydantic_core
19
- from mcp.types import ContentBlock, Icon, TextContent, ToolAnnotations
19
+ from mcp.types import CallToolResult, ContentBlock, Icon, TextContent, ToolAnnotations
20
20
  from mcp.types import Tool as MCPTool
21
21
  from pydantic import Field, PydanticSchemaGenerationError
22
22
  from typing_extensions import TypeVar
@@ -68,6 +68,7 @@ class ToolResult:
68
68
  self,
69
69
  content: list[ContentBlock] | Any | None = None,
70
70
  structured_content: dict[str, Any] | Any | None = None,
71
+ meta: dict[str, Any] | None = None,
71
72
  ):
72
73
  if content is None and structured_content is None:
73
74
  raise ValueError("Either content or structured_content must be provided")
@@ -75,6 +76,7 @@ class ToolResult:
75
76
  content = structured_content
76
77
 
77
78
  self.content: list[ContentBlock] = _convert_to_content(result=content)
79
+ self.meta: dict[str, Any] | None = meta
78
80
 
79
81
  if structured_content is not None:
80
82
  try:
@@ -96,7 +98,15 @@ class ToolResult:
96
98
 
97
99
  def to_mcp_result(
98
100
  self,
99
- ) -> list[ContentBlock] | tuple[list[ContentBlock], dict[str, Any]]:
101
+ ) -> (
102
+ list[ContentBlock] | tuple[list[ContentBlock], dict[str, Any]] | CallToolResult
103
+ ):
104
+ if self.meta is not None:
105
+ return CallToolResult(
106
+ structuredContent=self.structured_content,
107
+ content=self.content,
108
+ _meta=self.meta,
109
+ )
100
110
  if self.structured_content is None:
101
111
  return self.content
102
112
  return self.content, self.structured_content
@@ -284,10 +294,11 @@ class FunctionTool(Tool):
284
294
  # Note: explicit schemas (dict) are used as-is without auto-wrapping
285
295
 
286
296
  # Validate that explicit schemas are object type for structured content
297
+ # (resolving $ref references for self-referencing types)
287
298
  if final_output_schema is not None and isinstance(final_output_schema, dict):
288
- if final_output_schema.get("type") != "object":
299
+ if not _is_object_schema(final_output_schema):
289
300
  raise ValueError(
290
- f'Output schemas must have "type" set to "object" due to MCP spec limitations. Received: {final_output_schema!r}'
301
+ f"Output schemas must represent object types due to MCP spec limitations. Received: {final_output_schema!r}"
291
302
  )
292
303
 
293
304
  return cls(
@@ -356,6 +367,21 @@ class FunctionTool(Tool):
356
367
  )
357
368
 
358
369
 
370
+ def _is_object_schema(schema: dict[str, Any]) -> bool:
371
+ """Check if a JSON schema represents an object type."""
372
+ # Direct object type
373
+ if schema.get("type") == "object":
374
+ return True
375
+
376
+ # Schema with properties but no explicit type is treated as object
377
+ if "properties" in schema:
378
+ return True
379
+
380
+ # Self-referencing types use $ref pointing to $defs
381
+ # The referenced type is always an object in our use case
382
+ return "$ref" in schema and "$defs" in schema
383
+
384
+
359
385
  @dataclass
360
386
  class ParsedFunction:
361
387
  fn: Callable[..., Any]
@@ -468,10 +494,9 @@ class ParsedFunction:
468
494
 
469
495
  # Generate schema for wrapped type if it's non-object
470
496
  # because MCP requires that output schemas are objects
471
- if (
472
- wrap_non_object_output_schema
473
- and base_schema.get("type") != "object"
474
- ):
497
+ # Check if schema is an object type, resolving $ref references
498
+ # (self-referencing types use $ref at root level)
499
+ if wrap_non_object_output_schema and not _is_object_schema(base_schema):
475
500
  # Use the wrapped result schema directly
476
501
  wrapped_type = _WrappedResult[clean_output_type]
477
502
  wrapped_adapter = get_cached_typeadapter(wrapped_type)
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from collections.abc import Sequence
4
- from typing import Annotated, Any, TypedDict
4
+ from typing import Annotated, Any, TypedDict, cast
5
5
 
6
6
  from mcp.types import Icon
7
7
  from pydantic import BeforeValidator, Field, PrivateAttr
@@ -117,7 +117,7 @@ class FastMCPComponent(FastMCPBaseModel):
117
117
  copy = super().model_copy(update=update, deep=deep)
118
118
  if key is not None:
119
119
  copy._key = key
120
- return copy
120
+ return cast(Self, copy)
121
121
 
122
122
  def __eq__(self, other: object) -> bool:
123
123
  if type(self) is not type(other):
@@ -98,7 +98,7 @@ def _single_pass_optimize(
98
98
  if isinstance(node, dict):
99
99
  # Collect $ref references for unused definition removal
100
100
  if prune_defs:
101
- ref = node.get("$ref")
101
+ ref = node.get("$ref") # type: ignore
102
102
  if isinstance(ref, str) and ref.startswith("#/$defs/"):
103
103
  referenced_def = ref.split("/")[-1]
104
104
  if current_def_name:
@@ -127,13 +127,13 @@ def _single_pass_optimize(
127
127
  "required",
128
128
  ]
129
129
  ):
130
- node.pop("title")
130
+ node.pop("title") # type: ignore
131
131
 
132
132
  if (
133
133
  prune_additional_properties
134
- and node.get("additionalProperties") is False
134
+ and node.get("additionalProperties") is False # type: ignore
135
135
  ):
136
- node.pop("additionalProperties")
136
+ node.pop("additionalProperties") # type: ignore
137
137
 
138
138
  # Recursive traversal
139
139
  for key, value in node.items():
@@ -74,15 +74,19 @@ def configure_logging(
74
74
  import mcp
75
75
  import pydantic
76
76
 
77
- traceback_handler = RichHandler(
78
- console=Console(stderr=True),
79
- show_path=False,
80
- show_level=False,
81
- rich_tracebacks=enable_rich_tracebacks,
82
- tracebacks_max_frames=3,
83
- tracebacks_suppress=[fastmcp, mcp, pydantic],
84
- **rich_kwargs,
85
- )
77
+ # Build traceback kwargs with defaults that can be overridden
78
+ traceback_kwargs = {
79
+ "console": Console(stderr=True),
80
+ "show_path": False,
81
+ "show_level": False,
82
+ "rich_tracebacks": enable_rich_tracebacks,
83
+ "tracebacks_max_frames": 3,
84
+ "tracebacks_suppress": [fastmcp, mcp, pydantic],
85
+ }
86
+ # Override defaults with user-provided values
87
+ traceback_kwargs.update(rich_kwargs)
88
+
89
+ traceback_handler = RichHandler(**traceback_kwargs) # type: ignore[arg-type]
86
90
  traceback_handler.setFormatter(formatter)
87
91
 
88
92
  traceback_handler.addFilter(lambda record: record.exc_info is not None)
@@ -217,7 +217,7 @@ class MCPServerConfig(BaseModel):
217
217
  """
218
218
  if isinstance(v, dict):
219
219
  return Deployment(**v) # type: ignore[arg-type]
220
- return cast(Deployment, v)
220
+ return cast(Deployment, v) # type: ignore[return-value]
221
221
 
222
222
  @classmethod
223
223
  def from_file(cls, file_path: Path) -> MCPServerConfig:
@@ -1371,7 +1371,7 @@ def _combine_schemas(route: HTTPRoute) -> dict[str, Any]:
1371
1371
  if used_refs:
1372
1372
  result["$defs"] = {
1373
1373
  name: def_schema
1374
- for name, def_schema in result["$defs"].items()
1374
+ for name, def_schema in result["$defs"].items() # type: ignore[index]
1375
1375
  if name in used_refs
1376
1376
  }
1377
1377
  else:
@@ -1556,7 +1556,7 @@ def extract_output_schema_from_responses(
1556
1556
  if used_refs:
1557
1557
  output_schema["$defs"] = {
1558
1558
  name: def_schema
1559
- for name, def_schema in output_schema["$defs"].items()
1559
+ for name, def_schema in output_schema["$defs"].items() # type: ignore[index]
1560
1560
  if name in used_refs
1561
1561
  }
1562
1562
  else:
@@ -190,34 +190,33 @@ class Image:
190
190
  if path is not None and data is not None:
191
191
  raise ValueError("Only one of path or data can be provided")
192
192
 
193
- self.path = Path(os.path.expandvars(str(path))).expanduser() if path else None
193
+ self.path = self._get_expanded_path(path)
194
194
  self.data = data
195
195
  self._format = format
196
196
  self._mime_type = self._get_mime_type()
197
197
  self.annotations = annotations
198
198
 
199
+ @staticmethod
200
+ def _get_expanded_path(path: str | Path | None) -> Path | None:
201
+ """Expand environment variables and user home in path."""
202
+ return Path(os.path.expandvars(str(path))).expanduser() if path else None
203
+
199
204
  def _get_mime_type(self) -> str:
200
205
  """Get MIME type from format or guess from file extension."""
201
206
  if self._format:
202
207
  return f"image/{self._format.lower()}"
203
208
 
204
209
  if self.path:
205
- suffix = self.path.suffix.lower()
206
- return {
207
- ".png": "image/png",
208
- ".jpg": "image/jpeg",
209
- ".jpeg": "image/jpeg",
210
- ".gif": "image/gif",
211
- ".webp": "image/webp",
212
- }.get(suffix, "application/octet-stream")
210
+ # Workaround for WEBP in Py3.10
211
+ mimetypes.add_type("image/webp", ".webp")
212
+ resp = mimetypes.guess_type(self.path, strict=False)
213
+ if resp and resp[0] is not None:
214
+ return resp[0]
215
+ return "application/octet-stream"
213
216
  return "image/png" # default for raw binary data
214
217
 
215
- def to_image_content(
216
- self,
217
- mime_type: str | None = None,
218
- annotations: Annotations | None = None,
219
- ) -> mcp.types.ImageContent:
220
- """Convert to MCP ImageContent."""
218
+ def _get_data(self) -> str:
219
+ """Get raw image data as base64-encoded string."""
221
220
  if self.path:
222
221
  with open(self.path, "rb") as f:
223
222
  data = base64.b64encode(f.read()).decode()
@@ -225,6 +224,15 @@ class Image:
225
224
  data = base64.b64encode(self.data).decode()
226
225
  else:
227
226
  raise ValueError("No image data available")
227
+ return data
228
+
229
+ def to_image_content(
230
+ self,
231
+ mime_type: str | None = None,
232
+ annotations: Annotations | None = None,
233
+ ) -> mcp.types.ImageContent:
234
+ """Convert to MCP ImageContent."""
235
+ data = self._get_data()
228
236
 
229
237
  return mcp.types.ImageContent(
230
238
  type="image",
@@ -233,6 +241,11 @@ class Image:
233
241
  annotations=annotations or self.annotations,
234
242
  )
235
243
 
244
+ def to_data_uri(self, mime_type: str | None = None) -> str:
245
+ """Get image as a data URI."""
246
+ data = self._get_data()
247
+ return f"data:{mime_type or self._mime_type};base64,{data}"
248
+
236
249
 
237
250
  class Audio:
238
251
  """Helper class for returning audio from tools."""
fastmcp/utilities/ui.py CHANGED
@@ -454,7 +454,7 @@ def create_page(
454
454
  content: str,
455
455
  title: str = "FastMCP",
456
456
  additional_styles: str = "",
457
- csp_policy: str = "default-src 'none'; style-src 'unsafe-inline'; img-src https:; base-uri 'none'",
457
+ csp_policy: str = "default-src 'none'; style-src 'unsafe-inline'; img-src https: data:; base-uri 'none'",
458
458
  ) -> str:
459
459
  """
460
460
  Create a complete HTML page with FastMCP styling.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fastmcp
3
- Version: 2.13.0.1
3
+ Version: 2.13.1
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
@@ -18,19 +18,20 @@ Classifier: Programming Language :: Python :: 3.13
18
18
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
19
19
  Classifier: Typing :: Typed
20
20
  Requires-Python: >=3.10
21
- Requires-Dist: authlib>=1.5.2
22
- Requires-Dist: cyclopts>=3.0.0
21
+ Requires-Dist: authlib>=1.6.5
22
+ Requires-Dist: cyclopts>=4.0.0
23
23
  Requires-Dist: exceptiongroup>=1.2.2
24
24
  Requires-Dist: httpx>=0.28.1
25
- Requires-Dist: mcp<2.0.0,>=1.17.0
26
- Requires-Dist: openapi-core>=0.19.5
25
+ Requires-Dist: jsonschema-path>=0.3.4
26
+ Requires-Dist: mcp!=1.21.1,<2.0.0,>=1.19.0
27
27
  Requires-Dist: openapi-pydantic>=0.5.1
28
28
  Requires-Dist: platformdirs>=4.0.0
29
- Requires-Dist: py-key-value-aio[disk,keyring,memory]<0.3.0,>=0.2.6
29
+ Requires-Dist: py-key-value-aio[disk,keyring,memory]<0.3.0,>=0.2.8
30
30
  Requires-Dist: pydantic[email]>=2.11.7
31
31
  Requires-Dist: pyperclip>=1.9.0
32
32
  Requires-Dist: python-dotenv>=1.1.0
33
33
  Requires-Dist: rich>=13.9.4
34
+ Requires-Dist: uvicorn>=0.35
34
35
  Requires-Dist: websockets>=15.0.1
35
36
  Provides-Extra: openai
36
37
  Requires-Dist: openai>=1.102.0; extra == 'openai'
@@ -181,6 +182,8 @@ uv pip install fastmcp
181
182
 
182
183
  For full installation instructions, including verification, upgrading from the official MCPSDK, and developer setup, see the [**Installation Guide**](https://gofastmcp.com/getting-started/installation).
183
184
 
185
+ **Dependency Licensing:** FastMCP depends on Cyclopts for CLI functionality. Cyclopts v4 includes docutils as a transitive dependency, which has complex licensing that may trigger compliance reviews in some organizations. If this is a concern, you can install Cyclopts v5 alpha (`pip install "cyclopts>=5.0.0a1"`) which removes this dependency, or wait for the stable v5 release. See [this issue](https://github.com/BrianPugh/cyclopts/issues/672) for details.
186
+
184
187
  ## Core Concepts
185
188
 
186
189
  These are the building blocks for creating MCP servers and clients with FastMCP.
@@ -519,20 +522,20 @@ uv run pytest --cov=src --cov=examples --cov-report=html
519
522
 
520
523
  ### Static Checks
521
524
 
522
- FastMCP uses `pre-commit` for code formatting, linting, and type-checking. All PRs must pass these checks (they run automatically in CI).
525
+ FastMCP uses `prek` for code formatting, linting, and type-checking. All PRs must pass these checks (they run automatically in CI).
523
526
 
524
527
  Install the hooks locally:
525
528
 
526
529
  ```bash
527
- uv run pre-commit install
530
+ uv run prek install
528
531
  ```
529
532
 
530
533
  The hooks will now run automatically on `git commit`. You can also run them manually at any time:
531
534
 
532
535
  ```bash
533
- pre-commit run --all-files
536
+ prek run --all-files
534
537
  # or via uv
535
- uv run pre-commit run --all-files
538
+ uv run prek run --all-files
536
539
  ```
537
540
 
538
541
  ### Pull Requests
@@ -540,7 +543,7 @@ uv run pre-commit run --all-files
540
543
  1. Fork the repository on GitHub.
541
544
  2. Create a feature branch from `main`.
542
545
  3. Make your changes, including tests and documentation updates.
543
- 4. Ensure tests and pre-commit hooks pass.
546
+ 4. Ensure tests and prek hooks pass.
544
547
  5. Commit your changes and push to your fork.
545
548
  6. Open a pull request against the `main` branch of `jlowin/fastmcp`.
546
549
 
@@ -1,20 +1,20 @@
1
1
  fastmcp/__init__.py,sha256=oKNRn6cUVk3nabmXR9SFEvKz-yotC8tVDNYRorxX-Wk,1544
2
2
  fastmcp/exceptions.py,sha256=-krEavxwddQau6T7MESCR4VjKNLfP9KHJrU1p3y72FU,744
3
- fastmcp/mcp_config.py,sha256=7NWIUhe_D_2VpJ6bhgSX7MG4QFaLz9S7qhY-BV7BGAU,11361
3
+ fastmcp/mcp_config.py,sha256=YXZ0piljrxFgPYEwYSwPw6IiPwU3Cwp2VzlT9CWxutc,11397
4
4
  fastmcp/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
5
  fastmcp/settings.py,sha256=RqtXzbIGFWLFbgK82pGOx-OGWtrVKZe3KcBWinCgACY,13936
6
6
  fastmcp/cli/__init__.py,sha256=Ii284TNoG5lxTP40ETMGhHEq3lQZWxu9m9JuU57kUpQ,87
7
- fastmcp/cli/cli.py,sha256=NBQkeLdkaIGTtNsVqadUKf6_KhgWOzRBTCo4Si5q-Hk,29123
7
+ fastmcp/cli/cli.py,sha256=FMrda7kHwNDCflUiJTSWD_w3vuuQsgSj2IuWk8ZZsEM,29108
8
8
  fastmcp/cli/run.py,sha256=HeaiHYcVY17JpHg4UjnIHkP5ttU0PNd1bZIL3brif8A,7047
9
9
  fastmcp/cli/install/__init__.py,sha256=FUrwjMVaxONgz1qO7suzJNz1xosRfR3TOHlr3Z77JXA,797
10
10
  fastmcp/cli/install/claude_code.py,sha256=vGv8hbMUM6p5uQ1scy6E7Qxn0BZ2_INATF0xmSl5QWQ,7617
11
11
  fastmcp/cli/install/claude_desktop.py,sha256=aX_BrH5ODEN6UPHdw-Gnh0r5g8TojvTA7trqQRCEdAw,6832
12
- fastmcp/cli/install/cursor.py,sha256=o84evDEY7ZPVnljXY7KHiRwBrOm-zS39pu01LownSIw,10476
12
+ fastmcp/cli/install/cursor.py,sha256=0qSkKp4JuZj2dGOAsPph9XS_LswV8rQ8CqAuEx7TNhA,10685
13
13
  fastmcp/cli/install/gemini_cli.py,sha256=G7NhKnH21893baQjmVbFpwRyMbYIq7bocPQz1CBUH_8,7630
14
14
  fastmcp/cli/install/mcp_json.py,sha256=l7b0sWB10YlbcXtcwJv1X2iHEP9V9EwuuD63PyTMvXI,5832
15
15
  fastmcp/cli/install/shared.py,sha256=_1MNGCqf7BsAL6ntwA75wn86-0g-248ppQSAPQ8uTXk,5103
16
16
  fastmcp/client/__init__.py,sha256=QHvSGJCLejQkQ4o070vsUdKNB8vUhxckBByvHjnteTQ,663
17
- fastmcp/client/client.py,sha256=HA46tP0-aRgvNw542jfcKRM0nbVpzq9lyZLQ9YmYCJc,35875
17
+ fastmcp/client/client.py,sha256=_CiqszJLahHsNDgaOpkf5v8csJ6D1dDdpv3TiDsNwzs,38899
18
18
  fastmcp/client/elicitation.py,sha256=VNWgeBe2KipLp9mCc-6AApmfYAU1OlH9_3JdskfW_Wc,2521
19
19
  fastmcp/client/logging.py,sha256=WBByRoBIB-Bl3ZUJVFvHqRt4teYPAvqC8MnJ358Elg8,1939
20
20
  fastmcp/client/messages.py,sha256=NIPjt-5js_DkI5BD4OVdTf6pz-nGjc2dtbgt-vAY234,4329
@@ -22,10 +22,10 @@ fastmcp/client/oauth_callback.py,sha256=3xqL5_HD1QS9eGfw31HzoVF94QQelq_0TTqS7qWD
22
22
  fastmcp/client/progress.py,sha256=WjLLDbUKMsx8DK-fqO7AGsXb83ak-6BMrLvzzznGmcI,1043
23
23
  fastmcp/client/roots.py,sha256=IxI_bHwHTmg6c2H-s1av1ZgrRnNDieHtYwdGFbzXT5c,2471
24
24
  fastmcp/client/sampling.py,sha256=MEXgywI46X-E78gCLCKEiQ14iu4uQqohLav-MNCtD_U,1819
25
- fastmcp/client/transports.py,sha256=eJqs7fUvfbyuBX46KXDHqhezK50jyROP9xArz60Q0xg,40897
25
+ fastmcp/client/transports.py,sha256=sYbh50h0qcgB5C6OLdzHSF1hn2IOfty3XJEu2Dlg42o,40993
26
26
  fastmcp/client/auth/__init__.py,sha256=4DNsfp4iaQeBcpds0JDdMn6Mmfud44stWLsret0sVKY,91
27
27
  fastmcp/client/auth/bearer.py,sha256=MFEFqcH6u_V86msYiOsEFKN5ks1V9BnBNiPsPLHUTqo,399
28
- fastmcp/client/auth/oauth.py,sha256=6Ici1c6mqJCr0LBG65RaRzUVeI4RjblOoZKPcPwDdfY,11875
28
+ fastmcp/client/auth/oauth.py,sha256=RJSazIALhLoNtqbJk1lsktYjVypJ89OtJE7_tjjQHgE,12445
29
29
  fastmcp/contrib/README.md,sha256=rKknYSI1T192UvSszqwwDlQ2eYQpxywrNTLoj177SYU,878
30
30
  fastmcp/contrib/bulk_tool_caller/README.md,sha256=5aUUY1TSFKtz1pvTLSDqkUCkGkuqMfMZNsLeaNqEgAc,1960
31
31
  fastmcp/contrib/bulk_tool_caller/__init__.py,sha256=xvGSSaUXTQrc31erBoi1Gh7BikgOliETDiYVTP3rLxY,75
@@ -51,82 +51,84 @@ fastmcp/experimental/server/openapi/routing.py,sha256=hAhQCtode5NuEDVfzeMj5vK03T
51
51
  fastmcp/experimental/server/openapi/server.py,sha256=WQeUA3v69ZhrzN1-cbrDTC8EsaOXHwDSQT_NPgYrECk,16099
52
52
  fastmcp/experimental/utilities/openapi/README.md,sha256=pOXftamuVXxEMlOt-JAfpuvHeRGauC3l46ntD1WzM-A,8604
53
53
  fastmcp/experimental/utilities/openapi/__init__.py,sha256=6FTQyP-kWvFg5Ykq53j7byBhPuysOyMYSrFTdUAKeO0,1592
54
- fastmcp/experimental/utilities/openapi/director.py,sha256=m5QJDklBjMUJQEaoDPAZsu7tcJ1AI8hop05d_ElgJ0Y,8059
54
+ fastmcp/experimental/utilities/openapi/director.py,sha256=bsK5W8-vdydbB85xMLy5WsQJewnObXaDrtAIS5HdKjY,7956
55
55
  fastmcp/experimental/utilities/openapi/formatters.py,sha256=1RCd8DwPU8_4uF51pj8Qp3oSZkZmoxL5VUwxBzokAMg,15540
56
56
  fastmcp/experimental/utilities/openapi/json_schema_converter.py,sha256=z8FjEDedsvAU1tT_ztl7oL_ERbjGufS3meVO-WKJhuE,13089
57
57
  fastmcp/experimental/utilities/openapi/models.py,sha256=-kfndwZSe92tVtKAgOuFn5rk1tN7oydCZKtLOEMEalA,2805
58
- fastmcp/experimental/utilities/openapi/parser.py,sha256=SdVRNCpgSyZOOSXNUgW_ntCSlgtxIA8SAKFnXfH9Q20,34386
58
+ fastmcp/experimental/utilities/openapi/parser.py,sha256=qsa68Ro1c8ov77kdEP20IwZqD74E4IGKjtfeIkn3HdE,34338
59
59
  fastmcp/experimental/utilities/openapi/schemas.py,sha256=84nPtnOlfjNoFGDoVoWLs0dh_7Ps92p3AuHgpVA5a-s,23349
60
60
  fastmcp/prompts/__init__.py,sha256=BQ5ooDJcNhb5maYBcg2mF1VaHAY_A64cEU3UiCQ3Lw8,179
61
61
  fastmcp/prompts/prompt.py,sha256=G-P_Ln1xTQRy-bTyMFy2v--9guTNpn92e30cmysX1Q0,14335
62
62
  fastmcp/prompts/prompt_manager.py,sha256=5ZyT0blp5owuaN5pz_TQsyH6zUGFoUiVTGfiEnqBuj8,4262
63
63
  fastmcp/resources/__init__.py,sha256=si8aT_9taxUNN0vkfbifst_SCId56DZmYi4YOb4mtlE,463
64
64
  fastmcp/resources/resource.py,sha256=Rt260JyWuC_7Ufo3TtKxjPyKCTV-3zfsFF9wqHL8yWw,7168
65
- fastmcp/resources/resource_manager.py,sha256=uCEYpPqSfaakxAtyaqWT1urft8uKu_08rZCxMPOgH3Y,13268
65
+ fastmcp/resources/resource_manager.py,sha256=R-dtlhCYHcH1bnGuD0QW5aRUo_12_NeLkn9VLp4xmmU,13308
66
66
  fastmcp/resources/template.py,sha256=vu9InVUKc5CvEOUvlTXsZ8-tpet_-kf8yX-rNrxE4Pw,14802
67
67
  fastmcp/resources/types.py,sha256=efFLGD1Xc5Xq3sxlPaZ_8gtJ2UOixueTBV4KQTi4cOU,4936
68
68
  fastmcp/server/__init__.py,sha256=qxNmIJcqsrpxpUvCv0mhdEAaUn1UZd1xLd8XRoWUlfY,119
69
- fastmcp/server/context.py,sha256=W6qbSzNclJJqHWAX3vPHuTy4_3CYjJwT07fkrXZr4Co,26780
70
- fastmcp/server/dependencies.py,sha256=GAD2mHwDdRguAO3QbA8ungLfCtMGA5IOyEDtjlABWUw,3903
69
+ fastmcp/server/context.py,sha256=TYPUb7zr2rnNNmZSvaKbWy0J94dhdsL210eWl1HMPzQ,28650
70
+ fastmcp/server/dependencies.py,sha256=6p1fkx2N5kNnYPbjVWLRUF2jlTUv11o-EuD1DruFhZo,4239
71
71
  fastmcp/server/elicitation.py,sha256=WYsj-H9U-t3b6awcLUWl1b1EA5X48Ef6_kvLhxYgYGs,8777
72
72
  fastmcp/server/http.py,sha256=IMggGikJxIMg1CkHH1du3BiKtbD2SU4wDyS0xvLG1O8,12032
73
73
  fastmcp/server/low_level.py,sha256=b1Sx0_Py0QxeLXSLdDA5PjR9Dd9ANB7KSNkkGSr1AeE,5490
74
74
  fastmcp/server/openapi.py,sha256=xWiQC3mjk81G7ZWhXF3PpECuCM1arD2tiHF9EM9kUyU,42332
75
- fastmcp/server/proxy.py,sha256=cFQ2Cnnd6SfMfDhP3SvQACBB0j58m1oPWI1rA-A-K2M,25800
76
- fastmcp/server/server.py,sha256=tm7rEV1cX-jdHs08waX4-TiAG6dH8V1a8zEmPdyMkq4,109416
77
- fastmcp/server/auth/__init__.py,sha256=piRs8yWFWn2bjddJPOnclornIo4F-XFj6c8tdHl802A,695
78
- fastmcp/server/auth/auth.py,sha256=LluGLYxM6dWlpJoDKpNBLe4_QQOdK46ETeO808MvsSM,13660
75
+ fastmcp/server/proxy.py,sha256=VMz0Zr7kDRB5M3pg65NcEaGO2seaGFq940GLzpp8ux4,25805
76
+ fastmcp/server/server.py,sha256=kNjyox_v2a1Wez8cZx_K7Pg3WiWsrX9pcoQ91s1FX9I,109491
77
+ fastmcp/server/auth/__init__.py,sha256=1VZ3MhZhlByvo7QCWT1tMIdRdMppUw4_TeqclSPJeiI,820
78
+ fastmcp/server/auth/auth.py,sha256=YjRM4zHvTlAfQYB97HEnXfCgOXA60Kcrb5O2nHsyka8,14524
79
79
  fastmcp/server/auth/jwt_issuer.py,sha256=lJYvrpC1ygI4jkoJlL_nTH6m7FKdTw2lbEycKo4eHLY,7197
80
80
  fastmcp/server/auth/middleware.py,sha256=xwj3fUCLSlJK6n1Ehp-FN1qnjKqEz8b7LGAGMTqQ8Hk,3284
81
- fastmcp/server/auth/oauth_proxy.py,sha256=PgA8m5OjOcVHKdSt7U4_iIq1JwxchnoiSkmnKWDkb3Q,84053
82
- fastmcp/server/auth/oidc_proxy.py,sha256=NxFlEWOuceTPNhkckR0wpPtSutSCQsaWYPZPjTiSqKw,14487
81
+ fastmcp/server/auth/oauth_proxy.py,sha256=cWPs5k-fZBHWG9tbDxou5emw_0GRz0sO2XY76lmXPbE,89518
82
+ fastmcp/server/auth/oidc_proxy.py,sha256=-S3X0NjV34X07pR4zeXxfZWfa7Kk_mpehspuEhifWE8,15806
83
83
  fastmcp/server/auth/redirect_validation.py,sha256=Jlhela9xpTbw4aWnQ04A5Z-TW0HYOC3f9BMsq3NXx1Q,2000
84
- fastmcp/server/auth/handlers/authorize.py,sha256=szfmMSRPL5D6sfi3awsg04UXBokVk4x_tJhAnYjHRfs,11453
84
+ fastmcp/server/auth/handlers/authorize.py,sha256=1zrmXqRUhjiWSHgUhfj0CcCkj3uSlGkTnxHzaic0xYs,11617
85
85
  fastmcp/server/auth/providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
86
86
  fastmcp/server/auth/providers/auth0.py,sha256=dZkc7hppii20YWota_6_Y3vdNw-DZSq0OyModbly-RA,7814
87
87
  fastmcp/server/auth/providers/aws.py,sha256=MXoEEnXmeIlRjaHqTeNCmJ90iTx9jwUdEdpyLUmzfIc,10852
88
- fastmcp/server/auth/providers/azure.py,sha256=i9ozDabWxBl84G2GK_kxqfqWss4Mgb8O7Rr6A-15Kj0,15946
88
+ fastmcp/server/auth/providers/azure.py,sha256=pzXt6ZM5QurUNtvrPXdwNJJq8Y4RBewadQRfBqS97ZY,16919
89
89
  fastmcp/server/auth/providers/bearer.py,sha256=LwkCfDJS48BxBxZwrIrauqNfCtDrJtGqYyEWnJjUq7s,923
90
- fastmcp/server/auth/providers/descope.py,sha256=mbqToTMLVR5-ZTUECv9jhVeT3TNjrXStL-D_zCE2Y1U,6348
90
+ fastmcp/server/auth/providers/debug.py,sha256=92erHZGQB1ATsl6PwrXui6h3WJ4wLxE9ACbI3JutmWY,3881
91
+ fastmcp/server/auth/providers/descope.py,sha256=n2_9CE7L7rrOS8OBy3G997yUikS2DmkExZznqjKYiWs,6360
91
92
  fastmcp/server/auth/providers/github.py,sha256=xsv-Qj1VJRc64YcRuUG4a61xFH1nqqVX_biC7B1su9U,12414
92
93
  fastmcp/server/auth/providers/google.py,sha256=5e-XnbAB1xWV0wVPiTg4Lmn_oyniP07wfZ2OKZPDQDM,13629
93
- fastmcp/server/auth/providers/in_memory.py,sha256=bYg_vNNOiQjRl71KpLTmsSZJwqJl4wUbU2zYFZnWhK4,14257
94
+ fastmcp/server/auth/providers/in_memory.py,sha256=y8a8sfLQXctSB78yGpR3ZyG9x5pWRvI_t0LHgSZ4nvI,15444
94
95
  fastmcp/server/auth/providers/introspection.py,sha256=v2hlcuxxwug5myCr4KcTZlawwazAWYVHuRb0d3er13w,10733
95
- fastmcp/server/auth/providers/jwt.py,sha256=yn_p60afjJ8SvPyQ60_NrfbopE7QQbVurIvAY0G_xG4,19647
96
+ fastmcp/server/auth/providers/jwt.py,sha256=c-2Wji-CvuYt3U3unxjJR-5-EABRDks_755EpxKBDH8,20798
97
+ fastmcp/server/auth/providers/oci.py,sha256=-XXDCmxnyBYJ9kdv_Y3iLJ4MxLSOgUjZdJrGwH3vPrE,9849
96
98
  fastmcp/server/auth/providers/scalekit.py,sha256=_CEdJ5S9eT24gnNlVYzRMhNAjrkoysVOAPDoyAz8Pxw,6628
97
- fastmcp/server/auth/providers/supabase.py,sha256=An9eRZA5yLUC6Nt_eJlIsGaXFtAx0Gwsc1g0b1QGHlY,6478
98
- fastmcp/server/auth/providers/workos.py,sha256=RILp4Y04FE7VmvAmYA60IZ3SOlFXf2SKEgV7Jri5rbM,17232
99
+ fastmcp/server/auth/providers/supabase.py,sha256=9aK9fZ2OtccOF-ittMJnwj6sEzUNUTIrRPWAPLMwCac,7321
100
+ fastmcp/server/auth/providers/workos.py,sha256=_KWsgKPV4OJ6a37FaVgq2LIzM3Nx26G5QQhgS8x2MO4,17244
99
101
  fastmcp/server/middleware/__init__.py,sha256=LXT2IcZI4gbAtR4TnA7v_1lOWBR6eaHiE3Cp32Pv0bc,155
100
- fastmcp/server/middleware/caching.py,sha256=FFbYcnWMzmWZWnIPnFKh7tFXOhCi0R8D8Hs7DPGz68s,18277
102
+ fastmcp/server/middleware/caching.py,sha256=xYUXkFeuoLaIJ_TB2570qEBS1TtneJClJOpJGNsNbu8,18414
101
103
  fastmcp/server/middleware/error_handling.py,sha256=eSMKrmIxDcnhzLGyOL49hup5k5e0iwvH_n2XVxJ69W8,7726
102
- fastmcp/server/middleware/logging.py,sha256=oxFeMH5E5xs2i_Dbb9atmwbfG8Sohnlh8qgFB_L92uI,9411
103
- fastmcp/server/middleware/middleware.py,sha256=Kz04QS_R7hkPgpihtSOYTT6qyWUKENYLgo3ca4Na0zI,6611
104
+ fastmcp/server/middleware/logging.py,sha256=Reta-f4z8suYkJn4rPyJWYrNBeU25w8Y40U0uaV9ygo,9427
105
+ fastmcp/server/middleware/middleware.py,sha256=qCzUFJ8vZfd2HwQFl8vcZ_waaaIpQEZgcBnNRahgRwk,6599
104
106
  fastmcp/server/middleware/rate_limiting.py,sha256=MwhMOhgsIhZjYwEQB8H8961hohV5564JlTwwYy_9ctU,7915
105
107
  fastmcp/server/middleware/timing.py,sha256=lL_xc-ErLD5lplfvd5-HIyWEbZhgNBYkcQ74KFXAMkA,5591
106
108
  fastmcp/server/middleware/tool_injection.py,sha256=zElqBN-yjZvcTADp57e0dn86kpxT9xsFqvYztiXuA08,3595
107
109
  fastmcp/server/sampling/handler.py,sha256=yjLzvxlGllE-EY4bc6djsijEmwMT24PCpV6vJl-sPcI,580
108
110
  fastmcp/tools/__init__.py,sha256=XGcaMkBgwr-AHzbNjyjdb3ATgp5TQ0wzSq0nsrBD__E,201
109
- fastmcp/tools/tool.py,sha256=flY_cJsxqUjNpeObTVFo_QeC54t3ynJOuS87ULJi4pQ,20128
111
+ fastmcp/tools/tool.py,sha256=DG09yKLzHC7zzTsKhTU92fsQtK2S7OuMRe9XygbQFPk,21118
110
112
  fastmcp/tools/tool_manager.py,sha256=pCQGvKimXYEigcUqRHBd6_mbfJwD2KN3i0SmFj9Fj_c,5913
111
113
  fastmcp/tools/tool_transform.py,sha256=P6f2WVnqqFq9PEsN16go9FzpoRuV8sumxTShzKc6G8U,38462
112
114
  fastmcp/utilities/__init__.py,sha256=-imJ8S-rXmbXMWeDamldP-dHDqAPg_wwmPVz-LNX14E,31
113
115
  fastmcp/utilities/auth.py,sha256=ZVHkNb4YBpLE1EmmFyhvFB2qfWDZdEYNH9TRI9jylOE,1140
114
116
  fastmcp/utilities/cli.py,sha256=46gyOddE8kWhUV2lHFM7kA2v0YNyzcajvIX3Db8gJXk,12174
115
- fastmcp/utilities/components.py,sha256=lYB58QVm97szKjZ5kBs0aUKTQeIIEREte7WX5IHK5TU,5991
117
+ fastmcp/utilities/components.py,sha256=WY2Bmc4KOLFnDP3YVYB17q4tCCu8ky_naJ9MXFGX-6o,6009
116
118
  fastmcp/utilities/exceptions.py,sha256=7Z9j5IzM5rT27BC1Mcn8tkS-bjqCYqMKwb2MMTaxJYU,1350
117
119
  fastmcp/utilities/http.py,sha256=1ns1ymBS-WSxbZjGP6JYjSO52Wa_ls4j4WbnXiupoa4,245
118
120
  fastmcp/utilities/inspect.py,sha256=3wYUuQH1xCCCdzZwALHNqaRABH6iqpA43dIXEhqVb5Q,18030
119
- fastmcp/utilities/json_schema.py,sha256=jR-J_6IKVYe3VCwgrDLwiKJOGTdekvgbQJWXnEKJLHs,8824
121
+ fastmcp/utilities/json_schema.py,sha256=-XjtAVzCaaJ_S-HoWo7Aabvlu8ubBqyoOinm9E85F4o,8888
120
122
  fastmcp/utilities/json_schema_type.py,sha256=AjBhZtAj9-g6goCZbzrSyFthlwrRrfrE4DzgCuphYdw,22250
121
- fastmcp/utilities/logging.py,sha256=unGonXJEr3hMLqqg-vLVZrLwnt_miw0KyM81ea4T82c,6952
123
+ fastmcp/utilities/logging.py,sha256=61wVk5yQ62km3K8kZtkKtT_3EN26VL85GYW0aMtnwKA,7175
122
124
  fastmcp/utilities/mcp_config.py,sha256=qATTXMGiYET-7PflOixQOgiw3aOizX-RlloRjAo7nwI,1796
123
- fastmcp/utilities/openapi.py,sha256=eyIXuFZeOoucDh0bYZEo5iUfY0ED3G1ic2rvVNS8OdQ,63293
125
+ fastmcp/utilities/openapi.py,sha256=Q3DD3Yc3JwoUG0usSI75OxbLT1ASq9FQwOymx1F8YZk,63339
124
126
  fastmcp/utilities/tests.py,sha256=ChjKv-k5vf9y4ZHqItagBtooqPNrQiiJLAARUVOEP6M,8922
125
- fastmcp/utilities/types.py,sha256=ZOgLVKkBwnB7npl6kk6zoS2sK17JWDbfRTzLUzXsrWU,14755
126
- fastmcp/utilities/ui.py,sha256=Um089bgOO1BD45FWHKxLl31S9YniGVSIAVC3jLPnIqA,14010
127
+ fastmcp/utilities/types.py,sha256=BUuL-CeFSPMEXmW_Xtxh5hjSNXoh4LeoimrUs-Rqbm8,15275
128
+ fastmcp/utilities/ui.py,sha256=5UGjbkUEavFIPhL0OYIZ89cDXumjtYDmkqYtiC4FahY,14016
127
129
  fastmcp/utilities/mcp_server_config/__init__.py,sha256=hHBxEwRsrgN0Q-1bvj28X6UVGDpfG6dt3yfSBGsOY80,791
128
130
  fastmcp/utilities/mcp_server_config/v1/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
129
- fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py,sha256=65ZOxYEEVDg1lT_T99vTT9JZOhgQblNXYXbwgCYNPhc,15437
131
+ fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py,sha256=9XHryV-JnAcPP5YR_EzAkUDmj5Fm3PE8lNUgTflYZfs,15467
130
132
  fastmcp/utilities/mcp_server_config/v1/schema.json,sha256=ymDNFOWzcpnhIMeJmVPTw9b-NtHoHoru8Mc0WlSVxUY,8602
131
133
  fastmcp/utilities/mcp_server_config/v1/environments/__init__.py,sha256=Tkv0dmJ6tKKotOBo-tho09QVdvEjy37iBsvBbEwH0EA,256
132
134
  fastmcp/utilities/mcp_server_config/v1/environments/base.py,sha256=fbC1C25jI1whwXLlIQtmji5B4UEHLgKvw5K8NICb33Y,826
@@ -134,8 +136,8 @@ fastmcp/utilities/mcp_server_config/v1/environments/uv.py,sha256=DPVAXM5JDTN89wO
134
136
  fastmcp/utilities/mcp_server_config/v1/sources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
135
137
  fastmcp/utilities/mcp_server_config/v1/sources/base.py,sha256=Y5MCxJyoDsaxcBN1zDL0CZtF5oAXxT_yqQOI-ze9b34,967
136
138
  fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py,sha256=eFX47XNXz2oKHW8MZvx60dqyHkBxdg2FMOrHcyAS28g,8106
137
- fastmcp-2.13.0.1.dist-info/METADATA,sha256=EqUM1rRUJ4qVnyIO-NULW253sqJ-ry8poe9XDKYJ3Ss,20038
138
- fastmcp-2.13.0.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
139
- fastmcp-2.13.0.1.dist-info/entry_points.txt,sha256=ff8bMtKX1JvXyurMibAacMSKbJEPmac9ffAKU9mLnM8,44
140
- fastmcp-2.13.0.1.dist-info/licenses/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
141
- fastmcp-2.13.0.1.dist-info/RECORD,,
139
+ fastmcp-2.13.1.dist-info/METADATA,sha256=CA-GT_D_ov8yP-Fpb0MSFD7UgcFPvFfmBRxpS2H_Rkg,20507
140
+ fastmcp-2.13.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
141
+ fastmcp-2.13.1.dist-info/entry_points.txt,sha256=ff8bMtKX1JvXyurMibAacMSKbJEPmac9ffAKU9mLnM8,44
142
+ fastmcp-2.13.1.dist-info/licenses/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
143
+ fastmcp-2.13.1.dist-info/RECORD,,