fastmcp 2.5.2__py3-none-any.whl → 2.6.0__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/settings.py CHANGED
@@ -1,16 +1,16 @@
1
1
  from __future__ import annotations as _annotations
2
2
 
3
3
  import inspect
4
- from typing import TYPE_CHECKING, Annotated, Literal
4
+ from pathlib import Path
5
+ from typing import Annotated, Literal
5
6
 
6
- from mcp.server.auth.settings import AuthSettings
7
7
  from pydantic import Field, model_validator
8
- from pydantic_settings import BaseSettings, SettingsConfigDict
8
+ from pydantic_settings import (
9
+ BaseSettings,
10
+ SettingsConfigDict,
11
+ )
9
12
  from typing_extensions import Self
10
13
 
11
- if TYPE_CHECKING:
12
- pass
13
-
14
14
  LOG_LEVEL = Literal["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"]
15
15
 
16
16
  DuplicateBehavior = Literal["warn", "error", "replace", "ignore"]
@@ -27,6 +27,8 @@ class Settings(BaseSettings):
27
27
  nested_model_default_partial_update=True,
28
28
  )
29
29
 
30
+ home: Path = Path.home() / ".fastmcp"
31
+
30
32
  test_mode: bool = False
31
33
  log_level: LOG_LEVEL = "INFO"
32
34
  enable_rich_tracebacks: Annotated[
@@ -171,13 +173,30 @@ class ServerSettings(BaseSettings):
171
173
  # cache settings (for checking mounted servers)
172
174
  cache_expiration_seconds: float = 0
173
175
 
174
- auth: AuthSettings | None = None
175
-
176
176
  # StreamableHTTP settings
177
177
  json_response: bool = False
178
178
  stateless_http: bool = (
179
179
  False # If True, uses true stateless mode (new transport per request)
180
180
  )
181
181
 
182
+ # Auth settings
183
+ default_auth_provider: Annotated[
184
+ Literal["bearer_env"] | None,
185
+ Field(
186
+ description=inspect.cleandoc(
187
+ """
188
+ Configure the authentication provider. This setting is intended only to
189
+ be used for remote confirugation of providers that fully support
190
+ environment variable configuration.
191
+
192
+ If None, no automatic configuration will take place.
193
+
194
+ This setting is *always* overriden by any auth provider passed to the
195
+ FastMCP constructor.
196
+ """
197
+ ),
198
+ ),
199
+ ] = None
200
+
182
201
 
183
202
  settings = Settings()
fastmcp/tools/tool.py CHANGED
@@ -46,6 +46,10 @@ class Tool(BaseModel):
46
46
  annotations: ToolAnnotations | None = Field(
47
47
  None, description="Additional annotations about the tool"
48
48
  )
49
+ exclude_args: list[str] | None = Field(
50
+ None,
51
+ description="Arguments to exclude from the tool schema, such as State, Memory, or Credential",
52
+ )
49
53
  serializer: Callable[[Any], str] | None = Field(
50
54
  None, description="Optional custom serializer for tool results"
51
55
  )
@@ -58,6 +62,7 @@ class Tool(BaseModel):
58
62
  description: str | None = None,
59
63
  tags: set[str] | None = None,
60
64
  annotations: ToolAnnotations | None = None,
65
+ exclude_args: list[str] | None = None,
61
66
  serializer: Callable[[Any], str] | None = None,
62
67
  ) -> Tool:
63
68
  """Create a Tool from a function."""
@@ -71,6 +76,18 @@ class Tool(BaseModel):
71
76
  if param.kind == inspect.Parameter.VAR_KEYWORD:
72
77
  raise ValueError("Functions with **kwargs are not supported as tools")
73
78
 
79
+ if exclude_args:
80
+ for arg_name in exclude_args:
81
+ if arg_name not in sig.parameters:
82
+ raise ValueError(
83
+ f"Parameter '{arg_name}' in exclude_args does not exist in function."
84
+ )
85
+ param = sig.parameters[arg_name]
86
+ if param.default == inspect.Parameter.empty:
87
+ raise ValueError(
88
+ f"Parameter '{arg_name}' in exclude_args must have a default value."
89
+ )
90
+
74
91
  func_name = name or getattr(fn, "__name__", None) or fn.__class__.__name__
75
92
 
76
93
  if func_name == "<lambda>":
@@ -85,11 +102,12 @@ class Tool(BaseModel):
85
102
  type_adapter = get_cached_typeadapter(fn)
86
103
  schema = type_adapter.json_schema()
87
104
 
105
+ prune_params: list[str] = []
88
106
  context_kwarg = find_kwarg_by_type(fn, kwarg_type=Context)
89
107
  if context_kwarg:
90
- prune_params = [context_kwarg]
91
- else:
92
- prune_params = None
108
+ prune_params.append(context_kwarg)
109
+ if exclude_args:
110
+ prune_params.extend(exclude_args)
93
111
 
94
112
  schema = compress_schema(schema, prune_params=prune_params)
95
113
 
@@ -100,6 +118,7 @@ class Tool(BaseModel):
100
118
  parameters=schema,
101
119
  tags=tags or set(),
102
120
  annotations=annotations,
121
+ exclude_args=exclude_args,
103
122
  serializer=serializer,
104
123
  )
105
124
 
@@ -66,6 +66,7 @@ class ToolManager:
66
66
  description: str | None = None,
67
67
  tags: set[str] | None = None,
68
68
  annotations: ToolAnnotations | None = None,
69
+ exclude_args: list[str] | None = None,
69
70
  ) -> Tool:
70
71
  """Add a tool to the server."""
71
72
  tool = Tool.from_function(
@@ -75,6 +76,7 @@ class ToolManager:
75
76
  tags=tags,
76
77
  annotations=annotations,
77
78
  serializer=self._serializer,
79
+ exclude_args=exclude_args,
78
80
  )
79
81
  return self.add_tool(tool)
80
82
 
@@ -0,0 +1,8 @@
1
+ import socket
2
+
3
+
4
+ def find_available_port() -> int:
5
+ """Find an available port by letting the OS assign one."""
6
+ with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
7
+ s.bind(("127.0.0.1", 0))
8
+ return s.getsockname()[1]
@@ -11,6 +11,7 @@ from typing import TYPE_CHECKING, Any, Literal
11
11
  import uvicorn
12
12
 
13
13
  from fastmcp.settings import settings
14
+ from fastmcp.utilities.http import find_available_port
14
15
 
15
16
  if TYPE_CHECKING:
16
17
  from fastmcp.server.server import FastMCP
@@ -71,30 +72,38 @@ def _run_server(mcp_server: FastMCP, transport: Literal["sse"], port: int) -> No
71
72
 
72
73
  @contextmanager
73
74
  def run_server_in_process(
74
- server_fn: Callable[..., None], *args
75
+ server_fn: Callable[..., None],
76
+ *args,
77
+ provide_host_and_port: bool = True,
78
+ **kwargs,
75
79
  ) -> Generator[str, None, None]:
76
80
  """
77
- Context manager that runs a Starlette app in a separate process and returns the
78
- server URL. When the context manager is exited, the server process is killed.
81
+ Context manager that runs a FastMCP server in a separate process and
82
+ returns the server URL. When the context manager is exited, the server process is killed.
79
83
 
80
84
  Args:
81
- app: The Starlette app to run.
85
+ server_fn: The function that runs a FastMCP server. FastMCP servers are
86
+ not pickleable, so we need a function that creates and runs one.
87
+ *args: Arguments to pass to the server function.
88
+ provide_host_and_port: Whether to provide the host and port to the server function as kwargs.
89
+ **kwargs: Keyword arguments to pass to the server function.
82
90
 
83
91
  Returns:
84
92
  The server URL.
85
93
  """
86
94
  host = "127.0.0.1"
87
- with socket.socket() as s:
88
- s.bind((host, 0))
89
- port = s.getsockname()[1]
95
+ port = find_available_port()
96
+
97
+ if provide_host_and_port:
98
+ kwargs |= {"host": host, "port": port}
90
99
 
91
100
  proc = multiprocessing.Process(
92
- target=server_fn, args=(host, port, *args), daemon=True
101
+ target=server_fn, args=args, kwargs=kwargs, daemon=True
93
102
  )
94
103
  proc.start()
95
104
 
96
105
  # Wait for server to be running
97
- max_attempts = 100
106
+ max_attempts = 10
98
107
  attempt = 0
99
108
  while attempt < max_attempts and proc.is_alive():
100
109
  try:
@@ -102,7 +111,10 @@ def run_server_in_process(
102
111
  s.connect((host, port))
103
112
  break
104
113
  except ConnectionRefusedError:
105
- time.sleep(0.01)
114
+ if attempt < 3:
115
+ time.sleep(0.01)
116
+ else:
117
+ time.sleep(0.1)
106
118
  attempt += 1
107
119
  else:
108
120
  raise RuntimeError(f"Server failed to start after {max_attempts} attempts")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fastmcp
3
- Version: 2.5.2
3
+ Version: 2.6.0
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
@@ -17,9 +17,10 @@ Classifier: Programming Language :: Python :: 3.12
17
17
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
18
18
  Classifier: Typing :: Typed
19
19
  Requires-Python: >=3.10
20
+ Requires-Dist: authlib>=1.5.2
20
21
  Requires-Dist: exceptiongroup>=1.2.2
21
22
  Requires-Dist: httpx>=0.28.1
22
- Requires-Dist: mcp<2.0.0,>=1.9.0
23
+ Requires-Dist: mcp<2.0.0,>=1.9.2
23
24
  Requires-Dist: openapi-pydantic>=0.5.1
24
25
  Requires-Dist: python-dotenv>=1.1.0
25
26
  Requires-Dist: rich>=13.9.4
@@ -41,14 +42,14 @@ Description-Content-Type: text/markdown
41
42
  <a href="https://trendshift.io/repositories/13266" target="_blank"><img src="https://trendshift.io/api/badge/repositories/13266" alt="jlowin%2Ffastmcp | Trendshift" style="width: 250px; height: 55px;" width="250" height="55"/></a>
42
43
  </div>
43
44
 
44
- > [!NOTE]
45
- > #### FastMCP 2.0 & The Official MCP SDK
45
+ > [!Note]
46
+ > #### Beyond the Protocol
47
+ >
48
+ > FastMCP is the standard framework for working with the Model Context Protocol. FastMCP 1.0 was incorporated into the [official low-level Python SDK](https://github.com/modelcontextprotocol/python-sdk), and FastMCP 2.0 *(this project)* provides a complete toolkit for working with the MCP ecosystem.
46
49
  >
47
- > FastMCP is the standard framework for building MCP servers and clients. FastMCP 1.0 was incorporated into the [official MCP Python SDK](https://github.com/modelcontextprotocol/python-sdk).
50
+ > FastMCP has a comprehensive set of features that go far beyond the core MCP specification, all in service of providing **the simplest path to production**. These include client support, server composition, auth, automatic generation from OpenAPI specs, remote server proxying, built-in testing tools, integrations, and more.
48
51
  >
49
- > **This is FastMCP 2.0,** the actively maintained version that significantly expands on 1.0's basic server-building capabilities by introducing full client support, server composition, OpenAPI/FastAPI integration, remote server proxying, built-in testing tools, and more.
50
- >
51
- > FastMCP 2.0 is the complete toolkit for modern AI applications. Ready to upgrade or get started? Follow the [installation instructions](https://gofastmcp.com/getting-started/installation), which include specific steps for upgrading from the official MCP SDK.
52
+ > Ready to upgrade or get started? Follow the [installation instructions](/getting-started/installation), which include specific steps for upgrading from the official MCP SDK.
52
53
 
53
54
  ---
54
55
 
@@ -1,19 +1,21 @@
1
1
  fastmcp/__init__.py,sha256=yTAqLZORsPqbr7AE0ayw6zIYBeMlxQlI-3HE2WqbvHk,435
2
2
  fastmcp/exceptions.py,sha256=YvaKqOT3w0boXF9ylIoaSIzW9XiQ1qLFG1LZq6B60H8,680
3
- fastmcp/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- fastmcp/settings.py,sha256=aVOLK-QfhGr_0mPLVzBmeUxyS9_w8gSHAjMmRqEoEow,5577
3
+ fastmcp/settings.py,sha256=DbFdWx4EVHhJZF6e2GB0pBMCSjc425kXIVY8mqfOVX8,6175
5
4
  fastmcp/cli/__init__.py,sha256=Ii284TNoG5lxTP40ETMGhHEq3lQZWxu9m9JuU57kUpQ,87
6
5
  fastmcp/cli/claude.py,sha256=IAlcZ4qZKBBj09jZUMEx7EANZE_IR3vcu7zOBJmMOuU,4567
7
6
  fastmcp/cli/cli.py,sha256=CQxpRTXgnQQynGJLEV5g1FnLMaiWoiUgefnMZ7VxS4o,12367
8
7
  fastmcp/cli/run.py,sha256=o7Ge6JZKXYwlY2vYdMNoVX8agBchAaeU_73iPndojIM,5351
9
- fastmcp/client/__init__.py,sha256=Ri8GFHolIKOZnXaMzIc3VpkLcEqAmOoYGCKgmSk6NnE,550
10
- fastmcp/client/base.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
- fastmcp/client/client.py,sha256=JxFC_YUOrDPZwiDbD0JgCHQsOy1F8Rup7hnege96OIc,23021
8
+ fastmcp/client/__init__.py,sha256=kd2hhSuD8rZuF87c9zlPJP_icJ-Rx3exyNoK0EzfOtE,617
9
+ fastmcp/client/client.py,sha256=vQk0l6htoD6CyO0le8q23iYd5hX1l8NIbxchedbWqgE,24872
12
10
  fastmcp/client/logging.py,sha256=hOPRailZUp89RUck6V4HPaWVZinVrNY8HD4hD0dd-fE,822
11
+ fastmcp/client/oauth_callback.py,sha256=ODAnVX-ettL82RuI5KpfkKf8iDtYMDue3Tnab5sjQtM,10071
13
12
  fastmcp/client/progress.py,sha256=WjLLDbUKMsx8DK-fqO7AGsXb83ak-6BMrLvzzznGmcI,1043
14
13
  fastmcp/client/roots.py,sha256=IxI_bHwHTmg6c2H-s1av1ZgrRnNDieHtYwdGFbzXT5c,2471
15
14
  fastmcp/client/sampling.py,sha256=UlDHxnd6k_HoU8RA3ob0g8-e6haJBc9u27N_v291QoI,1698
16
- fastmcp/client/transports.py,sha256=G1MQ7bHkmQbbni4ZWwMJs-opbPdqpyKYdg7TYkkjLbU,29986
15
+ fastmcp/client/transports.py,sha256=XBbw5nDzDQffeWmfDgWgXZUOX0hJqk3fdusnqqUge9c,31822
16
+ fastmcp/client/auth/__init__.py,sha256=4DNsfp4iaQeBcpds0JDdMn6Mmfud44stWLsret0sVKY,91
17
+ fastmcp/client/auth/bearer.py,sha256=MFEFqcH6u_V86msYiOsEFKN5ks1V9BnBNiPsPLHUTqo,399
18
+ fastmcp/client/auth/oauth.py,sha256=qznXKVnoTHpmhUzRgIcQ-44l-_FMBZ4Vmn4wG5njXOM,14865
17
19
  fastmcp/contrib/README.md,sha256=rKknYSI1T192UvSszqwwDlQ2eYQpxywrNTLoj177SYU,878
18
20
  fastmcp/contrib/bulk_tool_caller/README.md,sha256=5aUUY1TSFKtz1pvTLSDqkUCkGkuqMfMZNsLeaNqEgAc,1960
19
21
  fastmcp/contrib/bulk_tool_caller/__init__.py,sha256=xvGSSaUXTQrc31erBoi1Gh7BikgOliETDiYVTP3rLxY,75
@@ -23,8 +25,6 @@ fastmcp/contrib/mcp_mixin/README.md,sha256=9DDTJXWkA3yv1fp5V58gofmARPQ2xWDhblYGv
23
25
  fastmcp/contrib/mcp_mixin/__init__.py,sha256=aw9IQ1ssNjCgws4ZNt8bkdpossAAGVAwwjBpMp9O5ZQ,153
24
26
  fastmcp/contrib/mcp_mixin/example.py,sha256=GnunkXmtG5hLLTUsM8aW5ZURU52Z8vI4tNLl-fK7Dg0,1228
25
27
  fastmcp/contrib/mcp_mixin/mcp_mixin.py,sha256=cfIRbnSxsVzglTD-auyTE0izVQeHP7Oz18qzYoBZJgg,7899
26
- fastmcp/low_level/README.md,sha256=IRvElvOOc_RLLsqbUm7e6VOEwrKHPJeox0pV7JVKHWw,106
27
- fastmcp/low_level/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
28
  fastmcp/prompts/__init__.py,sha256=An8uMBUh9Hrb7qqcn_5_Hent7IOeSh7EA2IUVsIrtHc,179
29
29
  fastmcp/prompts/prompt.py,sha256=_bMuLMSnkH_vJpPcf_b8HOUnMOsQJXZdtjZBoebzNjI,8249
30
30
  fastmcp/prompts/prompt_manager.py,sha256=qptEhZHMwc8XxQd5lTQg8iIb5MiTZVsNaux_XLvQ0mw,3871
@@ -35,26 +35,33 @@ fastmcp/resources/template.py,sha256=u0_-yNMmZfnl5DqtSRndGbGBrm7JgbzBU8IUd0hrEWE
35
35
  fastmcp/resources/types.py,sha256=5fUFvzRlekNjtfihtq8S-fT0alKoNfclzrugqeM5JRE,6366
36
36
  fastmcp/server/__init__.py,sha256=bMD4aQD4yJqLz7-mudoNsyeV8UgQfRAg3PRwPvwTEds,119
37
37
  fastmcp/server/context.py,sha256=yN1e0LsnCl7cEpr9WlbvFhSf8oE56kKb-20m8h2SsBY,10171
38
- fastmcp/server/dependencies.py,sha256=4kdJLvWn-lMU7uPIJ-Np1RHBwvkbU7Dc31ZdsGTA9_I,2093
39
- fastmcp/server/http.py,sha256=wZWUrLvKITlvkxQoggJ9RyvynCUMEJqqMMsvX7Hmb9o,12807
40
- fastmcp/server/openapi.py,sha256=9qXSuEl671sT1F7nSM3SiD5KANGqHUhiL1BBdCnuCcU,39153
38
+ fastmcp/server/dependencies.py,sha256=DfN40fz4UkmdzvVg3QesuHKUVJ07iQU5ookkWawAoH4,2336
39
+ fastmcp/server/http.py,sha256=RbUnqqKsiThOGZwJH-BIzC5_V1EXQh9tBlN4S-JJhbY,11624
40
+ fastmcp/server/openapi.py,sha256=yYO-_9QQhi6IUGW-TsSHkhZFLll4wt5ysbtl0VHaHZM,39239
41
41
  fastmcp/server/proxy.py,sha256=mt3eM6TQWfnZD5XehmTXisskZ4CBbsWyjRPjprlTjBY,9653
42
- fastmcp/server/server.py,sha256=TGC8ysEtA-fpuFzaqfvCstfWYJks5ClrCQl6zyYfLZM,58237
42
+ fastmcp/server/server.py,sha256=l1kD2MBTEiZTB6pYXBSB7T3cYMRe1Fk6tQvOhLJZQyM,58210
43
+ fastmcp/server/auth/__init__.py,sha256=doHCLwOIElvH1NrTdpeP9JKfnNf3MDYPSpQfdsQ-uI0,84
44
+ fastmcp/server/auth/auth.py,sha256=kz02HGwXYU0N0clURZDjFNWdKSpTYmgmCnGJN-jSG3Y,1640
45
+ fastmcp/server/auth/providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
46
+ fastmcp/server/auth/providers/bearer.py,sha256=3pTKL3tEU7FlCD5yI81LTa2n0dBsM7GRpIIn30WCWsA,12679
47
+ fastmcp/server/auth/providers/bearer_env.py,sha256=MXsr4rjRm8DDmbdNd7IEXT6naCq48fkC1LlpoFAjt7c,1971
48
+ fastmcp/server/auth/providers/in_memory.py,sha256=PmHc6qnnPB2DDY9ybokvp0JL536llwCTmcd1B7-RTpo,13909
43
49
  fastmcp/tools/__init__.py,sha256=ocw-SFTtN6vQ8fgnlF8iNAOflRmh79xS1xdO0Bc3QPE,96
44
- fastmcp/tools/tool.py,sha256=Qx1sQ-D_llZIETPea8KoRn_vOjYgyriDqi0hpd_pRP8,7832
45
- fastmcp/tools/tool_manager.py,sha256=785vKYlJ9B2B5ThXFhuXYB4VNY4h0283-_AAdy1hEfk,4430
50
+ fastmcp/tools/tool.py,sha256=Lj0PZYNKbqZRBouqn17ayz2gDgU2-bEfHOC75r4GOB8,8687
51
+ fastmcp/tools/tool_manager.py,sha256=HVT1-8Sdir5yY45oOUedMWnD8HJUkVkLUy0U-eAayoQ,4516
46
52
  fastmcp/utilities/__init__.py,sha256=-imJ8S-rXmbXMWeDamldP-dHDqAPg_wwmPVz-LNX14E,31
47
53
  fastmcp/utilities/cache.py,sha256=aV3oZ-ZhMgLSM9iAotlUlEy5jFvGXrVo0Y5Bj4PBtqY,707
48
54
  fastmcp/utilities/decorators.py,sha256=AjhjsetQZF4YOPV5MTZmIxO21iFp_4fDIS3O2_KNCEg,2990
49
55
  fastmcp/utilities/exceptions.py,sha256=Aax9K0larjzrrgJBS6o_PQwoIrvBvVwck2suZvgafXE,1359
56
+ fastmcp/utilities/http.py,sha256=1ns1ymBS-WSxbZjGP6JYjSO52Wa_ls4j4WbnXiupoa4,245
50
57
  fastmcp/utilities/json_schema.py,sha256=m65XU9lPq7pCxJ9vvCeGRl0HOFr6ArezvYpMBR6-gAg,3777
51
58
  fastmcp/utilities/logging.py,sha256=B1WNO-ZWFjd9wiFSh13YtW1hAKaNmbpscDZleIAhr-g,1317
52
59
  fastmcp/utilities/mcp_config.py,sha256=_wY3peaFDEgyOBkJ_Tb8sETk3mtdwtw1053q7ry0za0,2169
53
60
  fastmcp/utilities/openapi.py,sha256=QQos4vP59HQ8vPDTKftWOIVv_zmW30mNxYSXVU7JUbY,38441
54
- fastmcp/utilities/tests.py,sha256=teyHcl3j7WGfYJ6m42VuQYB_IVpGvPdFqIpC-UxsN78,3369
61
+ fastmcp/utilities/tests.py,sha256=4Vuua6nVgbE5uQspEK0fk4tBuJ0rO4GTBmnyD0kXJPA,3930
55
62
  fastmcp/utilities/types.py,sha256=6CcqAQ1QqCO2HGSFlPS6FO5JRWnacjCcO2-EhyEnZV0,4400
56
- fastmcp-2.5.2.dist-info/METADATA,sha256=EU1bb1c0HO8jLeLAlTo-UCPA619yiw1kiAiFNA8bMMk,16510
57
- fastmcp-2.5.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
58
- fastmcp-2.5.2.dist-info/entry_points.txt,sha256=ff8bMtKX1JvXyurMibAacMSKbJEPmac9ffAKU9mLnM8,44
59
- fastmcp-2.5.2.dist-info/licenses/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
60
- fastmcp-2.5.2.dist-info/RECORD,,
63
+ fastmcp-2.6.0.dist-info/METADATA,sha256=vKeS0OYYNKKjJLcXi6jLtnb9TIsBo9niw38QTfwruxg,16605
64
+ fastmcp-2.6.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
65
+ fastmcp-2.6.0.dist-info/entry_points.txt,sha256=ff8bMtKX1JvXyurMibAacMSKbJEPmac9ffAKU9mLnM8,44
66
+ fastmcp-2.6.0.dist-info/licenses/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
67
+ fastmcp-2.6.0.dist-info/RECORD,,
fastmcp/client/base.py DELETED
File without changes
@@ -1 +0,0 @@
1
- Patched low-level objects. When possible, we prefer the official SDK, but we patch bugs here if necessary.
fastmcp/py.typed DELETED
File without changes