diff --git a/src/fastmcp/server/providers/aggregate.py b/src/fastmcp/server/providers/aggregate.py index ee22d9880..bc8ad906c 100644 --- a/src/fastmcp/server/providers/aggregate.py +++ b/src/fastmcp/server/providers/aggregate.py @@ -151,10 +151,10 @@ class AggregateProvider(Provider): # Resources # ------------------------------------------------------------------------- - async def list_resources(self) -> Sequence[Resource]: + async def _list_resources(self) -> Sequence[Resource]: """List all resources from all providers (with transforms applied).""" results = await gather( - *[p._list_resources() for p in self._providers], + *[p.list_resources() for p in self._providers], return_exceptions=True, ) return self._collect_list_results(results, "list_resources") diff --git a/src/fastmcp/server/providers/base.py b/src/fastmcp/server/providers/base.py index 9a73d62ce..8595c9371 100644 --- a/src/fastmcp/server/providers/base.py +++ b/src/fastmcp/server/providers/base.py @@ -141,11 +141,11 @@ class Provider: return await chain(name, version=version) - async def _list_resources(self) -> Sequence[Resource]: + async def list_resources(self) -> Sequence[Resource]: """List resources with all transforms applied.""" async def base() -> Sequence[Resource]: - return await self.list_resources() + return await self._list_resources() chain = base for transform in self.transforms: @@ -272,7 +272,7 @@ class Provider: return None return max(matching, key=version_sort_key) # type: ignore[type-var] - async def list_resources(self) -> Sequence[Resource]: + async def _list_resources(self) -> Sequence[Resource]: """Return all available resources. Override to provide resources dynamically. Returns ALL versions of all resources. @@ -381,7 +381,7 @@ class Provider: # Fetch all component types in parallel results = await gather( self._list_tools(), - self.list_resources(), + self._list_resources(), self.list_resource_templates(), self.list_prompts(), ) diff --git a/src/fastmcp/server/providers/fastmcp_provider.py b/src/fastmcp/server/providers/fastmcp_provider.py index debdf70fc..b18caeb6b 100644 --- a/src/fastmcp/server/providers/fastmcp_provider.py +++ b/src/fastmcp/server/providers/fastmcp_provider.py @@ -510,7 +510,7 @@ class FastMCPProvider(Provider): # Resource methods # ------------------------------------------------------------------------- - async def list_resources(self) -> Sequence[Resource]: + async def _list_resources(self) -> Sequence[Resource]: """List all resources from the mounted server as FastMCPProviderResources. Runs the mounted server's middleware so filtering/transformation applies. diff --git a/src/fastmcp/server/providers/filesystem.py b/src/fastmcp/server/providers/filesystem.py index d539a9ccc..56c1fe534 100644 --- a/src/fastmcp/server/providers/filesystem.py +++ b/src/fastmcp/server/providers/filesystem.py @@ -186,10 +186,10 @@ class FileSystemProvider(LocalProvider): await self._ensure_loaded() return await super()._get_tool(name, version) - async def list_resources(self) -> Sequence[Resource]: + async def _list_resources(self) -> Sequence[Resource]: """Return all resources, reloading if in reload mode.""" await self._ensure_loaded() - return await super().list_resources() + return await super()._list_resources() async def get_resource( self, uri: str, version: VersionSpec | None = None diff --git a/src/fastmcp/server/providers/local_provider.py b/src/fastmcp/server/providers/local_provider.py index 17fafda68..788768b23 100644 --- a/src/fastmcp/server/providers/local_provider.py +++ b/src/fastmcp/server/providers/local_provider.py @@ -520,7 +520,7 @@ class LocalProvider(Provider): return None return max(matching, key=version_sort_key) # type: ignore[type-var] - async def list_resources(self) -> Sequence[Resource]: + async def _list_resources(self) -> Sequence[Resource]: """Return all visible resources.""" return [ v diff --git a/src/fastmcp/server/providers/openapi/provider.py b/src/fastmcp/server/providers/openapi/provider.py index 7330f70c9..839ca004d 100644 --- a/src/fastmcp/server/providers/openapi/provider.py +++ b/src/fastmcp/server/providers/openapi/provider.py @@ -364,7 +364,7 @@ class OpenAPIProvider(Provider): return None return tool - async def list_resources(self) -> Sequence[Resource]: + async def _list_resources(self) -> Sequence[Resource]: """Return all resources created from the OpenAPI spec.""" return list(self._resources.values()) diff --git a/src/fastmcp/server/providers/proxy.py b/src/fastmcp/server/providers/proxy.py index a2b15c86e..e504764b6 100644 --- a/src/fastmcp/server/providers/proxy.py +++ b/src/fastmcp/server/providers/proxy.py @@ -535,7 +535,7 @@ class ProxyProvider(Provider): # Resource methods # ------------------------------------------------------------------------- - async def list_resources(self) -> Sequence[Resource]: + async def _list_resources(self) -> Sequence[Resource]: """List all resources from the remote server.""" try: client = await self._get_client() diff --git a/src/fastmcp/server/server.py b/src/fastmcp/server/server.py index c83266872..f2e2c3555 100644 --- a/src/fastmcp/server/server.py +++ b/src/fastmcp/server/server.py @@ -879,10 +879,10 @@ class FastMCP(Provider, Generic[LifespanResultT]): ) return self._collect_list_results(results, "list_tools") - async def list_resources(self) -> Sequence[Resource]: + async def _list_resources(self) -> Sequence[Resource]: """Aggregate resources from all sub-providers.""" results = await gather( - *[p._list_resources() for p in self._providers], + *[p.list_resources() for p in self._providers], return_exceptions=True, ) return self._collect_list_results(results, "list_resources") @@ -1204,7 +1204,7 @@ class FastMCP(Provider, Generic[LifespanResultT]): ) # Query through full transform chain (provider transforms + server transforms + visibility) - resources = await self._list_resources() + resources = await self.list_resources() # Get auth context (skip_auth=True for STDIO which has no auth concept) skip_auth, token = _get_auth_context() diff --git a/tests/server/test_providers.py b/tests/server/test_providers.py index 2bdaacbff..cfcca05e7 100644 --- a/tests/server/test_providers.py +++ b/tests/server/test_providers.py @@ -384,7 +384,7 @@ class TestProviderExecutionMethods: """Test that default read_resource uses get_resource and reads it.""" class ResourceProvider(Provider): - async def list_resources(self) -> Sequence[Resource]: + async def _list_resources(self) -> Sequence[Resource]: return [ FunctionResource( uri=AnyUrl("test://data"),