From bca310cddedb744ffce2b7ba74714a508fe05e7b Mon Sep 17 00:00:00 2001 From: Jeremiah Lowin <153965+jlowin@users.noreply.github.com> Date: Mon, 22 Dec 2025 14:49:39 -0500 Subject: [PATCH] Use ergonomic provider initialization pattern (#2675) Updates examples and convenience methods to pass providers directly to FastMCP's __init__ instead of calling add_provider() after instantiation. --- examples/providers/sqlite/server.py | 4 +--- src/fastmcp/server/openapi/server.py | 11 +++-------- src/fastmcp/server/providers/openapi/__init__.py | 4 +--- src/fastmcp/server/server.py | 8 ++------ 4 files changed, 7 insertions(+), 20 deletions(-) diff --git a/examples/providers/sqlite/server.py b/examples/providers/sqlite/server.py index 2d4c39893..dd9f19ff6 100644 --- a/examples/providers/sqlite/server.py +++ b/examples/providers/sqlite/server.py @@ -101,10 +101,8 @@ class SQLiteToolProvider(Provider): ) -mcp = FastMCP("DynamicToolsServer") - provider = SQLiteToolProvider(db_path=str(DB_PATH)) -mcp.add_provider(provider) +mcp = FastMCP("DynamicToolsServer", providers=[provider]) @mcp.tool diff --git a/src/fastmcp/server/openapi/server.py b/src/fastmcp/server/openapi/server.py index d79d478da..2a6b4a8b4 100644 --- a/src/fastmcp/server/openapi/server.py +++ b/src/fastmcp/server/openapi/server.py @@ -8,9 +8,7 @@ This class is deprecated. Use FastMCP with OpenAPIProvider instead: client = httpx.AsyncClient(base_url="https://api.example.com") provider = OpenAPIProvider(openapi_spec=spec, client=client) - - mcp = FastMCP("My API Server") - mcp.add_provider(provider) + mcp = FastMCP("My API Server", providers=[provider]) """ from __future__ import annotations @@ -55,9 +53,7 @@ class FastMCPOpenAPI(FastMCP): client = httpx.AsyncClient(base_url="https://api.example.com") provider = OpenAPIProvider(openapi_spec=spec, client=client) - - mcp = FastMCP("API Server") - mcp.add_provider(provider) + mcp = FastMCP("API Server", providers=[provider]) ``` """ @@ -94,8 +90,7 @@ class FastMCPOpenAPI(FastMCP): warnings.warn( "FastMCPOpenAPI is deprecated. Use FastMCP with OpenAPIProvider instead:\n" " provider = OpenAPIProvider(openapi_spec=spec, client=client)\n" - " mcp = FastMCP('name')\n" - " mcp.add_provider(provider)", + " mcp = FastMCP('name', providers=[provider])", DeprecationWarning, stacklevel=2, ) diff --git a/src/fastmcp/server/providers/openapi/__init__.py b/src/fastmcp/server/providers/openapi/__init__.py index 4f7a37a66..3cbdde5e8 100644 --- a/src/fastmcp/server/providers/openapi/__init__.py +++ b/src/fastmcp/server/providers/openapi/__init__.py @@ -10,9 +10,7 @@ Example: client = httpx.AsyncClient(base_url="https://api.example.com") provider = OpenAPIProvider(openapi_spec=spec, client=client) - - mcp = FastMCP("API Server") - mcp.add_provider(provider) + mcp = FastMCP("API Server", providers=[provider]) ``` """ diff --git a/src/fastmcp/server/server.py b/src/fastmcp/server/server.py index b8eaa30a1..8ff0903b1 100644 --- a/src/fastmcp/server/server.py +++ b/src/fastmcp/server/server.py @@ -2788,9 +2788,7 @@ class FastMCP(Generic[LifespanResultT]): tags=tags, timeout=timeout, ) - server = cls(name=name, **settings) - server.add_provider(provider) - return server + return cls(name=name, providers=[provider], **settings) @classmethod def from_fastapi( @@ -2847,9 +2845,7 @@ class FastMCP(Generic[LifespanResultT]): tags=tags, timeout=timeout, ) - server = cls(name=server_name, **settings) - server.add_provider(provider) - return server + return cls(name=server_name, providers=[provider], **settings) @classmethod def as_proxy(