fastmcp 2.5.2__py3-none-any.whl → 2.6.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/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.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
@@ -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
 
@@ -103,6 +104,7 @@ There are two ways to access the LLM-friendly documentation:
103
104
  - [Proxy Servers](#proxy-servers)
104
105
  - [Composing MCP Servers](#composing-mcp-servers)
105
106
  - [OpenAPI \& FastAPI Generation](#openapi--fastapi-generation)
107
+ - [Authentication \& Security](#authentication--security)
106
108
  - [Running Your Server](#running-your-server)
107
109
  - [Contributing](#contributing)
108
110
  - [Prerequisites](#prerequisites)
@@ -115,20 +117,20 @@ There are two ways to access the LLM-friendly documentation:
115
117
 
116
118
  ## What is MCP?
117
119
 
118
- The [Model Context Protocol (MCP)](https://modelcontextprotocol.io) lets you build servers that expose data and functionality to LLM applications in a secure, standardized way. Think of it like a web API, but specifically designed for LLM interactions. MCP servers can:
120
+ The [Model Context Protocol (MCP)](https://modelcontextprotocol.io) lets you build servers that expose data and functionality to LLM applications in a secure, standardized way. It is often described as "the USB-C port for AI", providing a uniform way to connect LLMs to resources they can use. It may be easier to think of it as an API, but specifically designed for LLM interactions. MCP servers can:
119
121
 
120
- - Expose data through **Resources** (similar to `GET` requests; load info into context)
121
- - Provide functionality through **Tools** (similar to `POST`/`PUT` requests; execute actions)
122
- - Define interaction patterns through **Prompts** (reusable templates)
122
+ - Expose data through **Resources** (think of these sort of like GET endpoints; they are used to load information into the LLM's context)
123
+ - Provide functionality through **Tools** (sort of like POST endpoints; they are used to execute code or otherwise produce a side effect)
124
+ - Define interaction patterns through **Prompts** (reusable templates for LLM interactions)
123
125
  - And more!
124
126
 
125
- FastMCP provides a high-level, Pythonic interface for building and interacting with these servers.
127
+ FastMCP provides a high-level, Pythonic interface for building, managing, and interacting with these servers.
126
128
 
127
129
  ## Why FastMCP?
128
130
 
129
131
  The MCP protocol is powerful but implementing it involves a lot of boilerplate - server setup, protocol handlers, content types, error management. FastMCP handles all the complex protocol details and server management, so you can focus on building great tools. It's designed to be high-level and Pythonic; in most cases, decorating a function is all you need.
130
132
 
131
- While the core server concepts of FastMCP 1.0 laid the groundwork and were contributed to the official MCP SDK, **FastMCP 2.0 (this project) is the actively developed successor**, adding significant enhancements and entirely new capabilities like a powerful **client library**, server **proxying**, **composition** patterns, **OpenAPI/FastAPI integration**, and much more.
133
+ FastMCP 2.0 has evolved into a comprehensive platform that goes far beyond basic protocol implementation. While 1.0 provided server-building capabilities (and is now part of the official MCP SDK), 2.0 offers a complete ecosystem including client libraries, authentication systems, deployment tools, integrations with major AI platforms, testing frameworks, and production-ready infrastructure patterns.
132
134
 
133
135
  FastMCP aims to be:
134
136
 
@@ -138,7 +140,7 @@ FastMCP aims to be:
138
140
 
139
141
  🐍 **Pythonic:** Feels natural to Python developers
140
142
 
141
- 🔍 **Complete:** FastMCP aims to provide a full implementation of the core MCP specification for both servers and clients
143
+ 🔍 **Complete:** A comprehensive platform for all MCP use cases, from dev to prod
142
144
 
143
145
  ## Installation
144
146
 
@@ -156,7 +158,7 @@ These are the building blocks for creating MCP servers and clients with FastMCP.
156
158
 
157
159
  ### The `FastMCP` Server
158
160
 
159
- The central object representing your MCP application. It holds your tools, resources, and prompts, manages connections, and can be configured with settings like [authentication providers](https://gofastmcp.com/servers/fastmcp#authentication).
161
+ The central object representing your MCP application. It holds your tools, resources, and prompts, manages connections, and can be configured with settings like authentication.
160
162
 
161
163
  ```python
162
164
  from fastmcp import FastMCP
@@ -329,6 +331,16 @@ Automatically generate FastMCP servers from existing OpenAPI specifications (`Fa
329
331
 
330
332
  Learn more: [**OpenAPI Integration**](https://gofastmcp.com/patterns/openapi) | [**FastAPI Integration**](https://gofastmcp.com/patterns/fastapi).
331
333
 
334
+ ### Authentication & Security
335
+
336
+ FastMCP provides built-in authentication support to secure both your MCP servers and clients in production environments. Protect your server endpoints from unauthorized access and authenticate your clients against secured MCP servers using industry-standard protocols.
337
+
338
+ - **Server Protection**: Secure your FastMCP server endpoints with configurable authentication providers
339
+ - **Client Authentication**: Connect to authenticated MCP servers with automatic credential management
340
+ - **Production Ready**: Support for common authentication patterns used in enterprise environments
341
+
342
+ Learn more in the **Authentication Documentation** for [servers](https://gofastmcp.com/servers/auth) and [clients](https://gofastmcp.com/clients/auth).
343
+
332
344
  ## Running Your Server
333
345
 
334
346
  The main way to run a FastMCP server is by calling the `run()` method on your server instance:
@@ -1,19 +1,22 @@
1
1
  fastmcp/__init__.py,sha256=yTAqLZORsPqbr7AE0ayw6zIYBeMlxQlI-3HE2WqbvHk,435
2
2
  fastmcp/exceptions.py,sha256=YvaKqOT3w0boXF9ylIoaSIzW9XiQ1qLFG1LZq6B60H8,680
3
3
  fastmcp/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- fastmcp/settings.py,sha256=aVOLK-QfhGr_0mPLVzBmeUxyS9_w8gSHAjMmRqEoEow,5577
4
+ fastmcp/settings.py,sha256=DbFdWx4EVHhJZF6e2GB0pBMCSjc425kXIVY8mqfOVX8,6175
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=CQxpRTXgnQQynGJLEV5g1FnLMaiWoiUgefnMZ7VxS4o,12367
8
8
  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
9
+ fastmcp/client/__init__.py,sha256=kd2hhSuD8rZuF87c9zlPJP_icJ-Rx3exyNoK0EzfOtE,617
10
+ fastmcp/client/client.py,sha256=vQk0l6htoD6CyO0le8q23iYd5hX1l8NIbxchedbWqgE,24872
12
11
  fastmcp/client/logging.py,sha256=hOPRailZUp89RUck6V4HPaWVZinVrNY8HD4hD0dd-fE,822
12
+ fastmcp/client/oauth_callback.py,sha256=ODAnVX-ettL82RuI5KpfkKf8iDtYMDue3Tnab5sjQtM,10071
13
13
  fastmcp/client/progress.py,sha256=WjLLDbUKMsx8DK-fqO7AGsXb83ak-6BMrLvzzznGmcI,1043
14
14
  fastmcp/client/roots.py,sha256=IxI_bHwHTmg6c2H-s1av1ZgrRnNDieHtYwdGFbzXT5c,2471
15
15
  fastmcp/client/sampling.py,sha256=UlDHxnd6k_HoU8RA3ob0g8-e6haJBc9u27N_v291QoI,1698
16
- fastmcp/client/transports.py,sha256=G1MQ7bHkmQbbni4ZWwMJs-opbPdqpyKYdg7TYkkjLbU,29986
16
+ fastmcp/client/transports.py,sha256=XBbw5nDzDQffeWmfDgWgXZUOX0hJqk3fdusnqqUge9c,31822
17
+ fastmcp/client/auth/__init__.py,sha256=4DNsfp4iaQeBcpds0JDdMn6Mmfud44stWLsret0sVKY,91
18
+ fastmcp/client/auth/bearer.py,sha256=MFEFqcH6u_V86msYiOsEFKN5ks1V9BnBNiPsPLHUTqo,399
19
+ fastmcp/client/auth/oauth.py,sha256=LJHCB-34EC-sL9GC97XFQkyanK8Cc5skAp6GkH0tKzE,14709
17
20
  fastmcp/contrib/README.md,sha256=rKknYSI1T192UvSszqwwDlQ2eYQpxywrNTLoj177SYU,878
18
21
  fastmcp/contrib/bulk_tool_caller/README.md,sha256=5aUUY1TSFKtz1pvTLSDqkUCkGkuqMfMZNsLeaNqEgAc,1960
19
22
  fastmcp/contrib/bulk_tool_caller/__init__.py,sha256=xvGSSaUXTQrc31erBoi1Gh7BikgOliETDiYVTP3rLxY,75
@@ -23,8 +26,6 @@ fastmcp/contrib/mcp_mixin/README.md,sha256=9DDTJXWkA3yv1fp5V58gofmARPQ2xWDhblYGv
23
26
  fastmcp/contrib/mcp_mixin/__init__.py,sha256=aw9IQ1ssNjCgws4ZNt8bkdpossAAGVAwwjBpMp9O5ZQ,153
24
27
  fastmcp/contrib/mcp_mixin/example.py,sha256=GnunkXmtG5hLLTUsM8aW5ZURU52Z8vI4tNLl-fK7Dg0,1228
25
28
  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
29
  fastmcp/prompts/__init__.py,sha256=An8uMBUh9Hrb7qqcn_5_Hent7IOeSh7EA2IUVsIrtHc,179
29
30
  fastmcp/prompts/prompt.py,sha256=_bMuLMSnkH_vJpPcf_b8HOUnMOsQJXZdtjZBoebzNjI,8249
30
31
  fastmcp/prompts/prompt_manager.py,sha256=qptEhZHMwc8XxQd5lTQg8iIb5MiTZVsNaux_XLvQ0mw,3871
@@ -35,26 +36,33 @@ fastmcp/resources/template.py,sha256=u0_-yNMmZfnl5DqtSRndGbGBrm7JgbzBU8IUd0hrEWE
35
36
  fastmcp/resources/types.py,sha256=5fUFvzRlekNjtfihtq8S-fT0alKoNfclzrugqeM5JRE,6366
36
37
  fastmcp/server/__init__.py,sha256=bMD4aQD4yJqLz7-mudoNsyeV8UgQfRAg3PRwPvwTEds,119
37
38
  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
39
+ fastmcp/server/dependencies.py,sha256=DfN40fz4UkmdzvVg3QesuHKUVJ07iQU5ookkWawAoH4,2336
40
+ fastmcp/server/http.py,sha256=RbUnqqKsiThOGZwJH-BIzC5_V1EXQh9tBlN4S-JJhbY,11624
41
+ fastmcp/server/openapi.py,sha256=yYO-_9QQhi6IUGW-TsSHkhZFLll4wt5ysbtl0VHaHZM,39239
41
42
  fastmcp/server/proxy.py,sha256=mt3eM6TQWfnZD5XehmTXisskZ4CBbsWyjRPjprlTjBY,9653
42
- fastmcp/server/server.py,sha256=TGC8ysEtA-fpuFzaqfvCstfWYJks5ClrCQl6zyYfLZM,58237
43
+ fastmcp/server/server.py,sha256=f_31CGp6MOLDzApe9epOlQryPZnc2rmFzIGprICJAYU,57739
44
+ fastmcp/server/auth/__init__.py,sha256=doHCLwOIElvH1NrTdpeP9JKfnNf3MDYPSpQfdsQ-uI0,84
45
+ fastmcp/server/auth/auth.py,sha256=kz02HGwXYU0N0clURZDjFNWdKSpTYmgmCnGJN-jSG3Y,1640
46
+ fastmcp/server/auth/providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
47
+ fastmcp/server/auth/providers/bearer.py,sha256=3pTKL3tEU7FlCD5yI81LTa2n0dBsM7GRpIIn30WCWsA,12679
48
+ fastmcp/server/auth/providers/bearer_env.py,sha256=MXsr4rjRm8DDmbdNd7IEXT6naCq48fkC1LlpoFAjt7c,1971
49
+ fastmcp/server/auth/providers/in_memory.py,sha256=sCRJambxXFZLg_EbJ5ma-aUZvtxuuKbGy7lTxIbzVb0,13772
43
50
  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
51
+ fastmcp/tools/tool.py,sha256=Lj0PZYNKbqZRBouqn17ayz2gDgU2-bEfHOC75r4GOB8,8687
52
+ fastmcp/tools/tool_manager.py,sha256=HVT1-8Sdir5yY45oOUedMWnD8HJUkVkLUy0U-eAayoQ,4516
46
53
  fastmcp/utilities/__init__.py,sha256=-imJ8S-rXmbXMWeDamldP-dHDqAPg_wwmPVz-LNX14E,31
47
54
  fastmcp/utilities/cache.py,sha256=aV3oZ-ZhMgLSM9iAotlUlEy5jFvGXrVo0Y5Bj4PBtqY,707
48
55
  fastmcp/utilities/decorators.py,sha256=AjhjsetQZF4YOPV5MTZmIxO21iFp_4fDIS3O2_KNCEg,2990
49
56
  fastmcp/utilities/exceptions.py,sha256=Aax9K0larjzrrgJBS6o_PQwoIrvBvVwck2suZvgafXE,1359
57
+ fastmcp/utilities/http.py,sha256=1ns1ymBS-WSxbZjGP6JYjSO52Wa_ls4j4WbnXiupoa4,245
50
58
  fastmcp/utilities/json_schema.py,sha256=m65XU9lPq7pCxJ9vvCeGRl0HOFr6ArezvYpMBR6-gAg,3777
51
59
  fastmcp/utilities/logging.py,sha256=B1WNO-ZWFjd9wiFSh13YtW1hAKaNmbpscDZleIAhr-g,1317
52
60
  fastmcp/utilities/mcp_config.py,sha256=_wY3peaFDEgyOBkJ_Tb8sETk3mtdwtw1053q7ry0za0,2169
53
61
  fastmcp/utilities/openapi.py,sha256=QQos4vP59HQ8vPDTKftWOIVv_zmW30mNxYSXVU7JUbY,38441
54
- fastmcp/utilities/tests.py,sha256=teyHcl3j7WGfYJ6m42VuQYB_IVpGvPdFqIpC-UxsN78,3369
62
+ fastmcp/utilities/tests.py,sha256=4Vuua6nVgbE5uQspEK0fk4tBuJ0rO4GTBmnyD0kXJPA,3930
55
63
  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,,
64
+ fastmcp-2.6.1.dist-info/METADATA,sha256=kTe3mh_2fOQJZRICJy6pAZS0gQmEKxrLZ2LXn57Vtoo,17609
65
+ fastmcp-2.6.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
66
+ fastmcp-2.6.1.dist-info/entry_points.txt,sha256=ff8bMtKX1JvXyurMibAacMSKbJEPmac9ffAKU9mLnM8,44
67
+ fastmcp-2.6.1.dist-info/licenses/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
68
+ fastmcp-2.6.1.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.